7.8. 작업자 대기 시간 프로필을 사용하여 대기 시간이 높은 환경에서 클러스터 안정성 개선
모든 노드는 기본적으로 10초마다 OpenShift Container Platform 클러스터의 Kubernetes Controller Manager Operator(kube 컨트롤러)로 하트비트를 보냅니다. 클러스터에서 노드의 하트비트를 수신하지 않는 경우 OpenShift Container Platform은 여러 기본 메커니즘을 사용하여 응답합니다.
예를 들어 구성된 기간이 지난 후 Kubernetes Controller Manager Operator에서 노드와 연결이 끊어지면 다음을 수행하십시오.
-
컨트롤 플레인의 노드 컨트롤러는 노드 상태를
Unhealthy
로 업데이트하고 노드Ready
조건을Unknown
으로 표시합니다. - 스케줄러는 이에 대한 응답으로 해당 노드에 대한 Pod 예약을 중지합니다.
-
온프레미스 노드 컨트롤러는
NoExecute
효과가 있는node.kubernetes.io/unreachable
테인트를 노드에 추가하고 기본적으로 5분 후에 제거하도록 노드에 모든 Pod를 예약합니다.
이 동작은 특히 네트워크 엣지에 노드가 있는 경우 네트워크가 대기 시간 문제가 발생하는 경우 문제가 발생할 수 있습니다. 경우에 따라 Kubernetes Controller Manager Operator가 네트워크 대기 시간으로 인해 정상 노드에서 업데이트를 수신하지 못할 수 있습니다. 그런 다음 Kubernetes Controller Manager Operator는 노드가 정상인 경우에도 노드에서 Pod를 제거합니다. 이 문제를 방지하려면 작업자 대기 시간 프로필을 사용하여 kubelet 및 Kubernetes Controller Manager Operator가 작업을 수행하기 전에 상태 업데이트를 기다리는 빈도를 조정할 수 있습니다. 이러한 조정을 통해 컨트롤 플레인과 작업자 노드 간의 네트워크 대기 시간이 최적이 아닌 경우 클러스터가 제대로 실행됩니다.
이러한 작업자 대기 시간 프로필은 최상의 값을 수동으로 결정할 필요 없이 대기 시간 문제로 클러스터의 반응을 제어할 수 있도록 신중하게 조정된 값으로 미리 정의된 세 가지 매개변수 세트입니다.
클러스터를 설치할 때 또는 언제든지 클러스터 네트워크에서 대기 시간을 늘릴 때 작업자 대기 시간 프로필을 구성할 수 있습니다.
7.8.1. 작업자 대기 시간 프로필 이해
작업자 대기 시간 프로필은 node-status-update-frequency
,node-monitor-grace-period
,default-not-ready-toleration-seconds
및 default-unreachable-toleration-seconds
매개변수에 대해 신중하게 조정된 값 세트입니다. 이러한 매개변수를 사용하면 최적의 값을 수동으로 확인할 필요 없이 대기 시간 문제에 대한 클러스터의 반응을 제어할 수 있습니다.
모든 작업자 대기 시간 프로필은 다음 매개변수를 구성합니다.
-
node-status-update-frequency
. kubelet에서 Kubernetes Controller Manager Operator로 상태를 업데이트하는 시간(초)을 지정합니다. -
node-monitor-grace-period
. Kubernetes Controller Manager Operator가 노드의 비정상을 표시하고node.kubernetes.io/not-ready
또는node.kubernetes.io/unreachable
테인트를 추가하기 전에 Kubernetes Controller Manager Operator가 kubelet의 업데이트를 대기하는 시간(초)을 지정합니다. -
default-not-ready-toleration-seconds
. Kubernetes Controller Manager Operator가 해당 노드에서 Pod를 제거하기 전에 대기하는 노드를 비정상으로 표시한 후 시간(초)을 지정합니다. -
default-unreachable-toleration-seconds
. Kubernetes Controller Manager Operator가 해당 노드에서 Pod를 제거하기 전에 대기하는 노드에 연결할 수 없는 노드를 표시한 후 시간(초)을 지정합니다.
node-monitor-grace-period
매개변수를 수동으로 수정할 수 없습니다.
다음 Operator는 작업자 대기 시간 프로필에 대한 변경 사항을 모니터링하고 그에 따라 응답합니다.
-
MCO(Machine Config Operator)는 작업자 노드에서
node-status-update-frequency
매개변수를 업데이트합니다. -
Kubernetes Controller Manager Operator는 컨트롤 플레인 노드에서
node-monitor-grace-period
매개변수를 업데이트합니다. -
Kubernetes API Server Operator는 컨트롤 계획 노드에서
default-not-ready-toleration-seconds
및default-unreachable-toleration-seconds
매개변수를 업데이트합니다.
기본 구성은 대부분의 경우 작동하지만 OpenShift Container Platform에서는 네트워크에서 평소보다 대기 시간이 더 높은 상황에 대해 두 개의 다른 작업자 대기 시간 프로필을 제공합니다. 세 개의 작업자 대기 시간 프로필은 다음 섹션에 설명되어 있습니다.
- 기본 작업자 대기 시간 프로필
Default
프로필을 사용하여 각 kubelet은 10초마다 Kubelet Controller Manager Operator(kube 컨트롤러)에 노드 상태를 보고합니다. Kubelet Controller Manager Operator는 kubelet에서 5초마다 상태를 확인합니다.Kubernetes Controller Manager Operator는 해당 노드의 비정상을 고려하기 전에 상태 업데이트 40초를 기다립니다. 노드를
node.kubernetes.io/not-ready
또는node.kubernetes.io/unreachable
테인트로 표시하고 해당 노드에서 Pod를 제거합니다. 해당 노드의 Pod에NoExecute
허용 오차가 있으면 Pod가 300초 후에 제거됩니다. Pod에tolerationSeconds
매개변수가 있는 경우 제거는 해당 매개변수로 지정된 기간 동안 기다립니다.Profile 구성 요소 매개변수 값 기본값
kubelet
node-status-update-frequency
10s
kubelet 컨트롤러 관리자
node-monitor-grace-period
40s
Kubernetes API Server
default-not-ready-toleration-seconds
300s
Kubernetes API Server
default-unreachable-toleration-seconds
300s
- 중간 작업자 대기 시간 프로파일
네트워크 대기 시간이 평소보다 약간 높은 경우
MediumUpdateAverageReaction
프로필을 사용하십시오.MediumUpdateAverageReaction
프로파일은 kubelet 업데이트 빈도를 20초로 줄이고 Kubernetes Controller Manager Operator가 해당 업데이트를 2분으로 대기하는 기간을 변경합니다. 해당 노드의 Pod 제거 기간이 60초로 단축됩니다. Pod에tolerationSeconds
매개변수가 있는 경우 제거는 해당 매개변수로 지정된 기간 동안 기다립니다.Kubernetes Controller Manager Operator는 노드의 비정상을 고려하기 위해 2분 정도 기다립니다. 또 다른 순간에 제거 프로세스가 시작됩니다.
Profile 구성 요소 매개변수 값 MediumUpdateAverageReaction
kubelet
node-status-update-frequency
20s
kubelet 컨트롤러 관리자
node-monitor-grace-period
2m
Kubernetes API Server
default-not-ready-toleration-seconds
60s
Kubernetes API Server
default-unreachable-toleration-seconds
60s
- 낮은 작업자 대기 시간 프로파일
네트워크 대기 시간이 매우 높은 경우
LowUpdateSlowReaction
프로필을 사용합니다.LowUpdateSlowReaction
프로필은 kubelet 업데이트 빈도를 1분으로 줄이고 Kubernetes 컨트롤러 관리자 Operator가 해당 업데이트를 5분으로 대기하는 기간을 변경합니다. 해당 노드의 Pod 제거 기간이 60초로 단축됩니다. Pod에tolerationSeconds
매개변수가 있는 경우 제거는 해당 매개변수로 지정된 기간 동안 기다립니다.Kubernetes Controller Manager Operator는 노드의 비정상을 고려하기 위해 5분 정도 기다립니다. 또 다른 순간에 제거 프로세스가 시작됩니다.
Profile 구성 요소 매개변수 값 LowUpdateSlowReaction
kubelet
node-status-update-frequency
1m
kubelet 컨트롤러 관리자
node-monitor-grace-period
5m
Kubernetes API Server
default-not-ready-toleration-seconds
60s
Kubernetes API Server
default-unreachable-toleration-seconds
60s
7.8.2. 작업자 대기 시간 프로필 사용
네트워크 대기 시간을 처리하기 위해 작업자 대기 시간 프로필을 구현하려면 node.config
오브젝트를 편집하여 프로필 이름을 추가합니다. 대기 시간이 증가하거나 감소하면 언제든지 프로필을 변경할 수 있습니다.
한 번에 하나의 작업자 대기 시간 프로필을 이동해야 합니다. 예를 들어 기본
프로필에서 LowUpdateSlowReaction
작업자 대기 시간 프로필로 직접 이동할 수 없습니다. 먼저 기본
작업자 대기 시간 프로필에서 MediumUpdateAverageReaction
프로필로 이동하고 먼저 LowUpdateSlowReaction
으로 이동해야 합니다. 마찬가지로 기본 프로필로 돌아갈 때 먼저 low 프로필에서 중간 프로필로 이동한 다음 기본값으로 이동해야 합니다.
OpenShift Container Platform 클러스터를 설치할 때 작업자 대기 시간 프로필을 구성할 수도 있습니다.
절차
기본 작업자 대기 시간 프로필에서 이동하려면 다음을 수행합니다.
중간 작업자 대기 시간 프로파일로 이동합니다.
node.config
오브젝트를 편집합니다.$ oc edit nodes.config/cluster
spec.workerLatencyProfile 추가: MediumUpdateAverageReaction
:node.config
오브젝트의 예apiVersion: config.openshift.io/v1 kind: Node metadata: annotations: include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" include.release.openshift.io/single-node-developer: "true" release.openshift.io/create-only: "true" creationTimestamp: "2022-07-08T16:02:51Z" generation: 1 name: cluster ownerReferences: - apiVersion: config.openshift.io/v1 kind: ClusterVersion name: version uid: 36282574-bf9f-409e-a6cd-3032939293eb resourceVersion: "1865" uid: 0c0f7a4c-4307-4187-b591-6155695ac85b spec: workerLatencyProfile: MediumUpdateAverageReaction 1 ...
- 1
- 중간 작업자 대기 시간 정책을 지정합니다.
변경 사항이 적용되므로 각 작업자 노드에서 예약이 비활성화됩니다.
모든 노드가
Ready
상태로 돌아 오면 다음 명령을 사용하여 Kubernetes 컨트롤러 관리자를 확인하여 적용되었는지 확인할 수 있습니다.$ oc get KubeControllerManager -o yaml | grep -i workerlatency -A 5 -B 5
출력 예
... - lastTransitionTime: "2022-07-11T19:47:10Z" reason: ProfileUpdated status: "False" type: WorkerLatencyProfileProgressing - lastTransitionTime: "2022-07-11T19:47:10Z" 1 message: all static pod revision(s) have updated latency profile reason: ProfileUpdated status: "True" type: WorkerLatencyProfileComplete - lastTransitionTime: "2022-07-11T19:20:11Z" reason: AsExpected status: "False" type: WorkerLatencyProfileDegraded - lastTransitionTime: "2022-07-11T19:20:36Z" status: "False" ...
- 1
- 프로필이 적용되고 활성 상태가 되도록 지정합니다.
선택 사항: 작업자 대기 시간이 짧은 프로필로 이동합니다.
node.config
오브젝트를 편집합니다.$ oc edit nodes.config/cluster
spec.workerLatencyProfile
값을LowUpdateSlowReaction
으로 변경합니다.node.config
오브젝트의 예apiVersion: config.openshift.io/v1 kind: Node metadata: annotations: include.release.openshift.io/ibm-cloud-managed: "true" include.release.openshift.io/self-managed-high-availability: "true" include.release.openshift.io/single-node-developer: "true" release.openshift.io/create-only: "true" creationTimestamp: "2022-07-08T16:02:51Z" generation: 1 name: cluster ownerReferences: - apiVersion: config.openshift.io/v1 kind: ClusterVersion name: version uid: 36282574-bf9f-409e-a6cd-3032939293eb resourceVersion: "1865" uid: 0c0f7a4c-4307-4187-b591-6155695ac85b spec: workerLatencyProfile: LowUpdateSlowReaction 1 ...
- 1
- 낮은 작업자 대기 시간 정책을 사용하도록 지정합니다.
변경 사항이 적용되므로 각 작업자 노드에서 예약이 비활성화됩니다.
낮은 프로필을 medium으로 변경하거나 매체를 낮게 변경하려면 node.config
오브젝트를 편집하고 spec.workerLatencyProfile
매개변수를 적절한 값으로 설정합니다.