7.7. taint および toleration
taint および toleration を理解し、これらを使用します。
7.7.1. taint および toleration について リンクのコピーリンクがクリップボードにコピーされました!
taint により、ノードは Pod に一致する toleration がない場合に Pod のスケジュールを拒否することができます。
taint は Node
仕様 (NodeSpec
) でノードに適用され、toleration は Pod
仕様 (PodSpec
) で Pod に適用されます。taint をノードに適用する場合、スケジューラーは Pod が taint を容認しない限り、Pod をそのノードに配置することができません。
ノード仕様の taint の例
Pod
仕様での toleration の例
taint および toleration は、key、value、および effect で構成されます。
パラメーター | 説明 | ||||||
---|---|---|---|---|---|---|---|
|
| ||||||
|
| ||||||
| effect は以下のいずれかにすることができます。
| ||||||
|
|
NoSchedule
taint をコントロールプレーンノードに追加すると、ノードには、デフォルトで追加されるnode-role.kubernetes.io/master=:NoSchedule
taint が必要です。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
toleration は taint と一致します。
operator
パラメーターがEqual
に設定されている場合:-
key
パラメーターが同じである。 -
value
パラメーターが同じである。 -
effect
パラメーターが同じである。
-
operator
パラメーターがExists
に設定されている場合:-
key
パラメーターが同じである。 -
effect
パラメーターが同じである。
-
以下の taint は OpenShift Container Platform に組み込まれています。
-
node.kubernetes.io/not-ready
: ノードは準備状態にありません。これはノード条件Ready=False
に対応します。 -
node.kubernetes.io/unreachable
: ノードはノードコントローラーから到達不能です。これはノード条件Ready=Unknown
に対応します。 -
node.kubernetes.io/memory-pressure
: ノードにはメモリー不足の問題が発生しています。これはノード条件MemoryPressure=True
に対応します。 -
node.kubernetes.io/disk-pressure
: ノードにはディスク不足の問題が発生しています。これはノード条件DiskPressure=True
に対応します。 -
node.kubernetes.io/network-unavailable
: ノードのネットワークは使用できません。 -
node.kubernetes.io/unschedulable
: ノードはスケジュールが行えません。 -
node.cloudprovider.kubernetes.io/uninitialized
: ノードコントローラーが外部のクラウドプロバイダーを使用して起動すると、この taint はノード上に設定され、使用不可能とマークされます。cloud-controller-manager のコントローラーがこのノードを初期化した後に、kubelet がこの taint を削除します。 node.kubernetes.io/pid-pressure
: ノードが pid 不足の状態です。これはノード条件PIDPressure=True
に対応します。重要OpenShift Container Platform では、デフォルトの pid.available
evictionHard
は設定されません。
7.7.2. taint および toleration の追加 リンクのコピーリンクがクリップボードにコピーされました!
toleration を Pod に、taint をノードに追加することで、ノードはノード上でスケジュールする必要のある (またはスケジュールすべきでない) Pod を制御できます。既存の Pod およびノードの場合、最初に toleration を Pod に追加してから taint をノードに追加して、toleration を追加する前に Pod がノードから削除されないようにする必要があります。
手順
Pod
仕様をtolerations
スタンザを含めるように編集して、toleration を Pod に追加します。Equal 演算子を含む Pod 設定ファイルのサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
Exists 演算子を含む Pod 設定ファイルのサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Exists
Operator はvalue
を取りません。
この例では、taint を、キー
key1
、値value1
、および taint effectNoExecute
を持つnode1
に taint を配置します。taint および toleration コンポーネント の表で説明されているパラメーターと共に以下のコマンドを使用して taint をノードに追加します。
oc adm taint nodes <node_name> <key>=<value>:<effect>
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc adm taint nodes node1 key1=value1:NoExecute
$ oc adm taint nodes node1 key1=value1:NoExecute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、キー
key1
、値value1
、および effectNoExecute
を持つ taint をnode1
に配置します。注記NoSchedule
taint をコントロールプレーンノードに追加すると、ノードには、デフォルトで追加されるnode-role.kubernetes.io/master=:NoSchedule
taint が必要です。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod の toleration はノードの taint に一致します。いずれかの toleration のある Pod は
node1
にスケジュールできます。
7.7.3. コンピュートマシンセットを使用した taint および toleration の追加 リンクのコピーリンクがクリップボードにコピーされました!
コンピュートマシンセットを使用して taint をノードに追加できます。MachineSet
オブジェクトに関連付けられるすべてのノードが taint で更新されます。toleration は、ノードに直接追加された taint と同様に、コンピュートマシンセットによって追加される taint に応答します。
手順
Pod
仕様をtolerations
スタンザを含めるように編集して、toleration を Pod に追加します。Equal
演算子を含む Pod 設定ファイルのサンプルCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
Exists
演算子を含む Pod 設定ファイルのサンプルCopy to Clipboard Copied! Toggle word wrap Toggle overflow taint を
MachineSet
オブジェクトに追加します。taint を付けるノードの
MachineSet
YAML を編集するか、新規MachineSet
オブジェクトを作成できます。oc edit machineset <machineset>
$ oc edit machineset <machineset>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow taint を
spec.template.spec
セクションに追加します。コンピュートマシンセット仕様の taint の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、キー
key1
、値value1
、および taint effectNoExecute
を持つ taint をノードに配置します。コンピュートマシンセットを 0 にスケールダウンします。
oc scale --replicas=0 machineset <machineset> -n openshift-machine-api
$ oc scale --replicas=0 machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用してコンピュートマシンセットをスケーリングすることもできます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マシンが削除されるまで待機します。
コンピュートマシンセットを随時スケールアップします。
oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、以下を実行します。
oc edit machineset <machineset> -n openshift-machine-api
$ oc edit machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マシンが起動するまで待ちます。taint は
MachineSet
オブジェクトに関連付けられたノードに追加されます。
7.7.4. taint および toleration 使用してユーザーをノードにバインドする リンクのコピーリンクがクリップボードにコピーされました!
ノードのセットを特定のユーザーセットによる排他的な使用のために割り当てる必要がある場合、toleration をそれらの Pod に追加します。次に、対応する taint をそれらのノードに追加します。toleration が設定された Pod は、taint が付けられたノードまたはクラスター内の他のノードを使用できます。
Pod が taint が付けられたノードのみにスケジュールされるようにするには、ラベルを同じノードセットに追加し、ノードのアフィニティーを Pod に追加し、Pod がそのラベルの付いたノードのみにスケジュールできるようにします。
手順
ノードをユーザーの使用可能な唯一のノードとして設定するには、以下を実行します。
対応する taint をそれらのノードに追加します。
以下に例を示します。
oc adm taint nodes node1 dedicated=groupName:NoSchedule
$ oc adm taint nodes node1 dedicated=groupName:NoSchedule
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用して taint を追加できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - カスタム受付コントローラーを作成して toleration を Pod に追加します。
7.7.5. taint および toleration を使用して特殊ハードウェアを持つノードを制御する リンクのコピーリンクがクリップボードにコピーされました!
ノードの小規模なサブセットが特殊ハードウェアを持つクラスターでは、taint および toleration を使用して、特殊ハードウェアを必要としない Pod をそれらのノードから切り離し、特殊ハードウェアを必要とする Pod をそのままにすることができます。また、特殊ハードウェアを必要とする Pod に対して特定のノードを使用することを要求することもできます。
これは、特殊ハードウェアを必要とする Pod に toleration を追加し、特殊ハードウェアを持つノードに taint を付けることで実行できます。
手順
特殊ハードウェアを持つノードが特定の Pod 用に予約されるようにするには、以下を実行します。
toleration を特別なハードウェアを必要とする Pod に追加します。
以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドのいずれかを使用して、特殊ハードウェアを持つノードに taint を設定します。
oc adm taint nodes <node-name> disktype=ssd:NoSchedule
$ oc adm taint nodes <node-name> disktype=ssd:NoSchedule
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、以下を実行します。
oc adm taint nodes <node-name> disktype=ssd:PreferNoSchedule
$ oc adm taint nodes <node-name> disktype=ssd:PreferNoSchedule
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用して taint を追加できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7.6. taint および toleration の削除 リンクのコピーリンクがクリップボードにコピーされました!
必要に応じてノードから taint を、Pod から toleration をそれぞれ削除できます。最初に toleration を Pod に追加してから taint をノードに追加して、toleration を追加する前に Pod がノードから削除されないようにする必要があります。
手順
taint および toleration を削除するには、以下を実行します。
ノードから taint を削除するには、以下を実行します。
oc adm taint nodes <node-name> <key>-
$ oc adm taint nodes <node-name> <key>-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc adm taint nodes ip-10-0-132-248.ec2.internal key1-
$ oc adm taint nodes ip-10-0-132-248.ec2.internal key1-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
node/ip-10-0-132-248.ec2.internal untainted
node/ip-10-0-132-248.ec2.internal untainted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod から toleration を削除するには、toleration を削除するための
Pod
仕様を編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow