在 kube-apiserver 上設置資源限制
Pod和容器的資源管理描述瞭如何在 Kubernetes 中為“正常”Pod 設置資源請求和限制。是否有支持/推薦的方法來為 kube-apiserver 等控制平面組件設置這些限制?
我考慮的事情:
- 修改靜態清單,例如在
/etc/kubernetes/manifests/kube-apiserver.yaml
. 這可以工作,但它將kubeadm
在下次升級期間被覆蓋。- 設置
kube-reserved
或system-reserved
標誌。然而,這也可以再次起作用 - 它們僅在一個 ConfigMap 中定義(例如),並且在節點升級期間kubelet-config-1.21
將被覆蓋。kubeadm
相同的限制將適用於控制平面節點和工作節點,我不希望這樣。我可以用 ansible 之類的東西來克服這個問題,但是 ansible 將與 kubeadm 一起“解決”,我想避免這種情況。
我想解決什麼問題?
我有一個小型的 homelab kubernetes 安裝。我希望允許在控制平面節點上執行正常 pod,但我希望能夠為控制平面組件保留一些資源(主要是記憶體)。即,我希望能夠設置
requests
kube-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