12.2. テイントおよび容認(Toleration)を使用したロギング Pod の配置の制御
テイントおよび容認 (Toleration) により、ノードはノード上でスケジュールする必要のある (またはスケジュールすべきでない) Pod を制御できます。
12.2.1. テイントおよび容認 (Toleration) について リンクのコピーリンクがクリップボードにコピーされました!
テイント により、ノードは Pod に一致する 容認 がない場合に Pod のスケジュールを拒否することができます。
テイントは Node 仕様 (NodeSpec) でノードに適用され、容認は Pod 仕様 (PodSpec) で Pod に適用されます。テイントをノードに適用する場合、スケジューラーは Pod がテイントを容認しない限り、Pod をそのノードに配置することができません。
ノード仕様のテイントの例
apiVersion: v1
kind: Node
metadata:
name: my-node
#...
spec:
taints:
- effect: NoExecute
key: key1
value: value1
#...
Pod 仕様での容認の例
apiVersion: v1
kind: Pod
metadata:
name: my-pod
#...
spec:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 3600
#...
テイントおよび容認は、key、value、および effect で構成されます。
| パラメーター | 説明 | ||||||
|---|---|---|---|---|---|---|---|
|
|
| ||||||
|
|
| ||||||
|
| effect は以下のいずれかにすることができます。
| ||||||
|
|
|
NoScheduleテイントをコントロールプレーンノードに追加する場合、ノードには、デフォルトで追加されるnode-role.kubernetes.io/master=:NoScheduleテイントが必要です。以下に例を示します。
apiVersion: v1 kind: Node metadata: annotations: machine.openshift.io/machine: openshift-machine-api/ci-ln-62s7gtb-f76d1-v8jxv-master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-cdc1ab7da414629332cc4c3926e6e59c name: my-node #... spec: taints: - effect: NoSchedule key: node-role.kubernetes.io/master #...
容認はテイントと一致します。
operatorパラメーターがEqualに設定されている場合:-
keyパラメーターは同じになります。 -
valueパラメーターは同じになります。 -
effectパラメーターは同じになります。
-
operatorパラメーターがExistsに設定されている場合:-
keyパラメーターは同じになります。 -
effectパラメーターは同じになります。
-
以下のテイントは 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: ノードコントローラーが外部のクラウドプロバイダーを使用して起動すると、このテイントはノード上に設定され、使用不可能とマークされます。cloud-controller-manager のコントローラーがこのノードを初期化した後に、kubelet がこのテイントを削除します。 node.kubernetes.io/pid-pressure: ノードが pid 不足の状態です。これはノード条件PIDPressure=Trueに対応します。重要OpenShift Container Platform では、デフォルトの pid.available
evictionHardは設定されません。
12.2.2. 容認を使用したログストア Pod の配置の制御 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、ログストア Pod には以下の容認設定があります。
Elasticsearch ログストア Pod のデフォルト容認
apiVersion: v1
kind: Pod
metadata:
name: elasticsearch-example
namespace: openshift-logging
spec:
# ...
tolerations:
- effect: NoSchedule
key: node.kubernetes.io/disk-pressure
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
# ...
LokiStack ログストア Pod のデフォルトの容認
apiVersion: v1
kind: Pod
metadata:
name: lokistack-example
namespace: openshift-logging
spec:
# ...
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
# ...
テイントを追加し、ClusterLogging カスタムリソース(CR)の tolerations 構文を変更してログストア Pod の容認を設定できます。
前提条件
- Red Hat OpenShift Logging Operator がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - Elasticsearch または LokiStack のいずれかの内部ログストアをデプロイしている。
手順
次のコマンドを実行して、ロギング Pod をスケジュールするノードにテイントを追加します。
$ oc adm taint nodes <node_name> <key>=<value>:<effect>コマンドの例
$ oc adm taint nodes node1 lokistack=node:NoExecuteこの例では、テイントをキー
collector、値node、およびテイント effectNoExecuteのあるnode1に配置します。NoExecuteeffect のノードは、テイントに一致する Pod のみをスケジュールし、一致しない既存の Pod を削除します。ClusterLoggingCR のlogstoreセクションを編集し、ログストア Pod の容認を設定します。ClusterLoggingCR の例apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... logStore: type: lokistack elasticsearch: nodeCount: 1 tolerations: - key: lokistack1 operator: Exists2 effect: NoExecute3 tolerationSeconds: 60004 # ...
この容認は、oc adm taint コマンドで作成されたテイントと一致します。この容認のある Pod は node1 にスケジュールできます。
12.2.3. 容認を使用したログビジュアライザー Pod の配置の制御 リンクのコピーリンクがクリップボードにコピーされました!
他の Pod にはない特定のキー/値のペアを使用して、Kibana Pod のみが指定されたノードで実行できるようにすることができます。
前提条件
- Red Hat OpenShift Logging Operator、OpenShift Elasticsearch Operator、および Loki Operator がインストールされている。
手順
以下のコマンドを実行して、ログビジュアライザー Pod をスケジュールするノードにテイントを追加します。
$ oc adm taint nodes <node_name> <key>=<value>:<effect>コマンドの例
$ oc adm taint nodes node1 kibana=node:NoExecuteこの例では、テイントをキー
kibana、値node、およびテイントの効果NoExecuteのあるnode1に配置します。NoExecuteテイント effect を使用する必要があります。NoExecuteは、テイントに一致する Pod のみをスケジュールし、一致しない既存の Pod を削除します。ClusterLoggingCR のvisualizationセクションを編集し、Kibana Pod の容認を設定します。apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... visualization: type: kibana kibana: tolerations: - key: kibana1 operator: Exists2 effect: NoExecute3 tolerationSeconds: 60004 resources: limits: memory: 2Gi requests: cpu: 100m memory: 1Gi replicas: 1 # ...
この容認は、oc adm taint コマンドで作成されたテイントと一致します。この容認のある Pod は、node1 にスケジュールできます。
12.2.4. 容認を使用したログコレクター Pod 配置の制御 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、ログコレクター Pod には以下の 容認 設定があります。
apiVersion: v1
kind: Pod
metadata:
name: collector-example
namespace: openshift-logging
spec:
# ...
collection:
type: vector
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/disk-pressure
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/memory-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/pid-pressure
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/unschedulable
operator: Exists
# ...
前提条件
-
Red Hat OpenShift Logging Operator および OpenShift CLI (
oc)がインストールされている。
手順
以下のコマンドを使用して、ロギングコレクター Pod がロギングコレクター Pod をスケジュールする必要のあるノードにテイントを追加します。
$ oc adm taint nodes <node_name> <key>=<value>:<effect>コマンドの例
$ oc adm taint nodes node1 collector=node:NoExecuteこの例では、テイントをキー
collector、値node、およびテイント effectNoExecuteのあるnode1に配置します。NoExecuteテイント effect を使用する必要があります。NoExecuteは、テイントに一致する Pod のみをスケジュールし、一致しない既存の Pod を削除します。ClusterLoggingカスタムリソース (CR) のcollectionスタンザを編集して、ロギングコレクター Pod の容認を設定します。apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... collection: type: vector tolerations: - key: collector1 operator: Exists2 effect: NoExecute3 tolerationSeconds: 60004 resources: limits: memory: 2Gi requests: cpu: 100m memory: 1Gi # ...
この容認は、oc adm taint コマンドで作成されたテイントと一致します。この容認のある Pod は node1 にスケジュールできます。