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

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

我正在嘗試為 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 圖表可以部署為 aDeploymentDaemonSet.可以辦到透過調整其values.yaml文件

相關內容