16.11.4. 容認の Pod への追加
容認を Pod に追加するには、Pod 仕様を tolerations
セクションを含めるように編集します。
Equal
演算子を含む Pod 設定ファイルのサンプル
tolerations: - key: "key1" 1 operator: "Equal" 2 value: "value1" 3 effect: "NoExecute" 4 tolerationSeconds: 3600 5
- 1 2 3 4
- テイントおよび容認コンポーネント の表で説明されている toleration パラメーターです。
- 5
tolerationSeconds
パラメーターは、Pod がエビクトされる前にノードにバインドされる期間を指定します。以下の Pod エビクションを遅延させる容認期間 (秒数) の使用 を参照してください。
Exists
演算子を含む Pod 設定ファイルのサンプル
tolerations: - key: "key1" operator: "Exists" effect: "NoExecute" tolerationSeconds: 3600
これらの容認のいずれも 上記の oc adm taint
コマンドで作成されるテイント に一致します。いずれかの容認のある Pod は node1
にスケジュールできます。
16.11.4.1. Pod のエビクションを遅延させる容認期間 (秒数) の使用
Pod 仕様に tolerationSeconds
パラメーターを指定して、Pod がエビクトされる前にノードにバインドされる期間を指定できます。effect NoExecute
のあるテイントがノードに追加される場合、テイントを容認しない Pod は即時にエビクトされます (テイントを容認する Pod はエビクトされません)。ただし、エビクトされる Pod に tolerationSeconds
パラメーターがある場合、Pod は期間切れになるまでエビクトされません。
以下に例を示します。
tolerations: - key: "key1" operator: "Equal" value: "value1" effect: "NoExecute" tolerationSeconds: 3600
ここで、この Pod が実行中であるものの、一致するテイントがない場合、Pod は 3,600 秒間バインドされたままとなり、その後にエビクトされます。テイントが期限前に削除される場合、Pod はエビクトされません。
16.11.4.1.1. 容認の秒数のデフォルト値の設定
このプラグインは、node.kubernetes.io/not-ready:NoExecute
および node.kubernetes.io/unreachable:NoExecute
テイントを 5 分間容認するための Pod のデフォルトの容認を設定します。
ユーザーが提供する Pod 設定にいずれかの容認がある場合、デフォルトは追加されません。
デフォルトの容認の秒数を有効にするには、以下を実行します。
マスター設定ファイル (/etc/origin/master/master-config.yaml) を変更して、
DefaultTolerationSeconds
を admissionConfig セクションに追加します。admissionConfig: pluginConfig: DefaultTolerationSeconds: configuration: kind: DefaultAdmissionConfig apiVersion: v1 disable: false
変更を有効にするために、OpenShift を再起動します。
# master-restart api # master-restart controllers
デフォルトが追加されていることを確認します。
Pod を作成します。
$ oc create -f </path/to/file>
以下に例を示します。
$ oc create -f hello-pod.yaml pod "hello-pod" created
Pod の容認を確認します。
$ oc describe pod <pod-name> |grep -i toleration
以下に例を示します。
$ oc describe pod hello-pod |grep -i toleration Tolerations: node.kubernetes.io/not-ready=:Exists:NoExecute for 300s