スケジューラ

スケジューラのスケジューリングプロセス:

述語 - >優先順位 - >を選択

 好ましくは、予め選択

 

スケジュール:

1、ノードスケジューリングノード親和性の傾向

2、ポッド親和ポッドポッド親和スケジュール親和性は、トランススケジュール

図3に示すように、スポット及び染み耐性スケジューリングは汚染さ(染色)、tolerations(公差)

 

出典ます。https://github.com/kubernetes/kubernetes/tree/master/pkg/scheduler/algorithm

予備選挙システムは、一般的にデフォルトを使用しました:

拒否権の道

ノードの状態を確認してください

GeneralPredicates:

オブジェクトは、ホスト名ポッドに定義されているかどうかホスト名のpod.spec.hostnameチェック

PodFitsHostPorts:pods.spec.containers.ports.hostPort

MatchNodeSelector:pods.spec.nodeSelector

podFitsRescources:リソース要件ノードはノードにノード1を説明するkubectl成立しているかどうかをポッドチェック

 

NoDiskConflictポッド依存ストレージ・ボリュームがニーズを満たすかどうかをチェックし、デフォルトでは有効になっていません

PodToleratesNodeTaints:ポッドspec.tolerations許容シミ汚れを確認し、完全ノードに含まれています、

PodToleratesNodeNoExecuteTaints:スポットチェックポッド公差を実行することはできませんが、デフォルトでは有効になっていません

CheckNodeLabelPresence:ノードラベルのスケジュールで有効になっていないチェックノードのラベルのデフォルトの有無を指定する、すなわち

CheckServiceAffinity:可能な限り同じノード上のポッドに置かれる同じサービスはデフォルトで有効になっていません

 

MaxEBSVolumeCount:クラウドストレージはアマゾン弾性に格納されているノードに対応する番号をマウント

MaxGCEPDVolumeCount:Googleのクラウドストレージ

MaxAzureDiskVolumeCount:マイクロソフトのクラウドストレージ

 

PVCは、チェックノードの数に結合:CheckVolumeBinding

NoVolumeZoneConflict:検査領域の残りの株式のストレージボリューム

 

CheckNodeMemoryPressure:チェックノードメモリリソースは、圧力が存在します

CheckNodePIDPressure:検査プロセスの数が多すぎます

CheckNodeDiskPressure:ハードディスクストレージの圧力を確認してくださいは大きすぎます

 

MatchInterPodAffinity:ノードの親和性を確認します

 

デフォルトの関数は、好ましくは(スケジューリングノード)

すべての優先度関数は、各好ましい機能によれば、合計スコアを有効になっている、すなわち、最も高い合計スコアベスト

LeastRequested:リソースの残量の割合が高く、より高い優先度=(CPU(容量和(要求))* 10 /容量+メモリ(容量和(要求))* 10 /容量)/ 2スコア

balanced_resource_allocation:CPUとメモリ使用量がより高い得点に似ています

node_prefer_avoid_pods:注釈情報ノード「scheduler.alpha.kubernetes.io/preferAvoidPodsは、」詳細を一致させるより高いスコア

taint_toleration:リスト項目ノードとリスト項目が一致するポッド検査対象は汚染spec.tolerations、より一致するエントリ、優先低いです

selector_spreading:現在のポッドポッドを持つノードは、より低いラベルに属し

interpod_affinity:複数のエントリの親和性を満たすために、親和性のポッドを横断する、より高いスコア

node_affinity:親和性マッチングnodeselectorノードをノードPOD、マッチのより数、より高いスコアをチェック

 

アイドルの少ない量は、スコアがデフォルトで有効になっていません高いmost_requested

node_label:スコアを判断するノードラベルによると、デフォルトで有効になっていません

image_locality:ノードポッド上の出会いは、デフォルトでは有効になっていません高いハイスコアの合計量を反映しています

 

高度なスケジューリングデフォルトのメカニズム

ノード選択:nodeSelectorのnodeName

ノードの親和スケジュール:nodeAffinity

 

nodeSelector強い制約

pods.spec.nodeSelectorを説明kubectl

 

mkdirスケジュール

CP ../pod-sa-demo.yaml ./

vimのサブdemo.yaml

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッドデモ

  名前空間:デフォルト

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

    ポート:

    - 名前:myappに

      containerPort:80

  nodeSelector:

disktype:SSD

 

-fポッドdemo.yamlを適用kubectl

kubectlラベルノードnode01 disktype = SSD

ノード--show-ラベルを取得kubectl

新しく作成されたポッドポッドは、タグのノードをプレイする上で実行されます取得kubectl

 

親和性

pods.spec.affinityを説明kubectl

pods.spec.affinity.nodeAffinityを説明kubectl

preferredDuringSchedulingIgnoredDuringExecution <[]オブジェクト>ソフト親和性は大丈夫満たさない満足してみてください

requiredDuringSchedulingIgnoredDuringExecution <オブジェクト>ハード親和性を満たさなければならないが、そのノードで実行されます

 

CP-demo.yamlポッドポッド・ノード親和性demo.yaml

vimのポッド・ノード親和性demo.yaml

 

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッドノード親和性-デモ

  名前空間:デフォルト

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

    ポート:

    - 名前:myappに

      containerPort:80

  親和性:親和好ましく

    nodeAffinity:ノードのアフィニティ

      requiredDuringSchedulingIgnoredDuringExecution:ハード親和性、親和性を満たす必要があります。

        nodeSelectorTerms:ノードラベルグループ

        - のMatchExpressions:一致する表現

         - キー:ゾーン - キー

          オペレータ:àoperatorで

          値:値

          - fooの値1

          - バー値2

 

-fポッドnodeaffinity-demo.yamlを適用kubectl

 

vimのポッド・ノード親和性のデモ2.yaml

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッドノード親和性-デモ-2

  名前空間:デフォルト

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

    ポート:

    - 名前:myappに

      containerPort:80

  親和性:

    nodeAffinity:

      preferredDuringSchedulingIgnoredDuringExecution:以下の親和性の優先順位を持って、そうでない場合は、実行することができます

      - 好み:

         MatchExpressions:

         - キー:ゾーン

          オペレーター:中

          値:

          - FOO

          - バー

       重量:60

 

-fポッドnodeaffinity-デモ2.yamlを適用kubectl

 

podAffinityスケジューリングポッド親和性

第一ポッドは、同じノードが同じノードに存在しない決意ポッドを必要方法たノードと後続の評価をポッド抗ノードへpodAntiAffinityポッド親和性

 

両方のハードとソフトにも親和性の親和性のためにpods.spec.affinity.podAffinityポッドの親和性を説明kubectl

preferredDuringSchedulingIgnoredDuringExecution <[]オブジェクト>ソフト親和性

 

requiredDuringSchedulingIgnoredDuringExecution <[]オブジェクト>ハード親和性

topologyKey <文字列>位置決意

labelSelectorを有する1つ以上のポッド親和性<OBJECT>決意

名前空間は、<[]文字列>という名前の親和ポッドの名前空間は、指定されていない場合は、ポッドの名前は、一般的に、現在、相互参照他の名前空間ポッドではありませんスペースを作成するには

 

pods.spec.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelectorを説明kubectl

MatchExpressions <[] OBJECT>設定セレクタ

matchLabels <地図[文字列]文字列>等価セレクタ

 

CPポッド-demo.yamlポッド必要な親和性-demo.yaml

vimのポッドに必要な親和性-demo.yaml

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド、最初の

  名前空間:デフォルト

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

---

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド秒

  名前空間:デフォルト

  ラベル:

    アプリ:バックエンド

    ティア:デシベル

スペック:

  コンテナ:

  - 名前:busyboxの

    画像:busyboxの:最新

    imagePullPolicy:IfNotPresent

    コマンド:[ "SH"、 " - C"、​​ "睡眠3600"]

  親和性:

    podAffinity:ポッド親和性及び好ましく

      requiredDuringSchedulingIgnoredDuringExecution:ハード親和性を指定します。

        - labelSelector:ポッドタグセレクタ、標的親和性としてこのラベルポッドを選択

           MatchExpressions:マッチポッドラベル式

           - {キー:アプリケーション、オペレータ:において、値:[ "myappの"]}标签アプリ= myappの

         topologyKey:どのノードに作られただけで、実行キーラベル指定されたノード識別子とKubernetes.io/hostnameの親和ポッドで、その後、同じ値の値とポッドの親和性、その指定され、同じポッド内のノードの親和性またはノードの同じタイプの上で実行します

 

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド、最初の

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

---

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド秒

  ラベル:

    アプリ:バックエンド

    ティア:デシベル

スペック:

  コンテナ:

  - 名前:busyboxの

    画像:busyboxの:最新

    imagePullPolicy:IfNotPresent

    コマンド:[ "SH"、 " - C"、​​ "睡眠3600"]

  親和性:

    podAffinity:

      requiredDuringSchedulingIgnoredDuringExecution:

      - labelSelector:

          MatchExpressions:

          - {キー:アプリケーション、オペレータ:において、値:[ "myappの"]}

        topologyKey:kubernetes.io/hostname

 

-fポッド必要な親和性-demo.yamlを削除kubectl

-fポッド必要な親和性-demo.yamlを適用kubectl

 

podAntiAffinityポッドのプロと抗

CPポッド-必要な親和性-demo.yamlポッド必要-Antiaffinity-demo.yaml

vimのポッド-必要-Antiaffinity-demo.yaml

 

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド-3

  ラベル:

    アプリ:myappに

    ティア:フロントエンド

スペック:

  コンテナ:

  - 名前:myappに

    画像:ikubernetes / myappに:V1

---

apiVersion:V1

種類:ポッド

メタデータ:

  名前:ポッド-4

  ラベル:

    アプリ:バックエンド

    ティア:デシベル

スペック:

  コンテナ:

  - 名前:busyboxの

    画像:busyboxの:最新

    imagePullPolicy:IfNotPresent

    コマンド:[ "SH"、 " - C"、​​ "睡眠3600"]

  親和性:

    podAntiAffinity:他のパラメータ名と同じポッド親和以下ポッド抗親和作戦

      requiredDuringSchedulingIgnoredDuringExecution:

      - labelSelector:

          MatchExpressions:

          - {キー:アプリケーション、オペレータ:において、値:[ "myappの"]}

        topologyKey:kubernetes.io/hostname

 

-fポッド必要な親和性-demo.yamlを削除kubectl

-fポッド必要-Antiaffinity-demo.yamlを適用kubectl

一つのノードのみが、抗親和性なので、すべての状態は唯一pengdingすることができます

 

 ステインは、アクティブノードのオプションノードのプロパティに派遣しました

node01 -o YAMLノードを取得しkubectl

nodes.specを説明kubectl

 

汚染さ

nodes.spec.taints汚れを説明kubectl

nodes.spec.taints.effectを説明kubectl

動作が定義されている効果の<string> -required-時にポッドの拒絶上のポッド耐え難いテイク効果

NOEXECUTE:スケジュールに影響を与えるだけでなく、既存のオブジェクトポッドに影響を与えるだけでなく、ポッド不耐症ノードオブジェクトが追放されます

NoSchedule:唯一の既存のポッドオブジェクトには影響しません、スケジューリングプロセスに影響を与え、スケジュール上容認しません。

PreferNoSchedule:だけでは、既存のポッドオブジェクトには影響しません、スケジューリングプロセスに影響を与え、スケジューリングはオーバー容認しません、

しかし、またラインをオーバースケジュールする必要があり

 

マスター染色

ノードのマスターを記述kubectl

汚染さ:node-role.kubernetes.io/master:NoSchedule

             ステイン効果

ポッドは、この汚れを容認、来て予定されていません

 

ポッド公差

Kubectl GETポッド-n KUBE-システム

-n KUBE-システムKUBE-apiserverマスターポッドを記述kubectl

Tolerations::NOEXECUTE、

 

kubectl KUBE-システムKUBE-フランネル-DS-amd64-99ccn -nポッドを記述する

Tolerations::NoSchedule

                 node.kubernetes.io/disk-pressure:NoSchedule

                 node.kubernetes.io/memory-pressure:NoSchedule

                 node.kubernetes.io/network-unavailable:NoSchedule

                 node.kubernetes.io/not-ready:NoExecute

                 node.kubernetes.io/pid-pressure:NoSchedule

                 node.kubernetes.io/unreachable:NoExecute

                 node.kubernetes.io/unschedulable:NoSchedule       

 

 汚れの管理ノード

-help汚染された汚染kubectl

kubectlの汚染ノードnode01ノード型=生産:NoSchedule

ノードは、タイプ - 汚れを削除node01 kubectl汚染ノード

             キー=値指定Node01染色染色:効果をスケジュールではないが容認されることはありません

 

汚染さ:ノードタイプ=産生:NoSchedule

 

VIM-デプロイdemo.yaml

apiVersion:アプリケーション/ V1

種類:展開

メタデータ:

  名前:myappの-デプロイ

  名前空間:デフォルト

スペック:

  レプリカ:2

  セレクタ:

    matchLabels:

      アプリ:myappに

      リリース:カナリア

  テンプレート:

    メタデータ:

      ラベル:

        アプリ:myappに

        リリース:カナリア

 

    スペック:

      コンテナ:

      - 名前:myappに

        画像:ikubernetes / myappに:V1

        ポート:

        - 名前:HTTP

          containerPort:80

 

それは実行されませんので、ポッドにはプラス公差の汚れは、ステータスが保留されていないため、-fを展開-demo.yaml適用kubectl

 

kubectlの汚染ノードとnode02ノード型= QA:NOEXECUTE

                      ステイン汚れキー値ポッドは追放効果を容認します

 

    スペック:

      コンテナ:

      - 名前:myappに

        画像:ikubernetes / myappに:V1

        ポート:

        - 名前:HTTP

          containerPort:80

      tolerations:ポッドが少なく汚れを容認はどちらか、この染色で実行することができます

      - キー:「ノード・タイプ」ノードステインキー

        operrator:「等しい」と相対的に等しいと等価ノード染色が正確ノード染色の存在下で存在します

        値:「生産」ノード污点値

        効果:「NOEXECUTE」ポッドの程度は許容することができます

        tolerationSeconds:時間の60追放

 

kubectl -f-デプロイdemo.yamlを適用

 

    スペック:

      コンテナ:

      - 名前:myappに

        画像:ikubernetes / myappに:V1

        ポート:

        - 名前:HTTP

          containerPort:80

      tolerations:あまり汚れを容認するには、両方の染色にかけました

      - キー:「ノードタイプ」

        オペレータ:同等比較の存在下で汚れを「存在」

        値:「」

        効果:「NoSchedule」程度は許容することができます

 

kubectl -f-デプロイdemo.yamlを適用

 

    スペック:

      コンテナ:

      - 名前:myappに

        画像:ikubernetes / myappに:V1

        ポート:

        - 名前:HTTP

          containerPort:80

      tolerations:あまり汚れを容認するには、両方の染色にかけました

      - キー:「ノードタイプ」

        オペレータ:同等比較の存在下で汚れを「存在」

        値:「」

 

     効果:「」すべてを表すが、度を許容することができます

kubectl -f-デプロイdemo.yamlを適用

 

公差:NOEXECUTE> NoSchedule> PreferNoSchedule

最大許容値:NoExcute

おすすめ

転載: www.cnblogs.com/leiwenbin627/p/11348699.html