首页 > 解决方案 > 如何仅将 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 状态时,我可以看到一个 pod 正在系统节点池中运行,而 1 正在用户节点池中运行。

在此处输入图像描述

问题:

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

  2. 我可以在用户节点池中运行两个入口副本吗,如果是,如何?

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

标签: azureazure-aksnginx-ingress

解决方案


这取决于您为什么决定首先创建多个节点池,用户池中的虚拟机是否拥有更多资源?是不是因为你想只为与 Kubernetes 相关的资源保留系统节点池?无论如何,Ingress Controller 可以毫无问题地部署在系统池中。

话虽如此,如果要运行用户节点池中的所有副本,则需要在节点池的节点上设置标签,然后在 Nginx 部署中使用节点选择器。如果您使用的是 Helm,则可以使用这些值来执行此操作。

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


推荐阅读