Kubernetes管理Linux资源的核心机制与实践
Kubernetes通过**资源请求(Requests)和资源限制(Limits)**实现对Linux节点资源(CPU、内存等)的精细化管控,是资源管理的核心工具。
requests.cpu: "250m"(0.25核)、requests.memory: "64Mi",调度器只会选择CPU剩余≥0.25核、内存剩余≥64Mi的节点。为避免单个命名空间或用户过度占用集群资源,Kubernetes通过ResourceQuota对象限制命名空间内的资源总量。可限制的资源包括:
requests.cpu、limits.cpu、requests.memory、limits.memory;persistentvolumeclaims(PVC数量)、storage(存储容量);pods、services等。apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: my-namespace
spec:
hard:
requests.cpu: "2"
requests.memory: 4Gi
persistentvolumeclaims: "10"
资源配额能有效防止单个团队或应用独占集群资源,保障集群的公平性和稳定性。
Kubernetes通过节点资源预留和Linux OOM管理,确保节点自身及关键系统进程的正常运行。
kube-reserved(Kubernetes组件预留资源)、system-reserved(系统进程预留资源)参数,为kubelet、Docker、内核等预留资源。例如,在kubelet配置中设置:kube-reserved:
cpu: "500m"
memory: "1Gi"
ephemeral-storage: "1Gi"
system-reserved:
cpu: "1"
memory: "1Gi"
ephemeral-storage: "1Gi"
这些预留资源会从节点总资源中扣除,避免Kubernetes组件或系统进程因资源不足而崩溃。oom_score)终止进程。Kubernetes会调整Pod的OOM分数(oom_score_adj),优先终止低优先级的Pod(如BestEffort类型的Pod),保护关键Pod(如Guaranteed类型的Pod)。Kubernetes通过Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler实现资源的动态调整,提升集群利用率。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
namespace: my-namespace
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
除常规计算资源外,Kubernetes还支持巨页(Huge Pages)、GPU/Device Plugin等特殊资源的管理。
hugepages-<size>资源类型支持巨页配置,例如:resources:
limits:
hugepages-2Mi: "80Mi" # 请求80个2MiB的巨页(共160MiB)
需注意:巨页资源不能过量使用(如不能超过节点总内存),否则会导致Pod调度失败。resources:
limits:
nvidia.com/gpu: 1 # 请求1个GPU
Device Plugin会自动将GPU设备挂载到容器中,支持多GPU分配。Kubernetes通过kubelet收集Pod的资源使用数据(如CPU、内存、存储用量),并将其纳入Pod的status中。可通过以下方式监控资源使用:
kubectl top pods(查看Pod的CPU/内存使用量)、kubectl describe node(查看节点的资源分配情况);