【发布时间】:2015-12-10 18:01:47
【问题描述】:
我正在尝试将复制控制器的大小从 2 调整为 0,要删除的两个 pod 分别安排在 node1 和 node2 上。 node2 上的 pod 被删除没有问题,但 node1 上的 pod 根据kubectl get pods 和docker ps 保持活动并运行
症状:
kubectl scale rc my-app-v1 --replicas=0
kubectl get rc my-app-v1
# waited several minutes
kubectl get pods -l app=my-app
输出:
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
my-app-v1 my-app <docker image> <selector> 0
NAME READY STATUS RESTARTS AGE NODE
my-app-v1-a12da 1/1 Running 0 5d node1
两个 pod 中的一个已正确删除,而另一个仍在运行。我已经尝试了几次,并且一直只有 node1 有问题。
我试图解决的问题:
我 ssh 进入 node1 并重新启动了 kubelet。这删除了徘徊的 pod,但是当我尝试删除该节点上的另一个 pod 时,我仍然必须重新启动 kubelet 才能使其工作。
我认为 kubelet 循环在某个地方卡住了,并且在卡住之前只能通过几次迭代。
我刚刚打开了详细日志记录,但我不确定我应该寻找什么。
更新
这也适用于调度到 node1 的容器。他们的图像永远不会被拉出,也不会被启动。
node1 过去工作过,我昨晚刚开始遇到这个问题
Kubelet 版本
admin@node1 ~ $ /opt/bin/kubelet --version=true
Kubernetes v1.1.1
Kubectl 版本
kubectl version
Client Version: version.Info{Major:"1", Minor:"0", GitVersion:"v1.0.6", GitCommit:"388061f00f0d9e4d641f9ed4971c775e1654579d", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.1", GitCommit:"92635e23dfafb2ddc828c8ac6c03c7a7205a84d8", GitTreeState:"clean"}
日志摘录:SyncLoop 在哪里?
8154 config.go:382] Receiving a new pod "my-app-v1-a12da_default"
...
8154 server.go:944] GET /stats/default/my-app-v1-a12da/<some uuid>/app-container: (75.513µs) 404 [[Go 1.1 package http]
通常,SyncLoop 会选择它并执行必要的 docker 操作来启动容器。但是在“接收新 pod”之后没有同步循环活动,自从我重新启动 kubelet 以来,过去 50 分钟内没有同步循环活动。
【问题讨论】:
-
在删除 pod 期间,是否会在受影响的节点上发布 kubelet 的日志?这将使诊断更容易。
-
@PaulMorie 当然,我在健康节点和问题节点上都将详细程度提高到 10,有什么特别的东西我可以用 grep 来查找应该发生删除请求的位置吗?
-
你能通过运行
kubectl version来检查你的master的版本吗?对于 v1.0.+ 版本,kubelet不负责从 apisever 中删除 pod 对象。由于您仍然可以看到kubectl get pods中的 pod,因此您的集群中可能存在其他问题。 -
谢谢,我已经更新了kubectl版本,v1.0+中哪个服务负责删除和创建pod?
-
您的服务器版本是 v1.1,它假定 kubelet 会删除 pod。为了处理版本偏差,如果节点报告 kubelet 版本为 ,则合并了 [fix] (github.com/mikedanese/kubernetes/commit/…) 以指示节点控制器删除该节点的 pod
标签: kubernetes