Nginx

確保每個 kubernetes 節點至少有一個 ingress-nginx

  • September 16, 2021

我正在嘗試為通過 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 也可以部署DeploymentDaemonSet. 可以通過調整其values.yaml文件來完成。

引用自:https://serverfault.com/questions/1077480