群集 API 在 ReplicationControllerStatus.replicas 下返回的 Pod 的状态是什么



监视复制控制器时,它会返回ReplicationControllerStatus下的最新replicas计数。我在文档中找不到吊舱的状态,以便将其包含在其中。这足以安排吊舱吗?我注意到一个复制控制器报告pod处于其状态,即使pod仍处于挂起状态。

非常有趣的问题!为了回答这个问题,我认为我们需要走《星球大战》的路,使用来源:

  • ReplicationManager提供了一些有关期望的提示
  • 然后,还有controller_utils.go,还有一些其他指示
  • 然而,计算的核心似乎在updateReplicaCount中

更新:我的同事Stefan Schimanski刚刚向我指出,事实上答案有点复杂;关键是FilterActivePods:

func FilterActivePods(pods []api.Pod) []*api.Pod {
var result []*api.Pod
for i := range pods {
    if api.PodSucceeded != pods[i].Status.Phase &&
        api.PodFailed != pods[i].Status.Phase &&
        pods[i].DeletionTimestamp == nil {
        result = append(result, &pods[i])
    }
}
return result
}

这意味着最终条件是:尚未终止且未正常终止的pod

请注意,在Kubernetes的上下文中,"scheduled"的定义只是

pod.spec.nodeName != ""

特定节点上的Kubelet监视API服务器以查找具有匹配nodeName的pod,然后将在所述节点上启动该pod。

最新更新