4장. 노드 상태 점검을 사용하여 노드 수정

Node Health Check Operator를 사용하여 비정상적인 노드를 식별할 수 있습니다. Operator는 Self Node Remediation Operator를 사용하여 비정상 노드를 수정합니다.

4.1. Node Health Check Operator 정보

Node Health Check Operator는 클러스터의 노드 상태를 감지합니다. NodeHealthCheck 컨트롤러는 노드 상태를 확인하기 위해 기준 및 임계값 세트를 정의하는 NodeHealthCheck CR(사용자 정의 리소스)을 생성합니다.

Node Health Check Operator는 Self Node Remediation Operator도 기본 수정 공급자로 설치합니다.

Node Health Check Operator에서 비정상 노드를 감지하면 수정 공급자를 트리거하는 수정 CR을 생성합니다. 예를 들어 컨트롤러는 SelfNodeRemediation CR을 생성하여 Self Node Remediation Operator를 트리거하여 비정상 노드를 수정합니다.

NodeHealthCheck CR은 다음 YAML 파일과 유사합니다.

apiVersion: remediation.medik8s.io/v1alpha1
kind: NodeHealthCheck
metadata:
  name: nodehealthcheck-sample
spec:
  minHealthy: 51% 1
  pauseRequests: 2
    - <pause-test-cluster>
  remediationTemplate: 3
    apiVersion: self-node-remediation.medik8s.io/v1alpha1
    name: self-node-remediation-resource-deletion-template
    namespace: openshift-operators
    kind: SelfNodeRemediationTemplate
  selector: 4
    matchExpressions:
      - key: node-role.kubernetes.io/worker
        operator: Exists
  unhealthyConditions: 5
    - type: Ready
      status: "False"
      duration: 300s 6
    - type: Ready
      status: Unknown
      duration: 300s 7
1
수정 공급자가 대상 풀의 노드를 동시에 수정하는 데 필요한 정상 노드의 양(% 또는 수)을 지정합니다. 정상 노드 수가 minHealthy 로 설정된 제한과 같거나 초과하는 경우 수정이 수행됩니다. 기본값은 10.0.0.1입니다.
2
지속적인 수정을 계속 수행하는 동안 새 수정이 시작되지 않도록 합니다. 기본값은 비어 있습니다. 그러나 수정을 일시 중지하는 원인을 식별하는 문자열 배열을 입력할 수 있습니다. 예를 들면 pause-test-cluster 가 있습니다.
참고

업그레이드 프로세스 중에 클러스터의 노드를 일시적으로 사용할 수 없게 되고 비정상으로 식별될 수 있습니다. 작업자 노드의 경우 Operator에서 클러스터 업그레이드 여부를 감지하면 이러한 노드가 재부팅되지 않도록 새 비정상적인 노드 수정을 중지합니다.

3
수정 공급자의 수정 템플릿을 지정합니다. 예를 들어 Self Node Remediation Operator에서 다음을 수행합니다.
4
확인할 레이블 또는 표현식과 일치하는 선택기 를 지정합니다. 기본값은 비어 있으며 모든 노드를 선택합니다.
5
노드가 비정상으로 간주되는지 여부를 결정하는 조건 목록을 지정합니다.
6 7
노드 조건의 시간 초과 기간을 지정합니다. 시간 제한 기간 중 상태가 일치되면 노드가 수정됩니다. 시간 제한이 길어지면 비정상 노드의 워크로드에 대한 다운타임이 길어질 수 있습니다.

4.1.1. Node Health Check Operator 워크플로 이해

노드가 비정상으로 확인되면 Node Health Check Operator는 비정상인 다른 노드 수를 확인합니다. 정상 노드의 수가 NodeHealthCheck CR의 minHealthy 필드에 지정된 양을 초과하면 컨트롤러는 수정 공급자가 외부 수정 템플릿에 제공하는 세부 정보에서 수정 CR을 생성합니다. 수정 후 kubelet은 노드의 상태를 업데이트합니다.

노드가 정상 상태가 되면 컨트롤러에서 외부 수정 템플릿을 삭제합니다.

4.1.2. 노드 상태 점검에서 머신 상태 점검과 충돌을 방지하는 방법 정보

노드 상태 점검 및 머신 상태 점검이 모두 배포되면 노드 상태 점검에서 머신 상태 점검과 충돌하지 않도록 합니다.

참고

Red Hat OpenShift는 machine-api-termination-handler 를 기본 MachineHealthCheck 리소스로 배포합니다.

다음 목록에는 노드 상태 점검 및 머신 상태 점검이 배포될 때 시스템 동작이 요약되어 있습니다.

  • 기본 머신 상태 점검만 있는 경우 노드 상태 점검은 비정상 노드를 계속 식별합니다. 그러나 노드 상태 점검은 Terminating 상태의 비정상적인 노드를 무시합니다. 기본 머신 상태 점검은 Terminating 상태로 비정상 노드를 처리합니다.

    로그 메시지 예

    INFO MHCChecker	ignoring unhealthy Node, it is terminating and will be handled by MHC	{"NodeName": "node-1.example.com"}

  • 기본 머신 상태 점검이 수정되거나(예: unhealthyConditionsReady임) 또는 추가 머신 상태 점검이 생성되는 경우 노드 상태 점검이 비활성화됩니다.

    로그 메시지 예

    INFO controllers.NodeHealthCheck disabling NHC in order to avoid conflict with custom MHCs configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}

  • 다시 기본 머신 상태 점검만 있으면 노드 상태 점검이 다시 활성화됩니다.

    로그 메시지 예

    INFO controllers.NodeHealthCheck re-enabling NHC, no conflicting MHC configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}