Kubernetesノードごとに少なくとも1つのingress-nginxを確保する

Kubernetesノードごとに少なくとも1つのingress-nginxを確保する

Helm Chart 経由でデプロイされた ingress-nginx の自動スケーリング構成を作成しようとしています。

私の目標は次のとおりです。

  • 最低 3 つのレプリカ (最低 3 つのノードがあるため)
  • ノードごとに nginx を 1 つだけ確保しますが、次の点に注意してください。
  • 弾力性を持たせるには、オートスケールで4つのnginxが必要と表示されたら、クラスタ内のノードに2つのnginxを持たせる
  • 4番目のノードが追加された場合、新しい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

以下の設定とそれらの組み合わせを試してみましたが、常に何かがおかしくなっています。たとえば、現在、何らかの理由で生成したい 4 番目の nginx がありますが、アンチアフィニティ ルールのために生成できません。

それを実現する方法についてのアイデアを誰か共有してもらえませんか?

  • ノードごとに常に1つのnginxがあり、新しいノードが作成されると、新しいnginxが作成されます。
  • 自動スケーリングを維持し、HPA が 3 ノード クラスタで 4 番目の 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

ノードごとに1つのnginxインスタンスだけが必要な場合は、次のように展開する方が簡単ではないでしょうか。デーモンセット?

公式ドキュメントには次のように書かれています:

デーモンセットすべての (または一部の) ノードがポッドのコピーを実行するようにします。ノードがクラスターに追加されると、ポッドがノードに追加されます。ノードがクラスターから削除されると、それらのポッドはガベージ コレクションされます。DaemonSet を削除すると、作成されたポッドがクリーンアップされます。

そして、これはあなたのユースケースに適したソリューションのようです。

あなたのコメントで正しく示唆されているように、nginx-ingress 公式ヘルムチャートDeploymentまたは として展開できますDaemonSetvalues.yamlファイルを調整することで

関連情報