7.8. 작업자 대기 시간 프로필을 사용하여 대기 시간이 높은 환경에서 클러스터 안정성 개선

모든 노드는 기본적으로 10초마다 OpenShift Container Platform 클러스터의 Kubernetes Controller Manager Operator(kube 컨트롤러)로 하트비트를 보냅니다. 클러스터에서 노드의 하트비트를 수신하지 않는 경우 OpenShift Container Platform은 여러 기본 메커니즘을 사용하여 응답합니다.

예를 들어 구성된 기간이 지난 후 Kubernetes Controller Manager Operator에서 노드와 연결이 끊어지면 다음을 수행하십시오.

  1. 컨트롤 플레인의 노드 컨트롤러는 노드 상태를 Unhealthy 로 업데이트하고 노드 Ready 조건을 Unknown 으로 표시합니다.
  2. 스케줄러는 이에 대한 응답으로 해당 노드에 대한 Pod 예약을 중지합니다.
  3. 온프레미스 노드 컨트롤러는 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-secondsdefault-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-secondsdefault-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 클러스터를 설치할 때 작업자 대기 시간 프로필을 구성할 수도 있습니다.

절차

기본 작업자 대기 시간 프로필에서 이동하려면 다음을 수행합니다.

  1. 중간 작업자 대기 시간 프로파일로 이동합니다.

    1. node.config 오브젝트를 편집합니다.

      $ oc edit nodes.config/cluster
    2. 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
      프로필이 적용되고 활성 상태가 되도록 지정합니다.
  2. 선택 사항: 작업자 대기 시간이 짧은 프로필로 이동합니다.

    1. node.config 오브젝트를 편집합니다.

      $ oc edit nodes.config/cluster
    2. 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 매개변수를 적절한 값으로 설정합니다.