TaintsとTolerations
Taintsを使って特定のノードへのPodのスケジューリングを防ぎ、指定したPodにはそれを許容させます。
「TaintsとTolerations」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Taintsとは
GPUなどの特殊なハードウェアを備えていたり、特定のワークロード専用に予約されていたりする特別なノードが、Kubernetesクラスターにあるとします。そこに任意のPodを配置したくはありませんよね。
そこで役立つのがTaintsです。Taintはノードに適用するプロパティで、PodがそのTaintを明示的に「許容」しない限り、そのノードへのスケジュールを防ぎます。
Taintsを使用する理由
Taintsは、Podの実行場所を管理するうえで非常に便利です。
- 専用ノード:特定のチームやアプリケーション向けにノードを確保します。
- 特殊なハードウェア:GPUや高性能SSDを搭載したノードを、それらを必要とするPod専用に分離します。
- メンテナンス:ノードをメンテナンス対象としてマークし、そこへの新しいPodのスケジュールを一時的に防ぎます。
Taintsの仕組み
Taintは、ノードに掲げる「立入禁止」の標識のようなものだと考えてください。Podは、Tolerationという一致する「許可証」を持っている場合にのみ、この標識を無視できます。
Taintは、key、value、effectで構成されます。例:key=value:effect。
TaintのEffectを理解する
Taintの「effect」部分は、それを許容しないPodに対してKubernetesが行う動作を指定します。主なEffectは3つあります。
NoSchedulePreferNoScheduleNoExecute
それぞれについて見ていきましょう。
TaintのEffect:NoSchedule
NoSchedule Effectは最も厳格です。ノードにNoScheduleのTaintがある場合、一致するTolerationを持たないPodは、そのノードにスケジュールされません。
すでにノード上で実行されているPodは、新しくNoScheduleのTaintが追加されても影響を受けません。
TaintのEffect:PreferNoSchedule
PreferNoScheduleは、NoScheduleの「ソフト」なバージョンです。KubernetesはTaintのあるノードへのPodのスケジュールをできる限り避けますが、必須条件ではありません。
他に適切なノードがない場合、Tolerationがなくても、PodがPreferNoScheduleのTaintがあるノードにスケジュールされることがあります。
TaintのEffect:NoExecute
NoExecute Effectは、すでに実行中のPodにも影響する点が特徴です。ノードにNoExecuteのTaintがある場合、次のようになります。
- 一致するTolerationを持たないPodは直ちにエビクトされます。
- 一致するTolerationを持たない新しいPodはスケジュールされません。
これは、ノードのドレインやノード障害への対応によく使用されます。
Tolerationsの紹介
Taintをノードに適用するのに対し、TolerationはPodに適用します。PodのTolerationにより、一致するTaintを持つノードへのスケジュールが可能になります。
一致するTolerationがない場合、PodはTaintのあるノードにスケジュールできないか、スケジュールが避けられます。
PodマニフェストのTolerations
Tolerationは、PodのYAMLマニフェストのspecセクション内で定義します。key=value:NoScheduleというTaintをPodが許容する方法は次のとおりです。
apiVersion: v1
kind: Pod
metadata:
name: my-tolerated-pod
spec:
containers:
- name: nginx
image: nginx
tolerations:
- key: "special-purpose"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"TaintsとTolerationsの一致条件
PodをTaintのあるノードにスケジュールするには、そのTolerationがノードのTaintと一致している必要があります。一致には次の条件があります。
- Key:同じである必要があります。
- Value:
operator: Equalの場合は同じである必要があります。 - Effect:同じである必要があります。
- Operator:
EqualまたはExists(キーに対して任意の値を許容する指定)を使用できます。
特別なTolerationであるkey: "" operator: Existsは、任意のTaintを許容します。
クイックチェック:Taints
あるノードにenv=production:NoScheduleというTaintがあるとします。このノードへのスケジュールを可能にするPodの設定はどれでしょうか。
まとめ:TaintsとTolerations
TaintsとTolerationsについて学びました。
- Taintsはノードに適用して、Podを遠ざけます。
- TolerationsはPodに適用して、Taintのあるノードへのスケジュールを可能にします。
- 主なTaintのEffectは
NoSchedule、PreferNoSchedule、NoExecuteです。 - Podをスケジュールするには、TolerationがTaintのkey、value、effectと一致している必要があります。
これらのツールにより、Podの配置をきめ細かく制御できます。
よくある質問
「TaintsとTolerations」レッスンは無料ですか?
はい。「TaintsとTolerations」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「TaintsとTolerations」で何を学びますか?
Taintsを使って特定のノードへのPodのスケジューリングを防ぎ、指定したPodにはそれを許容させます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「TaintsとTolerations」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- リソースのRequestsとLimits
- ノードセレクターとアフィニティ
- TaintsとTolerations
- Podの優先度とプリエンプション