首页 文章

Kubernetes没有在其他节点上调度失败的pod

提问于
浏览
1

我有4个节点kubernetes集群 . 我的应用程序运行2个副本实例 . 我正在使用具有副本集的部署资源 . 根据文档,副本集始终确保指定的否 . 应用程序实例将运行 . 如果我删除了一个pod实例,那么它将在相同或不同的节点上重新启动 . 但是当我通过在一个节点上停止docker引擎来模拟pod实例的失败时 . Kubectl将状态显示为pod实例的错误,但不在另一个节点上重新启动pod . 这是预期的行为还是我错过了什么 .

2 回答

  • 3

    AFAIS Kubernetes用1.5版改变了这种行为 . 如果我正确地解释docs,失败节点的Pod仍然在apiserver中注册,因为它突然死亡并且没有替换它 .

    原因是,Kubernetes无法判断它是网络错误(例如裂脑)还是节点故障 . 随着StatefulSets的推出,Kubernetes需要确保没有Pod多次启动 .

    这可能听起来像一个错误,但如果你有一个正确配置的 Cloud 提供商(例如GCE或AWS),Kubernetes可以看到该节点是否仍在运行 . 当您关闭该节点时,控制器应取消注册Node及其Pod,然后在另一个节点上创建一个新的Pod . 与节点运行状况检查和节点替换一起,群集能够自我修复 .

    Cloud 提供程序的配置方式在很大程度上取决于您的Kubernetes设置 .

  • 1

    只需等待大约5分钟即可关闭节点或泊坞窗 . Kubernetes将在该节点上运行的所有pod的状态标记为“Unknown”,并将其显示在剩余的活动符合条件的节点上 . 一旦故障节点重新启动,如果K8S已在其他节点上替换它们,则该节点上的pod将被删除 .

相关问题