【问题标题】:Nginx Ingress Controller can't find nodes on Google Kubernetes EngineNginx Ingress Controller 在 Google Kubernetes Engine 上找不到节点
【发布时间】:2019-11-04 09:59:11
【问题描述】:

我在 GKE 集群上安装了“nginx 入口控制器”。 我跟着this guide在GKE中安装了nginx入口控制器。

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

事件告诉我:

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

现在我检查了 yaml/describe:https://pastebin.com/QG3GKxh1 并发现:

nodeSelector:
    kubernetes.io/os: linux

在我看来这看起来不错。由于我只是使用指南的命令安装控制器,我不知道我这边出了什么问题。

解决办法:

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress


    【解决方案1】:

    nodeSelector 用于限制可以调度 Pod 的节点。

    与:

    nodeSelector:
        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)
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2019-02-24
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多