今天優化了 k8s 生産叢集的部署,為系統(linux 與 k8s系統pod)保留最低資源,以免應用 pod 負載高拖垮整個節點。配置方法是手動給每個節點的 kubelet 添加配置檔案 `/etc/default/kubelet` ,并在其中通過 UBELET_EXTRA_ARGS 環境變量,添加了 `kube-reserved`, `system-reserved`, `eviction-hard` 這3個配置
今天優化了 k8s 生産叢集的部署,為系統(linux 與 k8s系統pod)保留最低資源,以免應用 pod 負載高拖垮整個節點。
配置方法是手動給每個節點的 kubelet 添加配置檔案
/etc/default/kubelet
,并在其中添加如下的配置: UBELET_EXTRA_ARGS="--kube-reserved=cpu=300m,memory=300Mi,ephemeral-storage=1Gi --system-reserved=cpu=200m,memory=200Mi,ephemeral-storage=1Gi --eviction-hard=memory.available<500Mi,nodefs.available<10%"
通過 UBELET_EXTRA_ARGS 環境變量,添加了
kube-reserved
,
system-reserved
eviction-hard
這3個配置。
重新開機 kubelet 使配置生效。
systemctl restart kubelet
節點使用的是4核8G的伺服器,添加配置前節點的 allocatable 情況:
$ kubectl get node k8s-node10 -o json | jq '.status.allocatable'
{
"cpu": "4",
"ephemeral-storage": "75974665296",
"hugepages-1Gi": "0",
"hugepages-2Mi": "0",
"memory": "8065516Ki",
"pods": "110"
}
添加配置後節點的 allocatable 情況:
$ kubectl get node k8s-node10 -o json | jq '.status.allocatable'
{
"cpu": "3500m",
"ephemeral-storage": "73827181648",
"hugepages-1Gi": "0",
"hugepages-2Mi": "0",
"memory": "7143916Ki",
"pods": "110"
}