0

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

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

4

2 回答 2

2

回答我自己的问题-

我用它们的PrivateIP命名从节点,我动态生成从节点,将其附加到主节点,调度 pod,并在工作完成后销毁从节点,我从未从 kube 中删除这些节点。即:'kubectl 删除节点名'。

所有这些被破坏的从节点都处于 name=PrivateIP 的“未准备好”状态。

现在由于从服务器被销毁,PrivateIP 返回到 AWS IP 池,新生成的实例现在可以获取这些 IP。

现在,当我生成新的从站并尝试将其与主站连接时,可能很少有从站获得与处于“未就绪”状态的从站相同的 PrivateIP(因为这些从站已被销毁并且这些 IP 已被释放)。

因此,Kubernetes 过去只是将旧从属的状态更改为“就绪”状态,由于我正在以编程方式等待新的从属出现,因此之前没有注意到这一点。

注意:

销毁意味着终止 AWS 实例

删除意味着从 Kubernetes 中分离从属设备,即。kubectl 删除节点名

于 2016-05-22T06:00:32.270 回答
1

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

ELB 通常需要比 EC2 实例更多的时间来准备,因此如果由于任何原因 kubelet在 ELB 能够服务之前启动,节点将无法注册(“找不到主机”或“错误 500”,具体取决于时间)

您可以通过 2 种方式缓解这种情况:

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

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

于 2016-05-21T07:37:30.673 回答