我正在尝试为 ingress-nginx 编写一个自动缩放配置,通过 helm chart 部署。
我的目标是:
- 至少 3 个副本(因为我至少有 3 个节点)
- 确保每个节点只有一个 nginx,但是:
- 具有弹性,如果自动缩放表明我们需要 4 个 nginx,则允许集群中的一个节点有 2 个
- 如果添加了第四个节点,请确保生成一个新的 nginx
https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L326 https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L343 https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L256
我尝试使用下面的设置和它们的组合,但总是出现一些问题,例如现在我有第四个 nginx,它因为某种原因想要生成,但由于反亲和性规则而无法生成。
有人可以分享一些如何实现这一目标的想法吗?
- 每个节点始终有一个 nginx,如果创建了新节点,则会创建一个新的 nginx
- 保留自动扩展,如果 hpa 想要在 3 节点集群上生成第四个 nginx,它应该可以自由地这样做
replicaCount: 3
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/instance
operator: In
values:
- ingress-nginx
- key: app.kubernetes.io/component
operator: In
values:
- controller
topologyKey: "kubernetes.io/hostname"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/instance: ingress-nginx
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 6
targetCPUUtilizationPercentage: 75
targetMemoryUtilizationPercentage: 100
答案1
如果每个节点只需要一个 nginx 实例,那么将其部署为DaemonSet?
正如您在官方文档中看到的:
ADaemonSet确保所有(或部分)节点都运行 Pod 的副本。随着节点添加到集群,Pod 也会添加到其中。随着节点从集群中移除,这些 Pod 会被垃圾回收。删除 DaemonSet 将清理其创建的 Pod。
这似乎正是您用例中的正确解决方案。
正如你在评论中正确指出的那样,nginx-ingress 官方helm chart可以部署为Deployment
或DaemonSet
。可以做到通过调整其values.yaml
文件。