由于新增了“优先级”字段,因此在Google Kubernetes Engine上显示“待定”

时间:2019-05-13 19:01:41

标签: kubernetes google-kubernetes-engine

我在GKE上有一个由Helm管理的Kubernetes集群,最近部署开始失败,因为Pod不会离开Pending状态。检查正在看到的未完成的Pod:

Events:
  Type     Reason            Age                From                                                Message
  ----     ------            ----               ----                                                -------
  Normal   Scheduled         50m                default-scheduler                                   Successfully assigned default/my-pod-6cbfb94cb-4pzl9 to gke-staging-pool-43f2e11c-nzjz
  Warning  FailedValidation  50m (x6 over 50m)  kubelet, gke-staging-pool-43f2e11c-nzjz  Error validating pod my-pod-6cbfb94cb-4pzl9_default(8e4dab93-75a7-11e9-80e1-42010a960181) from api, ignoring: spec.priority: Forbidden: Pod priority is disabled by feature-gate

特别是,此警告似乎与之相关:Error validating pod my-pod-6cbfb94cb-4pzl9_default(8e4dab93-75a7-11e9-80e1-42010a960181) from api, ignoring: spec.priority: Forbidden: Pod priority is disabled by feature-gate

将新的Pending吊舱与当前运行的吊舱进行比较,我看到的唯一区别(除了时间戳等)是:

$ kubectl get pod my-pod-6cbfb94cb-4pzl9 -o yaml > /tmp/pending-pod.yaml
$ kubectl get pod my-pod-7958cc964-64wsd -o yaml > /tmp/running-pod.yaml
$ diff /tmp/running-pod.yaml /tmp/pending-pod.yaml
…
@@ -58,7 +58,8 @@
       name: default-token-wnhwl
       readOnly: true
   dnsPolicy: ClusterFirst
-  nodeName: gke-staging-pool-43f2e11c-r4f9
+  nodeName: gke-staging-pool-43f2e11c-nzjz
+  priority: 0 // <-- notice that the `priority: 0` field is added
   restartPolicy: Always
   schedulerName: default-scheduler
…

这似乎是在2019年5月1日至2019年5月6日之间的某个时间开始发生的。

我在这里作为示例使用的群集是一个临时群集,但是我注意到两个配置相似的生产群集上的行为相同,这使我相信Google Kube方面已经发生了变化。

Helm通过cloudbuild.yaml部署了Pod,在5月1日至5月6日似乎引入了回归的情况下,该设置(Helm的版本或cloudbuild文件)没有任何改变。

头盔版本:

Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}

1 个答案:

答案 0 :(得分:2)

如果您看到Pod priority and Preemption的文档,则该功能在alpha中为<= 1.10(默认情况下已禁用,由功能门启用,GKE在控制平面上不执行此功能,afaik ),则它变成了beta中的>= 1.11(默认启用)。

可以是或组合:

  1. 您有一个GKE控制平面>= 1.11,并且您的Pod尝试启动的节点(由kube-scheduler调度)正在运行kubelet <= 1.10。有人可以升级控制平面而无需升级节点(或实例组)

  2. 有人将控制平面升级到1.11或更高版本,并且默认情况下启用了优先级允许控制器,这阻止了设置了spec.priority字段的Pod的启动(或重新启动)。如果您看到API docs(优先级字段),则表示启用优先级允许控制器后,您将无法设置该字段,而该字段只能由PriorityClass/PriorityClassName设置。

    < / li>