# TaintsとTolerations ## KubernetesのTaintsとTolerationsとは Node SelectorやNode Affinityと同じく、特定のNodeにPodをscheduleする仕組み。 直訳するとTaintsは「汚れ」、Tolerationsは「許容」でいまいち意味わからない。 簡単に言うと汚れ(Taints)をどこまで許容(Tolerations)できるかを定義する。 Node SelectorやNode AffinityはPodをscheduleしたいNodeの設定を行なうが、TaintsとTolerationsはPodをscheduleしたくないNodeを設定する。 TaintsはNodeに設定し、TolerationsはPodに設定する。 本番用のNodeに他のPodをscheduleさせたくない時などに有効。 ## Taintsの付与 Taintsは`Key=Value:Effect`のように、3種類のパラメータで構成されている。 付与されたTaintsを確認するには`kubectl describe node <Node>`を使用する。 ``` # prod01ノードにenv=prod:NoScheduleのTaintsを付与 $ kubectl taint node prod01 env=prod:NoSchedule ``` EffectはTaintsとTolerationsがマッチしない際の挙動を定義している。 * PreferNoSchedule: 可能な限りスケジューリングしない * NoSchedule: スケジューリングしない * NoExecute: 実行を許可しない ## Tolerationsの指定 TolerationsはKey/Value/Effectを指定して、Taintsで付与されたKey/Value/Effectと一致した場合許容する。 完全一致だけでなく、Tolerationsの一部を未指定にすることでワイルドカードとして扱うこともできる。 Tolerationsを指定したPodの例 ```yaml= apiVersion: v1 kind: Pod metadata: name: sample-tolerations spec: containers: - name: sample-container image: nginx tolerations: - key: "env" operator: "Equal" value: "prod" effect: "NoSchedule" ``` オペレータは以下の2種類から選択可能。 * Equal: keyとvalueが等しい * Exists: keyが存在する ## Kubernetesが付与するその他のTaints Nodeに以下のような問題が発生した場合に、対応するTaintsが自動で付与される。 * ノードのメモリ不足時 * ノードのディスク不足時 * ノードのPID枯渇時 * ノードのネットワーク不通時
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up