我正在尝试为通过 helm chart 部署的 ingress-nginx 编写自动缩放配置。
我的目标是:
- 最少 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
如果每个节点只需要一个 nginx 实例,将其部署为DaemonSet不是更容易吗?
正如您在官方文档中所读到的:
在您的用例中,这似乎是正确的解决方案。
正如您在评论中正确建议的那样,nginx-ingress 官方 helm 图表既可以部署为 a 也可以部署
Deployment
为DaemonSet
. 可以通过调整其values.yaml
文件来完成。