我在 AWS 中有一个 kubernetes 主设置,由 ELB 平衡。我使用 terraform 创建了 5-6 个实例,并将其配置为 kube 从站并将 kubelet 指向 ELB。当我运行 kubectl get nodes 时,只显示 3 或 4 个实例。看起来从主节点注册失败的节点很少,但所有节点都是相同的。
它的随机行为,有时所有的奴隶都表现得很好。
我在 AWS 中有一个 kubernetes 主设置,由 ELB 平衡。我使用 terraform 创建了 5-6 个实例,并将其配置为 kube 从站并将 kubelet 指向 ELB。当我运行 kubectl get nodes 时,只显示 3 或 4 个实例。看起来从主节点注册失败的节点很少,但所有节点都是相同的。
它的随机行为,有时所有的奴隶都表现得很好。
回答我自己的问题-
我用它们的PrivateIP命名从节点,我动态生成从节点,将其附加到主节点,调度 pod,并在工作完成后销毁从节点,但我从未从 kube 中删除这些节点。即:'kubectl 删除节点名'。
所有这些被破坏的从节点都处于 name=PrivateIP 的“未准备好”状态。
现在由于从服务器被销毁,PrivateIP 返回到 AWS IP 池,新生成的实例现在可以获取这些 IP。
现在,当我生成新的从站并尝试将其与主站连接时,可能很少有从站获得与处于“未就绪”状态的从站相同的 PrivateIP(因为这些从站已被销毁并且这些 IP 已被释放)。
因此,Kubernetes 过去只是将旧从属的状态更改为“就绪”状态,由于我正在以编程方式等待新的从属出现,因此之前没有注意到这一点。
注意:
销毁意味着终止 AWS 实例
删除意味着从 Kubernetes 中分离从属设备,即。kubectl 删除节点名
根据我自己使用 AWS 和 Terraform 的经验,这可能是一种竞争条件。
ELB 通常需要比 EC2 实例更多的时间来准备,因此如果由于任何原因 kubelet在 ELB 能够服务之前启动,节点将无法注册(“找不到主机”或“错误 500”,具体取决于时间)
您可以通过 2 种方式缓解这种情况:
当然,我需要来自的日志kubelet
来验证该理论。