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
または として展開できますDaemonSet
。values.yaml
ファイルを調整することで。