防止 Kubernetes 在太多时中断(kubectl 不响应)Pods

Prevent Kubernetes breaking (kubectl does not respond) when too many Pods

当我在集群中 Pods 运行ning 太多时

Kubernetes 中断(kubectl 没有响应)(1000 pods).

资源绰绰有余(CPU 和内存),所以在我看来,某种控制器正在崩溃,无法处理大量资源Pods。

我需要 运行 的工作量可以大规模并行处理,因此我有很多 Pods。

实际上,我希望能够 运行 多次 1000 Pods。甚至 100,000 Pods

我的 Kubernetes 主节点是一个 AWS EC2 m4.xlarge 实例。

我的直觉告诉我,是主节点的网络性能阻碍了集群?

有什么想法吗?

详情:
我在部署中 运行ning 1000 Pods。
当我做 kubectl get deploy
它显示:

DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  
1000     1000     1000        458  

并且通过我的应用程序端数据库,我可以看到只有 458 Pods 个在工作。

当我做 kops validate cluster
我收到警告:

VALIDATION ERRORS
KIND            NAME                                                                    MESSAGE
ComponentStatus controller-manager                                                      component is unhealthy
ComponentStatus scheduler                                                               component is unhealthy
Pod             kube-system/kube-controller-manager-<ip>.ec2.internal        
kube-system pod 
"kube-controller-manager-<ip>.ec2.internal" is not healthy
Pod             
kube-system/kube-scheduler-<ip>.ec2.internal                 
kube-system pod "kube-scheduler-<ip>.ec2.internal" is not healthy

列出您的 pods 需要很长时间的事实与您的节点无关,因为它们能够处理 pods 尽可能多,具体取决于它们拥有的资源,例如 CPU 和内存.

您看到的问题更多是关于 kubeapi-server 能够 query/reply 大量 pods 或资源。

所以这里的两个争论点是 kube-apiserver 和 etcd,其中存储了 Kubernetes 集群中所有内容的状态。因此,您可以专注于优化这两个组件,并更快地从 kubectl get pods 获得响应(网络是另一个争论点,但如果您从慢速宽带连接发出 kubectl 命令)。

你可以试试:

  • 设置 HA external etcd cluster 具有相当强大的机器和快速磁盘。

  • 升级您的 kubeapi-server(s) 所在的机器。

  • 遵循 here.

  • 中描述的更多指南