AKS:由于 nodeSelector,Nginx ingress pod 卡在“Pending”状态

AKS: Nginx ingress pod stuck in `Pending` state due to nodeSelector

今天我在 Azure 云中部署了 AKS 服务并尝试在其上启动测试服务,但是遇到 Ingress pod 卡在 Pending 状态的错误,原因如下:

0/2 nodes are available: 2 node(s) didn't match node selector.

我已经检查了 Nginx 入口的 nodeSelector:

  nodeSelector:
    kubernetes.io/os: linux

为了解决这个问题,我从部署中删除了 nodeSelector,现在一切正常。

以下证据表明我在我的 Kubernetes 节点上使用了正确的 OS:

Ingress 版本为 0.26.1 - deployed using manifests from github

所以,很清楚如何解决这个问题,但是这里的根本原因是什么?是错误还是知识差距?

我使用的是 Kubernetes 版本 1.13.10。

从 Kubernetes 版本 1.16 开始,beta.kubernetes.io/os 已被弃用,现在实际是 kubernetes.io/os。因此,ingress 根据最新的 Kubernetes 版本使用参数。

要永久修复此问题,需要在低于 1.16 的 kubernetes 版本中使用 beta.kubernetes.io/os 参数。

Kuberentes 1.16 release notes.

我已将 patch 添加到我的管道中以解决问题:

kubectl patch deployment nginx-ingress-controller -p '{"spec":{"template":{"spec":{"nodeSelector":{"beta.kubernetes.io/os":"linux"}}}}}

我认为标记节点会是更好的解决方案:

kubectl label node --all kubernetes.io/os=linux