如何仅将 nginx 入口控制器部署到用户节点池

问题描述

我正在为 AKS 集群部署 Nginx 入口控制器,其中我有一个用户节点池和一个系统节点池。

helm install nginx-ingress ingress-Nginx/ingress-Nginx --namespace basic-ingress --set controller.replicaCount=2 --set controller.nodeselector."beta\.kubernetes\.io/os"=linux --set defaultBackend.nodeselector."beta\.kubernetes\.io/os"=linux --set controller.admissionWebhooks.patch.nodeselector."beta\.kubernetes\.io/os"=linux

由于副本数 = 2,当我检查 pod 状态时,我可以看到 1 个 pod 在系统节点池中运行,而 1 个在用户节点池中运行。

enter image description here

问题:

  1. 作为部署在用户节点池中的所有工作负载,我应该在哪里运行我的 Nginx 入口 Pod、系统池或用户池?

  2. 我能否在用户节点池中同时运行两个入口副本,如果是,如何运行?

  3. 如果我的入口在系统池中运行并且工作负载(.net 应用程序)在用户池中运行,是否有任何延迟?

解决方法

首先要看你为什么决定创建多个节点池,用户池中的VM是否有更多资源?是不是因为你想把系统节点池只保留给kubernetes相关的资源?无论如何,Ingress Controller 可以毫无问题地部署在系统池中。

话虽如此,如果您想运行用户节点池中的所有副本,您需要set a label on the node of your node pool,然后在 Nginx 部署上使用 Node Selector。如果您使用 Helm,则可以使用这些值来执行此操作。

将入口放在不同的节点池中不会真的有更多延迟,无论如何,您尝试访问的 pod 并不总是与入口控制器位于同一 VM 中,即使两者都在同一个节点池中。

>