如何确保入口控制器 Pod 在包含其后端服务的 Pod 的每个节点上运行?



我已经设置了ingress nginx-Hem图表来在集群上设置ingress控制器,但默认情况下它只运行一个pod实例。

由于我们在Digital Ocean的k8s集群上运行,我们使用externalTrafficPolicy: Local运行,以允许证书管理器在内部访问其他pod,因此我们的请求网络跳数更少。

为了提高弹性,我们已将后端服务配置为至少在2个节点上运行,因此,我们在每个节点上都有入口控制器,这些控制器上运行有一个后端pod,以避免不必要的节点间流量。

我们将如何配置入口控制器设置,以确保在后端pod运行的每个节点上都有一个控制器pod?

如果要在每个节点上运行POD,可以使用守护程序集

精灵套装:https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/helm-chart/templates/controller-daemonset.yaml

现在,如果你想确保Nginx入口控制器POD只在运行后端服务的节点上运行,你可以使用亲和性和反亲和性。

亲和性示例:

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: role
operator: In
values:
- app-1
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: component
operator: In
values:
- nginx-ms
topologyKey: "kubernetes.io/1-hostname"

您可以在以下位置阅读更多内容并找到示例:https://github.com/infracloudio/kubernetes-scheduling-examples/blob/master/podAffinity/README.md

相关内容

  • 没有找到相关文章

最新更新