我正在嘗試為 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 實例,那麼就部署為守護程式集?
正如您可以在官方文件中閱讀到的:
A守護程式集確保所有(或部分)節點運行 Pod 的副本。當節點新增到叢集時,Pod 也會加入其中。當節點從叢集中刪除時,這些 Pod 就會被垃圾回收。刪除 DaemonSet 將清理它所建立的 Pod。
在您的用例中,這似乎是正確的解決方案。
正如您在評論中正確建議的那樣,nginx-ingress 官方 helm 圖表可以部署為 aDeployment
或DaemonSet
.可以辦到透過調整其values.yaml
文件。