スケジューラのスケジューリングプロセス:
述語 - >優先順位 - >を選択
好ましくは、予め選択
スケジュール:
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