ReplicationControllerStatus.replicas 下的集群 API 返回的 pods 的状态是什么
What's the status of pods returned by the cluster API under ReplicationControllerStatus.replicas
在观察复制控制器时,它 returns 最近 replicas
计数在 ReplicationControllerStatus
之下。我无法在文档中的任何地方找到 pod 的状态需要是什么,以便将它包含在那里。是否足以让 pod 被调度?我注意到一个复制控制器报告 pods 的状态,即使 pods 仍在等待中。
非常有趣的问题!要回答这个问题,我相信我们需要走星球大战之路 Use The Source:
- 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
}
这意味着最终条件是:pods尚未终止且未处于正常终止状态。
注意 'scheduled' 在 Kubernetes 上下文中的定义就是
pod.spec.nodeName != ""
特定节点上的 Kubelet 监视 API 服务器以寻找具有匹配 nodeName
的 pods,然后将在所述节点上启动 pod。
在观察复制控制器时,它 returns 最近 replicas
计数在 ReplicationControllerStatus
之下。我无法在文档中的任何地方找到 pod 的状态需要是什么,以便将它包含在那里。是否足以让 pod 被调度?我注意到一个复制控制器报告 pods 的状态,即使 pods 仍在等待中。
非常有趣的问题!要回答这个问题,我相信我们需要走星球大战之路 Use The Source:
- 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
}
这意味着最终条件是:pods尚未终止且未处于正常终止状态。
注意 'scheduled' 在 Kubernetes 上下文中的定义就是
pod.spec.nodeName != ""
特定节点上的 Kubelet 监视 API 服务器以寻找具有匹配 nodeName
的 pods,然后将在所述节点上启动 pod。