為k8s預留系統資源


為k8s預留系統資源

Kubernetes 的節點可以按照 Capacity 調度。默認情況下 pod 能夠使用節點全部可用容量。 這是個問題,因為節點自己通常運行了不少驅動 OS 和 Kubernetes 的系統守護進程。 除非為這些系統守護進程留出資源,否則它們將與 pod 爭奪資源並導致節點資源短缺問題。

kubelet 公開了一個名為 Node Allocatable 的特性,有助於為系統守護進程預留計算資源。 Kubernetes 推薦集群管理員按照每個節點上的工作負載密度配置 Node Allocatable

節點可分配

如何配置

  • --enforce-node-allocatable,默認為pods,要為kube組件和System進程預留資源,則需要設置為pods,kube-reserved,system-reserve
  • --cgroups-per-qos,Enabling QoS and Pod level cgroups,默認開啟。開啟后,kubelet會將管理所有workload Pods的cgroups。
  • --cgroup-driver,默認為cgroupfs,另一可選項為systemd。取決於容器運行時使用的cgroup driver,kubelet與其保持一致。比如你配置docker使用systemd cgroup driver,那么kubelet也需要配置--cgroup-driver=systemd。
  • --kube-reserved,用於配置為kube組件(kubelet,kube-proxy,dockerd等)預留的資源量,比如—kube-reserved=cpu=1000m,memory=8Gi,ephemeral-storage=16Gi。
  • --kube-reserved-cgroup,如果你設置了--kube-reserved,那么請一定要設置對應的cgroup,並且該cgroup目錄要事先創建好,否則kubelet將不會自動創建導致kubelet啟動失敗。比如設置為kube-reserved-cgroup=/kubelet.service 。
  • --system-reserved,用於配置為System進程預留的資源量,比如—system-reserved=cpu=500m,memory=4Gi,ephemeral-storage=4Gi。
  • --system-reserved-cgroup,如果你設置了--system-reserved,那么請一定要設置對應的cgroup,並且該cgroup目錄要事先創建好,否則kubelet將不會自動創建導致kubelet啟動失敗。比如設置為system-reserved-cgroup=/system.slice。
  • --eviction-hard,用來配置kubelet的hard eviction條件,只支持memory和ephemeral-storage兩種不可壓縮資源。當出現MemoryPressure時,Scheduler不會調度新的Best-Effort QoS Pods到此節點。當出現DiskPressure時,Scheduler不會調度任何新Pods到此節點。

以32C/96G為例:

我是kubespray安裝的在/etc/kubernetes/kubelet.env添加以下參數后重啟kubelet生效:

--system-reserved=cpu=200m,memory=10Gi \
--eviction-hard=memory.available<10Gi,nodefs.available<1Gi,imagefs.available<1Gi \ --eviction-minimum-reclaim=memory.available=1Gi,nodefs.available=500Mi,imagefs.available=1Gi \
--node-status-update-frequency=10s --eviction-pressure-transition-period=30s"

內存壓測:

yum install -y stress
stress -i 1 --vm 1 --vm-bytes 20G

 參考鏈接:https://kubernetes.io/zh/docs/tasks/administer-cluster/reserve-compute-resources/

 如果用原生的kubeadm安裝,則需修改/var/lib/kubelet/kubeadm-flags.env文件后重啟kubelet生效。

KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.4.1 --max-pods=130 \
--system-reserved=cpu=20m,memory=100Mi \
--eviction-hard=memory.available<1Mi,nodefs.available<1Mi,imagefs.available<1Mi \
--eviction-minimum-reclaim=memory.available=1Gi,nodefs.available=500Mi,imagefs.available=1Gi \
--node-status-update-frequency=10s --eviction-pressure-transition-period=30s"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM