展開のスケジューリング
RCコントローラ展開またはそれらのスケジューリング・ルールがシステムによって自動的にスケジュールされ、それぞれの最終的な実行がその上に完全スケジューラマスターノードによって算出アルゴリズム一連のノード、ユーザがスケジューリングプロセスと結果を介入することができません、ここでのデモではありません!!
NodeSelectorオリエンテーションスケジュール
実際の生産環境では、我々は、我々はそうポッドは、特定のノードNODE2、以下の手順で実行することを、オリエンテーションスケジュールする必要があり、特定のノードの下のポッドで実行する必要があることも可能です。
最初のステップは、ノードNODE2ラベルに報酬
[ルートマスター@〜]#のkubectlはノードNODE2アプリ=リリースはラベル
ラベルを表示することができkubectl GETノード--show-ラベル
第二には、ポッドラベルアプリで3回の実行をできるようにセレクタを定義し、pod.yamlファイルを定義:ノードのリリースに
[ルートマスター@〜]#vimのdeploy.yaml apiVersion:アプリケーション / v1の 種類:展開 メタデータ: 名前:myappという 名前空間:デフォルト 仕様: レプリカ:3 セレクタ: matchLabels: アプリ:リリース テンプレート: メタデータ: 名前:mypod 名前空間:デフォルト のラベル: アプリ:リリース スペック: nodeSelector: アプリ:リリース コンテナ: - 名前:mycontainerの 画像:liwang7314 / myappに:V1 imagePullPolicy:IfNotPresent ポート: -名前:HTTP containerPort:80
第三段階は、ポッドと観測されたノードを実行したポッドの実行可能ファイルを作成することで、我々はすべての3つのポッドは、ノードノード2で実行されていることがわかりました
[ルート@マスター〜]#作成kubectl - F deploy.yaml deployment.apps / myappの作成 [ルート@マスター〜]#kubectl GETポッド- 広いO NAME READYのステータスが再起動AGE IP NODEノミネートNODE準備GATESの myappの -95ff9459c-8g6tc 1 / 1 実行 0 4S 10.244を。2.8 NODE2 <なし> <なし> のMyApp -95ff9459c-ghxxx 1 / 1 の実行 0 4S 10.244を。2.7 ノード2 <なし> <なし> myappの -95ff9459c-s5pt9 1 / 1が 実行 0 4S 10.244を。2.6 ノード2 <なし> <なし>
NodeAffinity:ノード・アフィニティ・スケジューリング
NodeAffinityは、ノードのアフィニティ・スケジューリング・ポリシーが全体の手紙NodeSelectorスケジューリング戦略を置き換えるために使用されることを意味、表現親和ノードの2種類があります
- requiredDuringSchedulingIgnoredDuringExecution:ハードリミットに対応し、(どこNodeSelector同様の機能が、構文)ノードへのポッドをスケジュールすることができ、指定のルールを満たす必要があります。
- preferredDuringSchedulingIgnoredDuringExecution:満たすために強調優先度は、実行順序を定義するために、ソフトリミットに相当する基準、ポッドノードをスケジュールするが、強制しないスケジューラの試みを、指定された、優先ルールの複数も重み(重み)値を提供することができます
私たちは、その後、定義によって、次のようにポッドpreferredDuringSchedulingIgnoredDuringExecutionは、ノード2のノードに予定させて、node2のrequiredDuringSchedulingIgnoredDuringExecutionの定義を許可するには、3つのポッド、ポッドスケジュールを定義するaffinity.yamlファイルを、定義します。
最初のステップ、ファイル定義YAML
[ルートマスター@〜]#の猫affinity.yaml apiVersion:アプリケーション / v1の 種類:展開 メタデータ: 名前:myappという 名前空間:デフォルト 仕様: レプリカ:3 セレクタ: matchLabels: アプリ:リリース テンプレート: メタデータ: 名前:mypod 名前空間:デフォルト のラベル: アプリ:リリース 仕様:親和性: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: -のMatchExpressions: -キー:アプリ 演算子:で 値: -リリース preferredDuringSchedulingIgnoredDuringExecution: -重量:1 嗜好: のMatchExpressions: -キー:アプリ オペレーター:NotIn 値: - リリース コンテナ: - 名前:mycontainerの 画像:liwang7314 / myappの:V1 imagePullPolicy:IfNotPresent ポート: - 名:HTTP containerPort:80
次に、ポッドを作成し、ポッドは、すべてのノード2に、スケジュール上で見つけることができるノードを観察します
[ルート@マスター〜]#kubectl GETポッド- 広いO NAME READY STATUSに再起動AGE IP NODEノミネートNODE準備GATESの myappの -6fcfb98879-566z5 1 / 1 実行 0 3m24s 10.244を。2.10 NODE2 <なし> <なし> のMyApp -6fcfb98879-5r6cm 1 / 1 の実行 0 3m24s 10.244を。2.11 ノード2 <なし> <なし> myappの -6fcfb98879-7kwwq 1 / 1 ランニング 0 3m24s 10.244を。2.9 ノード2 <なし> <なし>
我々requiredDuringSchedulingIgnoredDuringExecutionを削除した場合は、ビューがすでにノード1に予定しています、ノード2しかし、可能な限り必要ありませんので、以下の結果として、理由preferredDuringSchedulingIgnoredDuringExecutionフィールドポッドがあるでしょう
[ルート@マスター〜]#kubectl GETポッド- 広いO NAME READY STATUSに再起動AGE IP NODEノミネートNODE準備GATESの myappの -55679db465-h5ftb 1 / 1 実行 0 11S 10.244を。1.76 ノード1 <なし> <なし> のMyApp -55679db465-kj58w 1 / 1 の実行 0 11S 10.244を。1.75 ノード1 <なし> <なし> のMyApp -55679db465-mwfjq 1 / 1 の実行 0を 11S 10.244。2.12 ノード2 <なし> <なし>
ルールのNodeAffinityセットに注意してください。
- 両方がnodeSelectorとnodeAffinityを定義している場合は、両方の条件が満たされている必要があり、ポッドは、最終的には指定されたノードに実行することができます
- nodeAffinityがnodeSelectorTerms以上を策定している場合、1は、スケジューリングの成功を一致させることができることができ
- 複数のMatchExpressionsがnodeSelectorTermsである場合、そのノードは、ポッドを実行するために、すべてのMatchExpressionsを満たす必要があります