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
所在的计算机。 -
请遵循此处描述的更多指导原则。