ポッドをクラスター全体に広げる
現在、AWSの自動スケーリングポリシーを使用して、毎日一定の時間にEKSワーカーノード(最小+望ましい10、最大15)を開始しています。120のポッドと30の展開があります。
明らかに、最初に起動するノードは1つだけです。次に、2番目のノード。その後、最後のノードが起動します。そのため、Kubernetesは最初のノードにすべてのポッドを追加します。ポッドがシナリオで均等に分散されるようにする方法はありますか?
回答
Deschedulerを見てください。このプロジェクトは、クラスターが不均衡であると判断したときにポッドを強制終了することを目的としたKubernetesジョブとして実行されます。
LowNodeUtilization戦略は、あなたのケースに合わせているようです。
この戦略は、十分に活用されていないノードを見つけ、可能であれば、他のノードからポッドを排除し、排除されたポッドの再作成がこれらの十分に活用されていないノードでスケジュールされることを期待します。
もう1つのオプションは、カオスエンジニアリングを手動で適用し、展開にローリングアップデートを強制することです。うまくいけば、ポッドが再作成されたときにスケジューラーがバランスの問題を修正します。
を使用できますkubectl rollout restart my-deployment
。kubectl delete pod
ロールアウトにより「リバランス」中の可用性が確保されるため、単にポッドを削除するよりもはるかに優れています(ただし、ポッドを完全に削除すると、リバランスが向上する可能性が高くなります)。
どのポッドがどのノードに移動するかを制御できるため、アフィニティとアンチアフィニティを調べる必要があります。アンチアフィニティを使用すると、ノード上の各デプロイメントのポッドが1つだけになるようにすることができます。これは少しやり過ぎであり、IIRCでは制限付きでノード上に複数のポッドを持つことができますが、正確には機能しません。
https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/