我正在使用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%下降这一事实有关?
答案 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
出现并存活,但实际上已经死了。