Kubernetes taint & toleration
一、概説
前の記事では、podのプロパティを記述し、このpodがどのようなnodesにスケジューリングするかを宣言するKubernetes親和性スケジューリングについて説明しました.本明細書で説明する
taint&toleration構造体を見て、以下の足点紹介では関連フィールドに関連します.
二、Point
nodeに複数のtaintsを設定することもできますが、podで同じ数のtolerationsを構成することもできます.スケジュールと実行に影響する具体的な動作は、次のように分類できます.少なくとも1つの すべての 少なくとも1つの
三、Toleration
PodSpec構成Tolerationsを参照してください.key、value、effectはNode Pointの設定と一致する必要があります.operatorは2種類をサポートしています. Exists:この構成ではvalueを指定する必要はありません. Equal:value値を設定する必要があります.(operatorのデフォルト) いくつかの特殊な状況があります. keyは空でoperatorはExistsに等しく、すべてのkeys、values、effectsが一致していることを示します.言い換えればすべてのtaintsを容認した. effectが空の場合は、すべてのeffects(NoSchedule、PreferNoSchedule、NoExecute) に一致することを示す.
もう1つの
このpodがnode上で実行され、nodeが対応するtaintを追加した場合、このpodはnode上に3600秒滞在してから追放されることを示す.しかしtaintがこの時間までに除去されれば、このpodも追放されない.
イメージを比較する図を説明します.
図参照:Taints and tolerations,pod and node affinities demystified・Banzai Cloud
四、内蔵行為
kubernetes 1.6バージョンでは、node controllerがシステムの状況にフォローしてnode taintプロパティを自動的に設定します.内蔵taint keyは次のとおりです. node.kubernetes.io/not-ready:ノードはまだ準備ができていません node.kubernetes.io/unreachable:ノードは にアクセスできません. node.kubernetes.io/unschedulable:ノードスケジューリング不可 node.kubernetes.io/out-of-disk:ノードディスクが 未満 node.kubernetes.io/memory-pressure:ノードにメモリ圧力がある node.kubernetes.io/disk-pressure:ノードにディスク圧力 がある node.kubernetes.io/network-unavailable:ノードネットワークは使用できません node.kubernetes.io/pid-pressure:ノードにpid圧力 がある node.cloudprovider.kubernetes.io/uninitialized:クラウドノード未初期化 node.cloudprovider.kubernetes.io/shutdown:クラウドノードがダウンラインした kubernetesは、作成したpodに2つのデフォルトのtoleration:
D e f a ultTolerationSeconds admission controller設定のtolerationSeconds値は、ユーザーが指定することもできます.
具体的な参考:https://github.com/kubernetes...
もう一つのデフォルトの動作はDaemonSetです.DaemonSetが作成したpodには、
例 ノードのセットを特定のユーザ専用にする場合は、taints: ノードが専用であり、サービスがこのノードのみを使用することを保証する場合は、このノードにlabels(
には、GPU、FPGAなどの特殊なハードウェアを有する一部のノードがあり、専用のハードウェアを必要としないpodsがこれらのノードにスケジューリングされないことを確保する.taints: を手動で追加することなく、Extended ResourcesとExtendedResourceToleration admission controllerを使用することで、特殊なハードウェアに依存するpodsのスケジューリングを容易にすることもできます.
についても前述したように、
五、参考資料 community/taint-toleration-dedicated.md at master · kubernetes/community · GitHub community/taint-node-by-condition.md at master · kubernetes/community · GitHub Taints and Tolerations Taints and tolerations, pod and node affinities demystified · Banzai Cloud
前の記事では、podのプロパティを記述し、このpodがどのようなnodesにスケジューリングするかを宣言するKubernetes親和性スケジューリングについて説明しました.本明細書で説明する
Taint( )
は、podのスケジューリングをnodeがアクティブに排斥できるようにするnodeの属性である.対応するk 8 sはまたpodに関連属性toleration( )
を追加し、これらのpodが対応するtaintsを有するnodesにスケジューリングされることができる(強制的に要求されない)ことを示す.この2つは、podを不適切なnodesにスケジューリングしないことを確保するためによく組み合わせられます.taint&toleration構造体を見て、以下の足点紹介では関連フィールドに関連します.
type Taint struct {
Key string
Value string
Effect TaintEffect
// add taint
// Effect = NoExecute, nodeController
TimeAdded *metav1.Time
}
type Toleration struct {
Key string
Operator TolerationOperator
Value string
Effect TaintEffect
//
TolerationSeconds *int64
}
type TaintEffect string
const (
TaintEffectNoSchedule TaintEffect = "NoSchedule"
TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule"
TaintEffectNoExecute TaintEffect = "NoExecute"
)
type TolerationOperator string
const (
TolerationOpExists TolerationOperator = "Exists"
TolerationOpEqual TolerationOperator = "Equal"
)
二、Point
nodeに複数のtaintsを設定することもできますが、podで同じ数のtolerationsを構成することもできます.スケジュールと実行に影響する具体的な動作は、次のように分類できます.
effect == NoSchedule
のtaintがpod tolerationされていない場合、podはノードにスケジューリングされない.effect == NoSchedule
のtaintsがpod tolerationされているが、少なくとも1つのeffect == PreferNoSchedule
がpod tolerationされていない場合、k 8 sはpodをノードにスケジューリングしないように努力する.effect == NoExecute
のtaintがpod tolerationされていない場合、このpodはノードにスケジューリングされないだけでなく、このノード上で動作しているが汚点を許容するpodsも設定されていない場合、駆逐される.三、Toleration
PodSpec構成Tolerationsを参照してください.key、value、effectはNode Pointの設定と一致する必要があります.operatorは2種類をサポートしています.
tolerations:
- operator: "Exists"
tolerations:
- key: "key"
operator: "Exists"
もう1つの
TolerationSeconds
は、effectがNoExecute
と組み合わせて使用されます.nodeにeffect=NoExecuteのtaintが追加された後、そのtaintを許容できるpodsがnodeに滞在できる時間を指定します.例:tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 3600
このpodがnode上で実行され、nodeが対応するtaintを追加した場合、このpodはnode上に3600秒滞在してから追放されることを示す.しかしtaintがこの時間までに除去されれば、このpodも追放されない.
イメージを比較する図を説明します.
図参照:Taints and tolerations,pod and node affinities demystified・Banzai Cloud
四、内蔵行為
kubernetes 1.6バージョンでは、node controllerがシステムの状況にフォローしてnode taintプロパティを自動的に設定します.内蔵taint keyは次のとおりです.
DefaultTolerationSeconds admission controller
とnode.kubernetes.io/not-ready
を追加し、node.kubernetes.io/unreachable
を設定します.もちろんこのデフォルト構成では、ユーザーは自分で上書きできます.これらの自動追加のデフォルト構成は、nodeに問題が発生した後、podがnodeに5分間滞在できることを確認します.D e f a ultTolerationSeconds admission controller設定のtolerationSeconds値は、ユーザーが指定することもできます.
具体的な参考:https://github.com/kubernetes...
もう一つのデフォルトの動作はDaemonSetです.DaemonSetが作成したpodには、
tolerationSeconds = 300
とnode.alpha.kubernetes.io/unreachable
の2つのtolerationが追加されます.node.alpha.kubernetes.io/notReady
が設定され、effect = NoExecute
は指定されません.nodeにunreachableまたはnotReadyの問題が発生した場合、DaemonSet Podsは永遠に追放されないことを確保することを目的としています.例
tolerationSeconds
を設定し、podsに対応するtolerationsを設定できます.kubectl taint nodes nodename dedicated=groupName:NoSchedule
)を設定し、対応するpodsにNodeAffinityを設定して、podsがこのノードにしか移動できないことを制御する必要があります.dedicated=groupName
または
は、kubectl taint nodes nodename special=true:NoSchedule
と同様に設定することもできる.コンテナのtoleration kubectl taint nodes nodename special=true:PreferNoSchedule
taint
によってノード上で実行されているpodsを駆逐することができる.五、参考資料