K8Sスケジューリング

展開のスケジューリング

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種類があります

  1. requiredDuringSchedulingIgnoredDuringExecution:ハードリミットに対応し、(どこNodeSelector同様の機能が、構文)ノードへのポッドをスケジュールすることができ、指定のルールを満たす必要があります。
  2. 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.2442.12    ノード2 <なし> <なし>

ルールのNodeAffinityセットに注意してください。

  1. 両方がnodeSelectorとnodeAffinityを定義している場合は、両方の条件が満たされている必要があり、ポッドは、最終的には指定されたノードに実行することができます
  2. nodeAffinityがnodeSelectorTerms以上を策定している場合、1は、スケジューリングの成功を一致させることができることができ
  3. 複数のMatchExpressionsがnodeSelectorTermsである場合、そのノードは、ポッドを実行するために、すべてのMatchExpressionsを満たす必要があります

 

おすすめ

転載: www.cnblogs.com/fengzi7314/p/12466738.html