5.4. 작업자 대기 시간 프로필을 사용하여 대기 시간이 많은 환경에서 클러스터 안정성 개선
클러스터 관리자가 플랫폼 확인을 위해 대기 시간 테스트를 수행한 경우 대기 시간이 긴 경우 안정성을 보장하기 위해 클러스터의 작동을 조정해야 할 수 있습니다. 클러스터 관리자는 파일에 기록된 하나의 매개변수만 변경하면 됩니다. 이 매개변수는 감독 프로세스가 클러스터의 상태를 읽고 상태를 해석하는 방법에 영향을 미치는 네 가지 매개변수를 제어합니다. 하나의 매개변수만 변경하면 지원 가능한 방식으로 클러스터 튜닝이 제공됩니다.
				Kubelet 프로세스는 클러스터 상태를 모니터링하기 위한 시작점을 제공합니다. Kubelet 은 OpenShift Container Platform 클러스터의 모든 노드에 대한 상태 값을 설정합니다. Kubernetes Controller Manager(kube 컨트롤러)는 기본적으로 10초마다 상태 값을 읽습니다. kube 컨트롤러에서 노드 상태 값을 읽을 수 없는 경우 구성된 기간이 지난 후 해당 노드와의 연결이 끊어집니다. 기본 동작은 다음과 같습니다.
			
- 
						컨트롤 플레인의 노드 컨트롤러는 노드 상태를 Unhealthy로 업데이트하고 노드Ready조건 'Unknown'을 표시합니다.
- 스케줄러는 이에 대한 응답으로 해당 노드에 대한 Pod 예약을 중지합니다.
- 
						Node Lifecycle Controller는 NoExecute효과가 있는node.kubernetes.io/unreachable테인트를 노드에 추가하고 기본적으로 5분 후에 제거하도록 노드에 Pod를 예약합니다.
				이 동작은 특히 네트워크 엣지에 노드가 있는 경우 네트워크에서 대기 시간이 쉬운 경우 문제가 발생할 수 있습니다. 경우에 따라 네트워크 대기 시간으로 인해 Kubernetes 컨트롤러 관리자에서 정상적인 노드에서 업데이트를 수신하지 못할 수 있습니다. Kubelet 은 노드가 정상이지만 노드에서 Pod를 제거합니다.
			
				이 문제를 방지하려면 작업자 대기 시간 프로필을 사용하여 Kubelet 및 Kubernetes 컨트롤러 관리자가 작업을 수행하기 전에 상태 업데이트를 기다리는 빈도를 조정할 수 있습니다. 이러한 조정은 컨트롤 플레인과 작업자 노드 간의 네트워크 대기 시간이 최적이 아닌 경우 클러스터가 올바르게 실행되도록 하는 데 도움이 됩니다.
			
이러한 작업자 대기 시간 프로필에는 대기 시간을 높이기 위해 클러스터의 응답을 제어하기 위해 신중하게 조정된 값으로 사전 정의된 세 가지 매개변수 세트가 포함되어 있습니다. 실험적으로 최상의 값을 수동으로 찾을 필요가 없습니다.
클러스터를 설치하거나 클러스터 네트워크에서 대기 시간을 늘리면 언제든지 작업자 대기 시간 프로필을 구성할 수 있습니다.
5.4.1. 작업자 대기 시간 프로필 이해
					작업자 대기 시간 프로필은 신중하게 조정된 매개변수의 네 가지 범주입니다. 이러한 값을 구현하는 4개의 매개변수는 node-status-update-frequency,node-monitor-grace-period,default-not-ready-toleration-seconds 및 default-unreachable-toleration-seconds 입니다. 이러한 매개변수는 수동 방법을 사용하여 최상의 값을 결정할 필요 없이 대기 시간 문제에 대한 클러스터의 대응을 제어할 수 있는 값을 사용할 수 있습니다.
				
이러한 매개변수를 수동으로 설정하는 것은 지원되지 않습니다. 잘못된 매개변수 설정은 클러스터 안정성에 부정적인 영향을 미칩니다.
모든 작업자 대기 시간 프로필은 다음 매개변수를 구성합니다.
- node-status-update-frequency
- kubelet이 API 서버에 노드 상태를 게시하는 빈도를 지정합니다.
- node-monitor-grace-period
- 
								노드를 비정상적으로 표시하고 node.kubernetes.io/not-ready또는node.kubernetes.io/unreachable테인트를 노드에 추가하기 전에 Kubernetes 컨트롤러 관리자가 kubelet에서 업데이트를 기다리는 시간(초)을 지정합니다.
- default-not-ready-toleration-seconds
- 해당 노드에서 Pod를 제거하기 전에 Kube API Server Operator가 기다리는 비정상적인 노드를 표시한 후 시간(초)을 지정합니다.
- default-unreachable-toleration-seconds
- 해당 노드에서 Pod를 제거하기 전에 Kube API Server Operator가 대기할 수 없는 노드를 표시한 후 시간(초)을 지정합니다.
다음 Operator는 작업자 대기 시간 프로필에 대한 변경 사항을 모니터링하고 적절하게 응답합니다.
- 
							MCO(Machine Config Operator)는 작업자 노드에서 node-status-update-frequency매개변수를 업데이트합니다.
- 
							Kubernetes 컨트롤러 관리자는 컨트롤 플레인 노드에서 node-monitor-grace-period매개변수를 업데이트합니다.
- 
							Kubernetes API Server Operator는 컨트롤 플레인 노드에서 default-not-ready-toleration-seconds및default-unreachable-toleration-seconds매개변수를 업데이트합니다.
기본 구성이 대부분의 경우 작동하지만 OpenShift Container Platform은 네트워크가 일반적인 것보다 대기 시간이 길어지는 상황에 대해 두 가지 다른 작업자 대기 시간 프로필을 제공합니다. 세 가지 작업자 대기 시간 프로필은 다음 섹션에 설명되어 있습니다.
- 기본 작업자 대기 시간 프로필
- Default프로필을 사용하면 각- Kubelet에서 10초마다 상태를 업데이트합니다(- node-status-update-frequency).- Kube Controller Manager는 5초마다- Kubelet의 상태를 확인합니다.- Kubernetes 컨트롤러 관리자는 - Kubelet비정상을 고려하기 전에- Kubelet의 상태 업데이트에 대해 40초(- node-monitor-grace-period)를 기다립니다. Kubernetes 컨트롤러 관리자에서 사용할 수 없는 상태가 없는 경우 노드를- node.kubernetes.io/not-ready또는- node.kubernetes.io/unreachable테인트로 표시하고 해당 노드에서 Pod를 제거합니다.- NoExecute테인트가 있는 노드에 Pod가 있는 경우- tolerationSeconds에 따라 Pod가 실행됩니다. 노드에 taint가 없는 경우 300초(max- -not-ready-toleration-seconds및- Kube API Server의- default-unreachable-toleration-seconds설정)가 제거됩니다.- Expand - 프로필 - Component - 매개변수 - 현재의 - Default - kubelet - node-status-update-frequency- 10s - kubelet Controller Manager - node-monitor-grace-period- 40s - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 300s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 300s 
- 중간 규모의 작업자 대기 시간 프로파일
- 네트워크 대기 시간이 평상시보다 약간 높은 경우 - MediumUpdateAverageReaction프로필을 사용합니다.- MediumUpdateAverageReaction프로필은 kubelet 업데이트 빈도를 20초로 줄이고 Kubernetes 컨트롤러 관리자가 해당 업데이트를 2분으로 기다리는 기간을 변경합니다. 해당 노드의 Pod 제거 기간은 60초로 단축됩니다. Pod에- tolerationSeconds매개변수가 있는 경우 제거는 해당 매개변수에서 지정한 기간 동안 대기합니다.- Kubernetes 컨트롤러 관리자는 노드의 비정상적인 것으로 간주하기 위해 2분 정도 기다립니다. 다른 분 후에 제거 프로세스가 시작됩니다. - Expand - 프로필 - Component - 매개변수 - 현재의 - MediumUpdateAverageReaction - kubelet - node-status-update-frequency- 20s - kubelet Controller Manager - node-monitor-grace-period- 2m - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 60s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 60s 
- 작업자 대기 시간이 짧은 프로필
- 네트워크 대기 시간이 매우 높은 경우 - LowUpdateSlowReaction프로필을 사용합니다.- LowUpdateSlowReaction프로필은 kubelet 업데이트 빈도를 1분으로 줄이고 Kubernetes 컨트롤러 관리자가 해당 업데이트를 5분으로 기다리는 기간을 변경합니다. 해당 노드의 Pod 제거 기간은 60초로 단축됩니다. Pod에- tolerationSeconds매개변수가 있는 경우 제거는 해당 매개변수에서 지정한 기간 동안 대기합니다.- Kubernetes 컨트롤러 관리자는 노드의 비정상적인 것으로 간주하기 위해 5분 정도 기다립니다. 다른 분 후에 제거 프로세스가 시작됩니다. - Expand - 프로필 - Component - 매개변수 - 현재의 - LowUpdateSlowReaction - kubelet - node-status-update-frequency- 1m - kubelet Controller Manager - node-monitor-grace-period- 5m - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 60s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 60s 
대기 시간 프로필은 사용자 정의 머신 구성 풀을 지원하지 않으며 기본 작업자 머신 구성 풀만 지원합니다.
5.4.2. 작업자 대기 시간 프로필 사용 및 변경
					네트워크 대기 시간을 처리하기 위해 작업자 대기 시간 프로필을 변경하려면 node.config 오브젝트를 편집하여 프로필 이름을 추가합니다. 대기 시간이 증가하거나 감소하면 언제든지 프로필을 변경할 수 있습니다.
				
					한 번에 하나의 작업자 대기 시간 프로필을 이동해야 합니다. 예를 들어 Default 프로필에서 LowUpdateSlowReaction 작업자 대기 시간 프로파일로 직접 이동할 수 없습니다. 기본 작업자 대기 시간 프로필에서 먼저 MediumUpdateAverageReaction 프로필로 이동한 다음 LowUpdateSlowReaction 으로 이동해야 합니다. 마찬가지로 Default 프로필로 돌아갈 때 먼저 low 프로필에서 medium 프로필로 이동한 다음 Default 로 이동해야 합니다.
				
OpenShift Container Platform 클러스터를 설치할 때 작업자 대기 시간 프로필을 구성할 수도 있습니다.
프로세스
기본 작업자 대기 시간 프로필에서 이동하려면 다음을 수행합니다.
- 중간 작업자 대기 시간 프로필로 이동합니다. - node.config오브젝트를 편집합니다.- oc edit nodes.config/cluster - $ oc edit nodes.config/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Add - spec.workerLatencyProfile: MediumUpdateAverageReaction:- node.config오브젝트의 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 중간 작업자 대기 시간을 지정합니다.
 - 변경 사항이 적용되므로 각 작업자 노드의 예약이 비활성화됩니다. 
 
- 선택 사항: 낮은 작업자 대기 시간 프로필로 이동합니다. - node.config오브젝트를 편집합니다.- oc edit nodes.config/cluster - $ oc edit nodes.config/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- spec.workerLatencyProfile값을- LowUpdateSlowReaction:으로 변경합니다.- node.config오브젝트의 예- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 낮은 작업자 대기 시간 정책 사용을 지정합니다.
 
 
변경 사항이 적용되므로 각 작업자 노드의 예약이 비활성화됩니다.
검증
- 모든 노드가 - Ready조건으로 돌아가면 다음 명령을 사용하여 Kubernetes 컨트롤러 관리자를 확인하여 적용되었는지 확인할 수 있습니다.- oc get KubeControllerManager -o yaml | grep -i workerlatency -A 5 -B 5 - $ oc get KubeControllerManager -o yaml | grep -i workerlatency -A 5 -B 5- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 프로필이 적용되고 활성화되도록 지정합니다.
 
					미디어 프로필을 기본값으로 변경하거나 기본값을 medium로 변경하려면 node.config 오브젝트를 편집하고 spec.workerLatencyProfile 매개변수를 적절한 값으로 설정합니다.