首页 > 解决方案 > Autoscaler 未扩展,使节点处于 NotReady 状态,Pod 处于未知状态

问题描述

我在 GKE 上运行一个带有单个节点池的集群。它有 3 个节点,可以从 1 个节点扩展到 99 个节点。集群使用nginx-ingress控制器

在这个集群上,我想部署apps。应用程序由命名空间限定,由 3deployments和 1组成ingress(定义从 Internet 访问应用程序的路径)。每个部署运行一个容器的单个副本。

部署几个应用程序工作正常,但部署许多应用程序(需要节点池扩展)会破坏一切:

所有 pod 都开始出现警告(包括之前成功部署的那些)

kubectl get pods --namespace bcd
NAME                       READY     STATUS    RESTARTS   AGE
actions-664b7d79f5-7qdkw   1/1       Unknown   1          35m
actions-664b7d79f5-v8s2m   1/1       Running   1          18m
core-85cb74f89b-ns49z      1/1       Unknown   1          35m
core-85cb74f89b-qqzfp      1/1       Running   1          18m
nlu-77899ddbf-8pd7k        1/1       Running   1          27m

所有节点都变得未就绪

kubectl get nodes
NAME                                              STATUS     ROLES     AGE       VERSION
gke-clients-projects-default-pool-f9af73d4-gzwr   NotReady   <none>    42m       v1.9.7-gke.6
gke-clients-projects-default-pool-f9af73d4-p5l2   NotReady   <none>    21m       v1.9.7-gke.6
gke-clients-projects-default-pool-f9af73d4-wnxc   NotReady   <none>    37m       v1.9.7-gke.6

删除命名空间以从集群中删除所有资源似乎也失败了,因为很长一段时间后 pod 仍然处于活动状态但仍处于未知状态。

如何安全地添加更多应用程序并让集群自动扩展?

标签: kubernetesgoogle-cloud-platformgoogle-kubernetes-engine

解决方案


原因似乎是不知道每个 pod 所需的资源,调度程序将它们安排在任何可用的节点上,可能会耗尽可用资源并使 Docker 守护进程处于不一致的状态。

解决方案是指定资源请求和限制:https ://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container


推荐阅读