使用Kubernetes我在具有3个smalll实例的群集上将应用程序部署到Google Cloud Containerengine。
在首次部署时,一切顺利:
kubectl create -f deployment.yaml
和
kubectl create -f service.yaml
然后我更改image
中的deployment.yaml
并更新它:
kubectl apply -f deployment.yaml
更新后,会发生以下几件事:
ReplicaSet
被创建(?)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
我不知道这一切都出了什么问题。我的本质是,我所做的只是更新部署的图像。
任何想法?
答案 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)