一个节点关闭后,Kubernetes服务停止

时间:2015-11-24 14:26:17

标签: ubuntu kubernetes

我正在使用VM(主)和3个裸机服务器(都运行Ubuntu 14.04)建立一个小型Kubernetes集群。我跟着Kubernetes install tutorial for Ubuntu。每个裸机服务器还有使用Ceph 0.94.5导出的2T磁盘空间。一切都运行正常,但当一个节点无法启动(它无法安装分区)时,群集提供的唯一服务也停止工作。我运行了一些命令:

$ kubectl get nodes
NAME        LABELS                             STATUS
10.70.2.1   kubernetes.io/hostname=10.70.2.1   Ready,SchedulingDisabled
10.70.2.2   kubernetes.io/hostname=10.70.2.2   Ready
10.70.2.3   kubernetes.io/hostname=10.70.2.3   NotReady
10.70.2.4   kubernetes.io/hostname=10.70.2.4   Ready

它只是表明我有一个节点。

$ kubectl get pods
NAME               READY     STATUS    RESTARTS   AGE
java-mysql-5v7iu   1/1       Running   1          5d
java-site-vboaq    1/1       Running   0          4d

$ kubectl get services
NAME         LABELS                                    SELECTOR          IP(S)          PORT(S)
java-mysql   name=java-mysql                           name=java-mysql   ***.***.3.12   3306/TCP
java-site    name=java-site                            name=java-site    ***.***.3.11   80/TCP
kubernetes   component=apiserver,provider=kubernetes   <none>            ***.***.3.1    443/TCP

它显示所有播客和服务都运行良好。但是,我无法连接其中一个广告连播(java-site-vboaq):

$ kubectl exec java-site-vboaq -i -t -- bash
error: Error executing remote command: Error executing command in container: container not found ("java-site")

但是,pod甚至没有在被击落的节点上运行:

$ kubectl describe pod java-mysql-5v7iu
Image(s):           mysql:5
Node:               10.70.2.2/10.70.2.2
Status:             Running

$ kubectl describe pod java-site-vboaq
Image(s):           javasite-img
Node:               10.70.2.2/10.70.2.2
Status:             Running

在被击落的节点(10.70.2.3)恢复后,一切都恢复正常。

如何解决此问题?如果一个节点出局,我希望Kubernetes相应地迁移pod并保持服务正常运行。是否与被击倒的节点卡在引导(等待分区挂载)而不是100%下降这一事实有关?

2 个答案:

答案 0 :(得分:1)

这里有一些潜在的问题: 1)Ceph需要启动并运行其节点:您是说节点是从不同的Ceph集群安装磁盘,还是在同一节点上运行的Ceph集群?如果是相同的节点,那么驱动器无法访问就有意义使K8s瘫痪。

2)在尝试安装已安装在不同节点上的磁盘时,有一个错误(至少在1.0.6上并且不确定它是否已解决)关于pod无法启动的错误,因为它从未卸下过。这是一个K8s问题(抱歉现在似乎无法找到链接)

3)如果节点3只有2个节点,那么etd也可能会等待节点3,因为它需要多数选举一个主节点。

答案 1 :(得分:0)

当节点发生故障时,kubernetes不会立即将该节点上的pod视为死机。在宣布死亡之前等了5分钟。

因此,如果您的节点重新启动,然后没有回到运行kubelet的位置,那么该节点上的任何pod将在重新启动后的5分钟内根据kubectl出现并存活,但实际上已经死了。