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
今天我在 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