我在AWS中有一个kubernetes主设置,由ELB平衡。我使用terraform创建了5-6个实例,并将其设置为kube slaves并将kubelets指向ELB。当我运行kubectl get node时,只显示了3或4个实例。看起来从节点注册到主节点失败了,但所有节点都是相同的。
它的随机行为,有时所有的奴隶都表现得很好。
发布于 2016-05-22 14:00:32
回答我自己的问题-
我使用它们的PrivateIP命名从节点,并动态地产生从节点,将其附加到主节点,调度pod,并在作业完成后销毁从节点我从未从kube中删除这些节点。即:'kubectl delete node-name‘。
所有这些被销毁的从节点在name=PrivateIP中都处于“未就绪”状态。
现在,由于slaves被销毁,PrivateIP被返回到AWS池,新产生的实例现在可以获取这些IP。
现在,当我生成新的从属程序并尝试将其与主机连接时,可能很少有从属程序会获得与处于“未就绪”状态的从属程序相同的PrivateIP (因为这些从属程序已被销毁,而这些IP已被释放)。
因此Kubernetes习惯于将旧slave的状态更改为“Ready”状态,因为我在编程上等待新slave的出现,所以之前没有注意到。
注意:
销毁意味着终止AWS实例
Delete表示将slave从Kubernetes ie分离。kubectl delete node-name
发布于 2016-05-21 15:37:31
从我自己使用AWS和Terraform的经验来看,这可能是一种竞争条件。
ELB通常需要比EC2实例更多的时间来准备就绪,因此如果由于任何原因,kubelet在ELB能够提供服务之前启动了,节点将无法注册(“未找到主机”或“错误500”,具体取决于时间)
你可以通过两种方式来缓解这个问题:
进行就绪检查
当然,我需要来自kubelet的日志来验证这个理论。
https://stackoverflow.com/questions/37327917
复制相似问题