0Pricing
DevOps Bootcamp · レッスン

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つあります。

  • NoSchedule
  • PreferNoSchedule
  • NoExecute

それぞれについて見ていきましょう。

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リソースのRequestsとLimits
  2. ノードセレクターとアフィニティ
  3. TaintsとTolerations
  4. Podの優先度とプリエンプション
← DevOps Bootcampに戻る