Kubernetes の新機能。kubectl scale --replicas=N を使用して、異なるノードで Pod を開始できますか?
2 に答える
デフォルトでは、スケジューラーは Pod をノード全体に分散しようとするため、同じノードに同じタイプの Pod が複数存在することはありません。したがって、ベストエフォート型ポッドの拡散を目的としているだけであれば、特別なことは何も必要ありません。
そのタイプの Pod が既にあるノードで Pod を実行してはならないという要件を表現したい場合は、現在アルファ機能であるPod anti-affinityを使用できます。
すべてのノード (または特定のセレクターに一致するすべてのノード) にそのポッドがあることを確認したい場合は、DaemonSetを使用できます。
デプロイメント (または RC) のスケーリングは、コントローラーマネージャーにさらにポッドを作成するように指示し、新しいポッドはスケジューリングの対象になります。K8S スケジューラーは、ポッドをスケジュールする最も妥当な配置を見つけようとします。これは、Pod が異なるノードで起動することを保証するものではありませんが、必要なリソースがあれば、かなり可能性の高いシナリオになります。残念ながら、すべての Pod が 1 つのノードに収まる場合、スケジューラが実際にそれを実行する可能性があることも意味します (つまり、他のすべてのノードが何らかの理由でスケジュール不可能な状態になっている)。その場合、条件が変わってもポッドは再スケジュールされません。
ポッドが同じノードに配置されないことを確実に保証するには、次の 2 つのオプションがあります。
- レガシー ハック : ポッド テンプレートで hostPort を定義します。特定のホスト ポートは、ノードごとに 1 回だけ割り当てることができるリソースであるため、ポッドはノードごとに 2 回以上存在することはありません。
- アルファ機能 : Pod AntiAffinity を調べることができます。かなり早い段階で、実際にはまだ実証されていません。
最初のものには欠点があります。ノードごとにこのタイプのポッドを複数持つことはできません。ローリング展開に影響を与え、スケーリングの容量を制限します (ノードの数よりも多くのアクティブなポッドを持つことはできません)