K8s 限制节点内存使用率,内存不足时自动驱逐POD
限制前内存如下

bash
# 1. 停止 kubelet
sudo systemctl stop kubelet
# 2. 备份当前配置
sudo cp /var/lib/kubelet/config.yaml /var/lib/kubelet/config.yaml.backup
# 3. 创建或编辑配置文件
sudo tee /var/lib/kubelet/config.yaml << 'EOF'
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
port: 10250
clusterDomain: cluster.local
# ========== 内存保护核心配置 ==========
evictionHard:
memory.available: "500Mi" # 可用内存低于500MB时立即驱逐
nodefs.available: "10%" # 磁盘低于10%
imagefs.available: "15%" # 镜像存储低于15%
nodefs.inodesFree: "5%" # inode低于5%
evictionSoft:
memory.available: "1Gi" # 可用内存低于1GB时触发警告
nodefs.available: "15%" # 磁盘低于15%
evictionSoftGracePeriod:
memory.available: "2m" # 内存警告后2分钟才驱逐
nodefs.available: "2m"
evictionMaxPodGracePeriod: 60 # Pod最长60秒优雅退出
evictionMinimumReclaim:
memory.available: "300Mi" # 每次至少回收300MB内存
nodefs.available: "500Mi" # 每次至少回收500MB磁盘
# ========== 预留配置 ==========
systemReserved:
memory: "1.5Gi" # 为系统进程预留1.5GB
cpu: "500m"
ephemeral-storage: "5Gi"
kubeReserved:
memory: "1Gi" # 为K8s组件预留1GB
cpu: "250m"
ephemeral-storage: "2Gi"
# ========== 其他重要配置 ==========
maxPods: 110 # 每节点最多Pod数
podPidsLimit: 4096 # 限制Pod的PID数量
cgroupDriver: systemd
failSwapOn: true
serializeImagePulls: true
EOF
# 4. 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl start kubelet
# 5. 检查状态
sudo systemctl status kubelet
4. 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl start kubelet
5. 检查状态
sudo systemctl status kubelet
增加配置后的内存情况
