Kubernetes 在 Ubuntu 上的资源限制设置指南
一 核心概念与生效机制
二 在 Pod 或容器级别设置
apiVersion: v1
kind: Pod
metadata:
name: app
spec:
containers:
- name: app
image: nginx:1.25
resources:
requests:
cpu: "250m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
三 命名空间级别统一策略
apiVersion: v1
kind: LimitRange
metadata:
name: default-mem-cpu
namespace: dev
spec:
limits:
- type: Container
default:
cpu: "500m"
memory: "512Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
min:
cpu: "100m"
memory: "64Mi"
max:
cpu: "2"
memory: "1Gi"
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
四 节点级别资源保护与驱逐
--system-reserved=cpu=500m,memory=1Gi
--kube-reserved=cpu=500m,memory=1Gi
--eviction-hard=memory.available<500Mi,nodefs.available<10%,imagefs.available<15%
--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi
--node-status-update-frequency=10s
--eviction-pressure-transition-period=20s
sudo systemctl daemon-reload
sudo systemctl restart kubelet
五 验证与最佳实践
kubectl describe node <node-name>(关注 Allocatable/Allocated resources)。kubectl describe pod <pod-name>(是否因配额/限额/驱逐失败)。kubectl top pod <pod-name> --containers。cat /sys/fs/cgroup/memory/kubepods/burstable/pod<uid>/<container-id>/memory.limit_in_bytes