【问题标题】:Kube-Aws Kubernetes Controller taints and pod tolerationsKube-Aws Kubernetes 控制器污点和 pod 容忍度
【发布时间】:2017-08-17 03:41:15
【问题描述】:

我目前正在尝试使用 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 处于待处理状态:

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 正在运行而不是挂起(在用户数据中也看不到任何特殊内容)

谁能给我解释一下这是怎么回事?

谢谢

【问题讨论】:

    标签: kubernetes coreos kube-aws


    【解决方案1】:

    容忍和污点应该在已部署对象(例如调度程序、控制器等)的 yaml 中定义。我不希望它们出现在实例的 UserData 中。

    除了主节点之外,您的集群中是否还有其他节点?似乎其他插件(dns 等)将在集群中的节点上运行,而核心组件(调度程序等)设置为在主节点上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      相关资源
      最近更新 更多