防止 kube-system pod 在特定节点上运行

Sil*_*ris 4 google-cloud-platform kubernetes google-kubernetes-engine

我有一个在 GKE 上运行的集群。我创建了 2 个独立的节点池。我的第一个节点池(我们称之为main-pool)可从 1 个节点扩展到 10 个节点。第二个(我们称之为db-pool)可扩展为 0 到 10 个节点。这些db-pool节点有特定的需求,因为我必须动态创建一些相当大的数据库,请求大量内存,而这main-pool是针对“轻型”工作人员的。我使用节点选择器在正确的节点上创建我的工作人员,一切正常。

我遇到的问题是db-pool节点,因为它们请求大量内存,所以成本要高得多,我希望它们在没有数据库运行时缩小到 0。在我添加节点选择器之前它工作得很好(我不是 100% 确定,但似乎是在它发生的时候),但现在它不会缩小到少于 1 个节点。我相信这是因为一些 kube-system pod 正在该节点上运行:

NAME                                                       READY     STATUS    RESTARTS   AGE       IP              NODE                                            NOMINATED NODE
heapster-v1.6.0-beta.1-6c9dfdb9f5-2htn7                    3/3       Running   0          39m       10.56.18.22     gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   <none>
metrics-server-v0.3.1-5b4d6d8d98-7h659                     2/2       Running   0          39m       10.56.18.21     gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   <none>
fluentd-gcp-v3.2.0-jmlcv                                   2/2       Running   0          1h        10.132.15.241   gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   <none>
kube-proxy-gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   1/1       Running   0          1h        10.132.15.241   gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   <none>
prometheus-to-sd-stfz4                                     1/1       Running   0          1h        10.132.15.241   gke-padawan-cluster-ipf-db-pool-bb2827a7-99pm   <none>
Run Code Online (Sandbox Code Playgroud)

有什么办法可以防止这种情况发生吗?

Pat*_*k W 5

像 Fluentd 和(最终是 kube-proxy)这样的系统 Pod 是守护进程集,每个节点都需要它们;但这些不应该停止缩小规模。像 Heapster 和metrics-server 这样的 Pod 不是必需的,它们会阻止节点池缩小到 0。

阻止这些非节点关键系统 Pod 在昂贵的节点池上进行调度的最佳方法是使用taints 和 tolerations。污点将阻止 pod 被调度到节点,您只需通过设置容忍度和节点选择器来确保 db pod 确实被调度到更大的节点池上。

您应该在创建节点池时配置节点污点,以便在创建新节点时污点已就位。通过适当的污点和容忍,您的节点池应该能够毫无问题地缩小到 0。