Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

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 設定にいずれかの容認がある場合、デフォルトは追加されません。

デフォルトの容認の秒数を有効にするには、以下を実行します。

  1. マスター設定ファイル (/etc/origin/master/master-config.yaml) を変更して、DefaultTolerationSeconds を admissionConfig セクションに追加します。

    admissionConfig:
      pluginConfig:
        DefaultTolerationSeconds:
          configuration:
            kind: DefaultAdmissionConfig
            apiVersion: v1
            disable: false
  2. 変更を有効にするために、OpenShift を再起動します。

    # master-restart api
    # master-restart controllers
  3. デフォルトが追加されていることを確認します。

    1. Pod を作成します。

      $ oc create -f </path/to/file>

      以下に例を示します。

      $ oc create -f hello-pod.yaml
      pod "hello-pod" created
    2. 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