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
的 )放在它的位置。
是的,您可以使用
kubeadm init
命令patches
行标志。看看这个 github 页面。这个东西的文档也可能感兴趣。另请参阅官方文档:使用补丁自定义控制平面:下面是如何在 kube-apiserver 上设置资源的示例:
kube-apiserver.yaml
在某个目录(例如)中创建/home/user/patches
具有以下内容的文件:然后在节点升级期间每次使用 --patches 标志:使用
kubeadm upgrade node --patches /home/user/patches/
或kubeadm upgrade apply v1.22.4 --patches /home/user/patches/
另一个选项是为控制平面组件提供额外的标志。为此,请查看本指南:使用 ClusterConfiguration 中的标志自定义控制平面: