12.2. 테인트 및 허용 오차를 사용하여 로깅 Pod 배치 제어
테인트 및 허용 오차를 사용하면 노드에서 예약해야 하는 (또는 예약해서는 안 되는) Pod를 제어할 수 있습니다.
12.2.1. 테인트(Taints) 및 톨러레이션(Tolerations)의 이해
테인트를 사용하면 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로 구성되어 있습니다.
매개변수 | 설명 | ||||||
---|---|---|---|---|---|---|---|
|
| ||||||
|
| ||||||
| 다음 명령 중 하나를 실행합니다.
| ||||||
|
|
컨트롤 플레인 노드에
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 pressure가 있습니다. 이는 노드 조건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
이 예에서는 키
lokistack
, 값node
및 taint 효과NoExecute
가 있는node1
에 taint를 배치합니다.NoExecute
효과가 있는 노드는 taint와 일치하는 Pod만 스케줄링하고 일치하지 않는 기존 Pod는 제거합니다.로그 저장소
Pod에 대한 허용 오차를 구성하려면ClusterLogging
CR의 logstore 섹션을 편집합니다.ClusterLogging
CR의 예apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... logStore: type: lokistack elasticsearch: nodeCount: 1 tolerations: - key: lokistack 1 operator: Exists 2 effect: NoExecute 3 tolerationSeconds: 6000 4 # ...
이 허용 오차는 oc adm taint
명령으로 생성된 taint와 일치합니다. 이 허용 오차가 있는 Pod를 node1
에 예약할 수 있습니다.
12.2.3. 허용 오차를 사용하여 로그 시각화 프로그램 Pod 배치 제어
다른 Pod에 없는 특정 키/값 쌍을 사용하여 Kibana Pod만 지정된 노드에서 실행되도록 할 수 있습니다.
사전 요구 사항
-
Red Hat OpenShift Logging Operator, OpenShift Elasticsearch Operator 및 OpenShift CLI(
oc
)를 설치했습니다.
절차
다음 명령을 실행하여 로그 시각화 프로그램 Pod를 예약하려는 노드에 테인트를 추가합니다.
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
명령 예
$ oc adm taint nodes node1 kibana=node:NoExecute
이 예에서는 키
kibana
, 값node
및 taint 효과NoExecute
로node1
에 taint를 배치합니다.NoExecute
taint 효과를 사용해야 합니다.NoExecute
는 taint와 일치하는 Pod만 스케줄링하고 일치하지 않는 기존 Pod는 제거합니다.Kibana Pod에 대한 허용 오차를 구성하려면
ClusterLogging
CR의visualization
섹션을 편집합니다.apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... visualization: type: kibana kibana: tolerations: - key: kibana 1 operator: Exists 2 effect: NoExecute 3 tolerationSeconds: 6000 4 resources: limits: memory: 2Gi requests: cpu: 100m memory: 1Gi replicas: 1 # ...
이 허용 오차는 oc adm taint
명령으로 생성된 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
및 taint 효과NoExecute
로node1
에 taint를 배치합니다.NoExecute
taint 효과를 사용해야 합니다.NoExecute
는 taint와 일치하는 Pod만 스케줄링하고 일치하지 않는 기존 Pod는 제거합니다.ClusterLogging
사용자 정의 리소스(CR)의collection
스탠자를 편집하여 로깅 수집기 Pod에 대한 허용 오차를 구성합니다.apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: # ... spec: # ... collection: type: vector tolerations: - key: collector 1 operator: Exists 2 effect: NoExecute 3 tolerationSeconds: 6000 4 resources: limits: memory: 2Gi requests: cpu: 100m memory: 1Gi # ...
이 허용 오차는 oc adm taint
명령으로 생성된 taint와 일치합니다. 이 허용 오차가 있는 Pod를 node1
에 예약할 수 있습니다.