Nginx入口控制器在Google Kubernetes引擎上找不到节点

Nginx入口控制器在Google Kubernetes引擎上找不到节点,kubernetes,google-kubernetes-engine,kubernetes-ingress,nginx-ingress,Kubernetes,Google Kubernetes Engine,Kubernetes Ingress,Nginx Ingress,我在GKE集群上安装了nginx入口控制器。 我随后在GKE中安装了nginx入口控制器 在为服务和入口资源部署资源时,我意识到入口控制器处于0/1 事件告诉我: 0/1 nodes are available: 1 node(s) didn't match node selector. 现在我检查了yaml/描述: 并发现: nodeSelector: kubernetes.io/os: linux 在我看来这很好。因为我只是使用向导的命令来安装控制器,所以我不知道我这边出了什么

我在GKE集群上安装了nginx入口控制器。 我随后在GKE中安装了nginx入口控制器

在为服务和入口资源部署资源时,我意识到入口控制器处于0/1

事件告诉我:

0/1 nodes are available: 1 node(s) didn't match node selector.
现在我检查了yaml/描述: 并发现:

nodeSelector:
    kubernetes.io/os: linux
在我看来这很好。因为我只是使用向导的命令来安装控制器,所以我不知道我这边出了什么问题

解决方案: 提供的答案为我指明了方向。我的节点被标记为beta.kubernetes/io:linux,而控制器正在寻找kubernetes/io:linux。 重命名控制器中的nodeSelector有效。

nodeSelector用于约束可以调度POD的节点

与:

您的意思是必须将吊舱分配给具有标签的节点 kubernetes.io/os:linux。如果没有一个节点具有该标签,Pod将永远不会被调度

从nginx ingress controller中删除选择器或将标签kubernetes.io/os:linux添加到任何节点都可以解决您的问题。

节点选择器用于约束可以调度POD的节点

与:

您的意思是必须将吊舱分配给具有标签的节点 kubernetes.io/os:linux。如果没有一个节点具有该标签,Pod将永远不会被调度


从nginx入口控制器中删除选择器或将标签kubernetes.io/os:linux添加到任何节点都可以解决您的问题。

我在我的节点yaml中看到它有以下标签:beta.kubernetes.io/os:linux。所以我只需要更改控制器中的标签,对吗?是的,您可以修改yaml定义,以便beta.kubernetes.io/os:linux是节点选择器的值,或者如果不需要对节点进行任何约束,您可以完全删除节点选择器。如果您希望将标签附加到节点而不是修改Pod规范,您可以像这样将标签附加到节点:kubectl label nodes[node_NAME]kubernetes.io/os=linux,您可以仔细检查标签是否已附加:kubectl get nodes-show labels我在我的节点yaml中看到它具有以下标签:beta.kubernetes.io/os:linux。所以我只需要更改控制器中的标签,对吗?是的,您可以修改yaml定义,以便beta.kubernetes.io/os:linux是节点选择器的值,或者如果不需要对节点进行任何约束,您可以完全删除节点选择器。如果您希望将标签附加到节点而不是修改Pod规范,您可以像这样将标签附加到节点:kubectl label nodes[node_NAME]kubernetes.io/os=linux,您可以仔细检查标签是否已附加:kubectl get nodes-show labels
nodeSelector:
    kubernetes.io/os: linux