当Pod过多时,防止Kubernetes崩溃(kubectl没有响应)



Kubernetes在集群中运行太多Pods时中断(kubectl没有响应((1000个Pods(。

足够的资源(CPU和内存(,所以在我看来,某种控制器正在崩溃,无法处理大量的Pod。

我需要运行的工作负载可以大规模并行处理,因此我有大量的Pod。

事实上,我希望能够多跑1000次播客。甚至可能100000个播客

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

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

有什么想法吗?

详细信息:
我正在部署中运行1000个Pod
当我执行kubectl get deploy
时,它显示:

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

通过我的应用程序端DB,我可以看到只有458个Pod在工作。

当我执行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

列出pod需要很长时间,这实际上与节点无关,因为它们能够处理pod,这取决于它们拥有的CPU和内存等资源。

您看到的问题更多的是kubeapi-server能够查询/回复大量的pod或资源。

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

你可以试试:

  • 用非常强大的机器和快速的磁盘建立一个HA外部etcd集群。

  • 升级kubeapi-server所在的计算机。

  • 请遵循此处描述的更多指导原则。

最新更新