CentOS环境下Kubernetes的资源管理
导读:CentOS 环境下 Kubernetes 资源管理实战指南 一 核心概念与单位 请求 Requests:容器启动时所需的最小资源,调度器据此选择节点;kubelet会为容器预留相应资源。 限制 Limits:容器可使用的最大资源,由 k...
CentOS 环境下 Kubernetes 资源管理实战指南
一 核心概念与单位
- 请求 Requests:容器启动时所需的最小资源,调度器据此选择节点;kubelet会为容器预留相应资源。
- 限制 Limits:容器可使用的最大资源,由 kubelet/内核强制执行。
- CPU 限制通过内核的 CPU 节流机制强制执行。
- 内存限制通过 OOM Killer 在内存压力时终止容器。
- 资源类型:常见为 CPU 与 内存;CPU 单位为核或毫核(1000m = 1 核),内存单位为字节(如 Mi/Gi)。
- Pod 级资源:自 v1.32 起可在 Pod 级别声明资源请求/限制(Alpha,默认关闭),便于统一预算与容器间资源共享。
二 命名空间配额与准入控制
- ResourceQuota:在命名空间层面限制资源总量与对象数量,例如限制 CPU/Memory 请求与上限、以及 Pods、Services、PVCs、ConfigMaps 等对象数量。
- 启用配额后的约束:一旦命名空间设置了 CPU 或内存配额,创建负载时必须显式设置 requests/limits,否则将被拒绝;若配额值为 0 表示不限制该资源。
- 默认与兜底:为避免用户遗漏,可配合 LimitRanger 准入控制器为未设置资源的 Pod 填充默认值。
- 系统命名空间:如 kube-system、kube-public 通常不支持设置资源配额。
三 常用资源配置示例
-
- Pod/容器级资源请求与限制
apiVersion: v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: app
image: nginx:1.25
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
-
- 命名空间级配额(计算资源 + 对象数量)
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-quota
namespace: team-a
spec:
hard:
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
pods: "10"
services: "5"
persistentvolumeclaims: "5"
-
- HPA 自动扩缩容(基于 CPU 利用率)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: demo-hpa
namespace: team-a
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
-
- GPU 资源(NVIDIA)
apiVersion: v1
kind: Pod
metadata:
name: gpu-demo
spec:
containers:
- name: cuda
image: nvidia/cuda:12.2-base
resources:
limits:
nvidia.com/gpu: 1
前提:节点已安装 NVIDIA 驱动 与 Device Plugin(如通过 DaemonSet 部署)。
四 调度与节点维度管理
- 节点亲和性与反亲和性:将 Pod 调度到满足特定标签的节点,或避免同组 Pod 挤在同一节点,提升可用性与资源利用。
- 污点与容忍度:通过 Taints/Tolerations 为专用节点(如 GPU/高内存)建立“准入门槛”,仅允许具备相应容忍的 Pod 调度。
- 拓扑分布约束:结合 topologySpreadConstraints 将副本分散到不同节点/可用区,增强容错与资源分布均衡。
五 监控 验证与优化建议
- 观测与排障:
- 查看节点资源与可分配量:
kubectl describe node < node> - 查看命名空间配额使用:
kubectl describe quota -n < ns> - 查看 Pod 事件与状态:
kubectl describe pod < pod>
- 查看节点资源与可分配量:
- 容量规划与弹性:
- 为关键命名空间设置 ResourceQuota 与 LimitRange,避免“吵闹邻居”。
- 结合 HPA 与 Cluster Autoscaler 实现按需扩缩,提升资源利用率与稳定性。
- 运行时与网络:
- 容器运行时优先选择 containerd/CRI-O;CNI 可选 Calico/Flannel 等高性能方案,并配合网络策略减少无效流量。
- GPU 管理要点:
- 使用 nvidia.com/gpu 资源请求;节点需预装驱动与 NVIDIA Device Plugin,否则 Pod 将处于 Pending 状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS环境下Kubernetes的资源管理
本文地址: https://pptw.com/jishu/754308.html
