Kubernetes では、ラベルおよび Taint を使用してクラスター内のリソースを管理およびスケジュールします。ラベルの概要および使用上の注意事項については、「ラベルとセレクター」をご参照ください。Taint および Toleration の動作原理については、Kubernetes ドキュメントの「Taint と Toleration」をご参照ください。
GPU などの特殊ハードウェアを搭載したノードは運用コストが高くなります。一般ワークロードがこれらのノードにスケジュールされないようにし、必要なワークロードのみが利用できるようにするため、ノードに Taint を適用します。Taint は、Kubernetes スケジューラに対して、対応する Toleration を持たない Pod のスケジュールを回避またはエビクションするよう指示します。
ACK では、コンソールから直接ノードの Taint およびラベルを管理できます。
適用範囲
-
専用ノード:特定のチームまたはワークロード向けにノードグループを予約するため、Taint を適用して、対応する Toleration を持つ Pod のみがそのノードにスケジュールされるようにします。
-
ハードウェア固有のスケジューリング:GPU またはその他の特殊ハードウェアを必要とする Pod のみが、該当ハードウェアを搭載したノードに配置されるようにします。
-
Pod のエビクション:NoExecute Taint をノードに追加して、Pod を排出します。対応する Toleration を持たない Pod はノードからエビクションされます。Pod をノード上に維持したい場合は、Pod に
NoExecuteTaint と一致する Toleration を追加してください。
Taint の効果
各 Taint には、対応する Toleration を持たない Pod に対するスケジューラの動作を制御する効果があります。
| 効果 | 新しい Pod の動作 | 実行中の Pod の挙動 |
|---|---|---|
NoSchedule |
ノードへスケジュールされません | エビクションされません |
NoExecute |
ノードへスケジュールされません | エビクションされます(対応する Toleration がない場合) |
PreferNoSchedule |
スケジューラがノードを回避しようと試みます(ソフト要件) | エビクションされません |
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
ACK コンソールへのアクセス
-
ノードのラベルおよび Taint を管理するのに十分な権限があること
ノードのラベルの管理
ラベルはノードを識別および分類するために使用します。操作やスケジューリングの対象となる特定のノードを指定するセレクターとして活用できます。
ラベルの追加
-
ACK コンソール にログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
-
「クラスター」ページで、クラスター名をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノード] を選択します。
-
[ラベルと Taint の管理] をクリックします。[ラベル] タブで対象ノードを選択し、[ラベルの追加] をクリックします。
-
[追加] ダイアログボックスで、[名前] および [値] を設定して確認します。
ラベルが追加された後、ノード一覧の [ラベル] 列に表示されます。
ノード一覧でのラベルの操作
-
ラベルをクリックすると、ノード一覧がフィルターされ、そのラベルを持つノードのみが表示されます。
-
ラベルの横にある
アイコンをクリックすると、そのラベルを削除できます。
Kubernetes ネイティブのラベルは削除できません。誤って削除した場合、システムが自動的にノードに再追加します。
ノードの Taint の管理
Taint の追加
-
ACK コンソール にログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックします。左側ナビゲーションウィンドウで、[ノード] > [ノード] を選択します。
-
[ラベルと Taint の管理] をクリックします。[Taint] タブで対象ノードを選択し、[Taint の追加] をクリックします。
-
[追加] ダイアログボックスで、[名前]、[値]、および [効果] を設定して確認します。
| パラメーター | 説明 |
|---|---|
| [名前] | 1~63 文字。英字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) を使用可能。先頭および末尾は英字または数字である必要があります。プレフィックス付きキーを使用する場合は、DNS サブドメインプレフィックス(最大 253 文字)の後にスラッシュ (/) を付加します。 |
| [値] | 任意項目。最大 63 文字。英字、数字、ハイフン (-)、アンダースコア (_)、ピリオド (.) を使用可能。先頭および末尾は英字または数字である必要があります。 |
| 適用 | NoSchedule、NoExecute、または PreferNoSchedule を指定します。「Taint の効果」で動作の詳細をご確認ください。 |
Taint の完全なフォーマット仕様については、Kubernetes ドキュメントの「Taint と Toleration の概念」をご参照ください。
Taint の確認
Taint を追加した後、正しく適用されているか確認します。
-
[ノード] ページで、対象ノードを一覧から見つけます。
-
[Taint] 列を確認し、新しい Taint が表示されていることを確認します。
-
Taint をクリックしてノード一覧をフィルターし、該当の Taint を持つノードのみが表示されることを確認します。
Taint の削除
[Taint] 列で、削除する Taint の横にある
アイコンをクリックします。
次のステップ
-
ノードプールレベル(プール内のすべてのノードに適用)でラベルおよび Taint を設定する場合は、「ノードプールの作成と管理」をご参照ください。
-
ラベルまたは
nodeSelectorフィールドを使用して、特定のノードに Pod をスケジュールする場合は、「特定のノードへの Pod のスケジュール」をご参照ください。