Nginx
確保每個 kubernetes 節點至少有一個 ingress-nginx
我正在嘗試為通過 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不是更容易嗎?
正如您在官方文件中所讀到的:
DaemonSet確保所有(或部分)節點執行 Pod 的副本*。*隨著節點被添加到集群中,Pod 也被添加到它們中。當從集群中刪除節點時,這些 Pod 會被垃圾回收。刪除 DaemonSet 將清理它創建的 Pod。
在您的案例中,這似乎是正確的解決方案。
正如您在評論中正確建議的那樣,nginx-ingress 官方 helm 圖表既可以部署為 a 也可以部署
Deployment
為DaemonSet
. 可以通過調整其values.yaml
文件來完成。