Kubernetes奴隶的行为不一致,很少有奴隶没有出现

时间:2016-05-19 15:33:50

标签: containers kubernetes coreos kubernetes-health-check

我在AWS中有一个kubernetes主设置,由ELB平衡。 我使用terraform创建了5-6个实例,并将其设置为kube奴隶并将小节点指向ELB。 当我运行kubectl get节点时,只显示3或4个实例。看起来奴隶注册与主节点失败的几个节点,但所有节点是相同的。

它的随机行为,有时所有奴隶都表现得很好。

2 个答案:

答案 0 :(得分:2)

回答我自己的问题 -

我使用 PrivateIP 命名从属节点,并且在作业完成后我动态生成奴隶,将其附加到主服务器,计划容器并销毁从服务器 I从未从kube中删除这些节点。即:' kubectl删除节点名称'。

所有这些被破坏的从属节点都在“未准备好”中。名称为= PrivateIP的州。

现在,由于奴隶被销毁,PrivateIP将返回AWS IP池,新生成的实例现在可以使用这些IP。

现在,当我生成新的奴隶并尝试将其与master连接时,可能很少有奴隶获得与那些未准备好的奴隶相同的PrivateIP。国家(因为那些奴隶被摧毁,这些知识产权已经被释放)。

因此,Kubernetes过去只是将旧奴隶的状态改为“准备好”。因为我以编程方式等待新的奴隶出现,所以早些时候未被注意的状态。

注意:

销毁意味着终止AWS实例

删除从Kubernetes分离奴隶的意思,即。 kubectl delete node-name

答案 1 :(得分:1)

根据我自己使用AWS和Terraform的经验,这可能是竞争条件。

ELB通常需要比EC2实例更多的时间来做好准备,因此如果出于任何原因,在能够提供 之前kubelet启动,该节点将无法注册("主机未找到"或"错误500"取决于时间)

您可以通过两种方式缓解这一点:

  • 让您的kubelet服务/容器在失败时自动重启
  • 在EC2实例和ELB之间创建严格的依赖关系,并对ELB进行准备检查(HTTP调用就足够了)

我需要kubelet的日志来验证理论当然。