Kubernetes

在 kube-apiserver 上設置資源限制

  • January 13, 2022

Pod和容器的資源管理描述瞭如何在 Kubernetes 中為“正常”Pod 設置資源請求和限制。是否有支持/推薦的方法來為 kube-apiserver 等控制平面組件設置這些限制?

我考慮的事情:

  • 修改靜態清單,例如在/etc/kubernetes/manifests/kube-apiserver.yaml. 這可以工作,但它將kubeadm在下次升級期間被覆蓋。
  • 設置kube-reservedsystem-reserved標誌。然而,這也可以再次起作用 - 它們僅在一個 ConfigMap 中定義(例如),並且在節點升級期間kubelet-config-1.21將被覆蓋。kubeadm相同的限制將適用於控制平面節點和工作節點,我不希望這樣。

我可以用 ansible 之類的東西來克服這個問題,但是 ansible 將與 kubeadm 一起“解決”,我想避免這種情況。

我想解決什麼問題?

我有一個小型的 homelab kubernetes 安裝。我希望允許在控制平面節點上執行正常 pod,但我希望能夠為控制平面組件保留一些資源(主要是記憶體)。即,我希望能夠設置requestskube-apiserver 之類的東西,以便調度程序知道不要將任何其他 pod(它們也將有適當requests的 )放在它的位置。

是否有支持/推薦的方法來為 kube-apiserver 等控制平面組件設置這些限制?

是的,您可以使用kubeadm init命令patches行標誌。看看這個 github 頁面。這個東西的文件也可能感興趣。另請參閱官方文件:使用更新檔自定義控制平面

Kubeadm 允許您將帶有更新檔文件的目錄傳遞到 InitConfiguration 各個 JoinConfiguration 節點上。這些更新檔可用作控制平面組件清單寫入磁碟之前的最後一個自定義步驟。

您可以將此文件傳遞給 kubeadm init with --config <YOUR CONFIG YAML>

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
patches:
 directory: /home/user/somedir

下面是如何在 kube-apiserver 上設置資源的範例:

kube-apiserver.yaml在某個目錄(例如)中創建/home/user/patches具有以下內容的文件:

spec:
 containers:
   - name: kube-apiserver
     resources:
       requests:
         memory: 512Mi
       limits:
         memory: 1024Mi

然後在節點升級期間每次使用 –patches 標誌:使用kubeadm upgrade node --patches /home/user/patches/kubeadm upgrade apply v1.22.4 --patches /home/user/patches/


另一個選項是為控制平面組件提供額外的標誌。為此,請查看本指南:使用 ClusterConfiguration 中的標誌自定義控制平面

kubeadm ClusterConfiguration 對象為使用者提供了一種方法來覆蓋傳遞給控制平面組件(如 APIServer、ControllerManager、Scheduler 和 Etcd)的預設標誌。組件使用以下結構定義:

  • apiServer
  • controllerManager
  • scheduler
  • etcd

引用自:https://serverfault.com/questions/1089688