Kubernetes部署更新崩溃了ReplicaSet并创建了太多Pod

时间:2017-04-08 18:57:16

标签: kubernetes google-cloud-platform kubectl

使用Kubernetes我在具有3个smalll实例的群集上将应用程序部署到Google Cloud Containerengine。

在首次部署时,一切顺利:

kubectl create -f deployment.yaml

kubectl create -f service.yaml

然后我更改image中的deployment.yaml并更新它:

kubectl apply -f deployment.yaml

更新后,会发生以下几件事:

  • Kubernetes正确更新其Pod,结束了3个更新的实例。
  • 此后短,另一个ReplicaSet被创建(?)
  • 此外,Pod的双倍数量(2 * 3 = 6)突然出现,其中一半的状态为Running,另一半为Unknown

所以我检查了我的Pod并发现了这个错误:

FailedSync      Error syncing pod, skipping: network is not ready: [Kubenet does not have netConfig. This is most likely due to lack of PodCIDR]

此外,我无法再使用kubectl proxy使用仪表板。该页面显示:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "no endpoints available for service \"kubernetes-dashboard\"",
  "reason": "ServiceUnavailable",
  "code": 503
}

所以我决定先删掉所有豆荚:

kubectl delete pod <pod-name> --grace-period=0 --force

然后,触发了三个Pod进行创建,因为这是在service.yaml中定义的。但是在使用kubectl describe pods/<pod-name>检查我的Pod时,我看到了:

no nodes available to schedule pods

我不知道这一切都出了什么问题。我的本质是,我所做的只是更新部署的图像。

任何想法?

2 个答案:

答案 0 :(得分:1)

我在Kubernetes上遇到过类似的问题。根据您对我的问题的回复(见上文):

  

我注意到只有当我部署到Google Cloud上的微型实例时才会发生这种情况,因为Google Cloud上没有足够的资源来处理部署。扩大初始资源(CPU,内存)解决了我的问题

在我看来,这里发生的事情是来自Linux内核的OOM杀手最终杀死了kubelet,这反过来又让Node对群集无用(并且变成了#34; Unknown&#34 ;)

此问题的真正解决方案(防止整个节点退出服务)是添加resource limits。确保您只是添加请求;添加限制因为你希望你的服务 - 而不是K8s系统服务 - 被杀死,以便可以适当地重新安排它们(如果可能的话)。

同样在群集设置内部(特别是在节点池中 - 从https://console.cloud.google.com/kubernetes/list中选择),有一个框可以检查&#34;自动节点修复&#34;这至少会部分地重新解决这个问题,而不是给你一个不确定的停机时间。

答案 1 :(得分:0)

如果您只想更新图片,请尝试使用kubectl set image。这至少对我有用。

通过谷歌搜索kubectl apply似乎确实出现了许多已知问题。例如,请参阅此issuethis one

您没有发布您部署的kubernetes版本,但是如果您可以尝试将群集升级到最新版本以查看问题是否仍然存在。