我目前正在尝试使用 kube-aws 0-9-6 (1.6.2) 了解控制器上如何以及为什么不安排 pod 在安装干净的堆栈后,查询 kube-system 命名空间我看到以下内容:
kubectl --kubeconfig=kubeconfig --namespace kube-system get pod NAME READY STATUS RESTARTS AGE heapster-v1.3.0-690018220-tvr45 0/2 Pending 0 1h kube-apiserver-ip-10-0-0-17.eu-west-1.compute.internal 1/1 Running 0 3h kube-controller-manager-ip-10-0-0-17.eu-west-1.compute.internal 1/1 Running 0 3h kube-dns-1455470676-tlrlf 0/3 Pending 0 3h kube-dns-autoscaler-1106974149-xvdw5 0/1 Pending 0 1h kube-proxy-ip-10-0-0-17.eu-west-1.compute.internal 1/1 Running 0 3h kube-scheduler-ip-10-0-0-17.eu-west-1.compute.internal 1/1 Running 0 1h kubernetes-dashboard-v1.5.1-50n8s 1/1 Running 0 7s
现在我们看到一些 Pod 正在运行,而一些 Pod 处于挂起状态。由于以下原因,待处理的 pod 处于待处理状态:
No nodes are available that match all of the following predicates:: PodToleratesNodeTaints (1).
首先查看节点,我看到以下内容:
Taints: node.alpha.kubernetes.io/role=master:NoSchedule
很好,控制器节点是不可调度的,现在,我想看看为什么 pod 被调度,为什么其他的不被调度。首先看一下我们看到的 kube-apiserver 部署:
tolerations: - effect: NoExecute operator: Exists
首先这不会出现在控制器用户数据中,我想知道它来自哪里,但即使它在那里,这种容忍度满足 NoSchedule 的污点也没有意义
然后,如果我们查看其他处于挂起状态的 pod,我们可以看到以下内容:
tolerations: - key: CriticalAddonsOnly operator: Exists
这很清楚为什么它们不能被调度并且它们处于挂起状态。它不满足污点。
从现在开始,无论我做什么(除了满足 NoSchedule)。没有什么变化。
将 NoExecute 效果添加到任何挂起的节点不会使它们出现,这是正确的,因为它们不满足任何要求。
我找不到任何理由证明 api-server、controller-manager、proxy 和 scheduler 正在运行而不是挂起(在用户数据中也看不到任何特殊内容)
谁能向我解释发生了什么事?
谢谢