如果Kubernetes集群部署了大量的应用,负载跑满了每个node节点的CPU和Memory后,可能会导致Kubernetes集群自身的运行出问题。所以编辑 kubelet 的配置,预留集群和系统的资源。这里用 kubeadm 部署的1.28.2 k8s 集群。
编辑 kubelet.service 的配置文件,添加下面配置
vim /usr/lib/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
# /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
编辑 kubelet 的配置文件,追加以下内容
cat <<EOF | sudo tee -a /var/lib/kubelet/config.yaml
kubeReserved: #集群预留
cpu: "0.5"
memory: "1Gi"
ephemeral-storage: "1Gi"
systemReserved: #系统预留,集群外跑了服务才预留这么多。
cpu: "74"
memory: "266Gi"
ephemeral-storage: "1Gi"
evictionHard: #剩余资源驱逐的硬性阈值
memory.available: "250Mi"
nodefs.available: "10%"
imagefs.available: "10%"
nodefs.inodesFree: "5%"
EOF
修改好配置,重启 kubelet
systemctl daemon-reload && systemctl restart kubelet && systemctl status kubelet
查看工作节点的详细信息,
kubectl describe node c01n01|grep -A 13 Capacity
可以看到 系统资源总容量-预留资源=可分配资源,资源预留成功