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에 대한 허용 오차를 구성하려면ClusterLoggingCR의 logstore 섹션을 편집합니다.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 명령으로 생성된 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를 배치합니다.NoExecutetaint 효과를 사용해야 합니다.NoExecute는 taint와 일치하는 Pod만 스케줄링하고 일치하지 않는 기존 Pod는 제거합니다.Kibana Pod에 대한 허용 오차를 구성하려면
ClusterLoggingCR의visualization섹션을 편집합니다.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 명령으로 생성된 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를 배치합니다.NoExecutetaint 효과를 사용해야 합니다.NoExecute는 taint와 일치하는 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 명령으로 생성된 taint와 일치합니다. 이 허용 오차가 있는 Pod를 node1 에 예약할 수 있습니다.