11.2. 노드를 유지보수 모드로 설정

웹 콘솔, CLI 또는 NodeMaintenance 사용자 정의 리소스에서 노드를 유지관리 모드에 배치합니다.

11.2.1. 웹 콘솔에서 노드를 유지보수 모드로 설정

컴퓨팅노드 목록의 각 노드에 있는 옵션 메뉴 kebab 를 사용하거나 노드 세부 정보 화면의 작업 컨트롤을 사용하여 노드를 유지보수 모드로 설정합니다.

절차

  1. OpenShift Virtualization 콘솔에서 컴퓨팅노드를 클릭합니다.
  2. 이 화면에서 노드를 유지보수 모드로 설정하면 한 화면에서 여러 노드에 대한 작업을 더 쉽게 수행할 수 있습니다. 노드 세부 정보 화면에서 노드를 유지보수 모드로 설정하면 선택한 노드에 대한 포괄적인 세부 정보를 볼 수 있습니다.

    • 노드 끝에 있는 옵션 메뉴 kebab 를 클릭하고 유지보수 시작을 선택합니다.
    • 노드 이름을 클릭하여 노드 세부 정보 화면을 열고 작업유지보수 시작을 클릭합니다.
  3. 확인 창에서 유지보수 시작을 클릭합니다.

노드는 LiveMigration 제거 전략이 있는 가상 머신 인스턴스를 실시간 마이그레이션하고 더 이상 노드를 스케줄링할 수 없습니다. 노드의 기타 모든 Pod 및 가상 머신이 삭제되고 다른 노드에서 다시 생성됩니다.

11.2.2. CLI에서 노드를 유지보수 모드로 설정

oc adm drain 명령을 사용하여 노드에서 Pod를 제거하거나 삭제하여 노드를 유지보수 모드로 설정합니다.

절차

  1. 노드를 예약 불가능으로 표시합니다. 노드 상태가 NotReady, SchedulingDisabled로 변경됩니다.

    $ oc adm cordon <node1>
  2. 유지보수를 위해 노드를 드레이닝합니다. 노드는 LiveMigratable 조건이 True로 설정되고 spec:evictionStrategy 필드가 LiveMigrate로 설정된 가상 머신 인스턴스를 실시간으로 마이그레이션합니다. 노드의 기타 모든 Pod 및 가상 머신이 삭제되고 다른 노드에서 다시 생성됩니다.

    $ oc adm drain <node1> --delete-emptydir-data --ignore-daemonsets=true --force
    • --delete-emptydir-data 플래그는 emptyDir 볼륨을 사용하는 노드의 모든 가상 머신 인스턴스를 제거합니다. 이러한 볼륨의 데이터는 임시이며 종료 후 삭제될 수 있습니다.
    • --ignore-daemonsets=true 플래그를 사용하면 데몬 세트가 무시되고 Pod 제거를 성공적으로 수행할 수 있습니다.
    • --force 플래그는 복제본 세트 또는 데몬 세트 컨트롤러에서 관리하지 않는 Pod를 삭제합니다.

11.2.3. NodeMaintenance 사용자 정의 리소스를 사용하여 노드를 유지관리 모드로 설정

NodeMaintenance CR(사용자 정의 리소스)을 사용하여 노드를 유지관리 모드에 배치할 수 있습니다. NodeMaintenance CR을 적용하면 허용되는 모든 Pod가 제거되고 노드가 종료됩니다. 제거된 Pod는 클러스터의 다른 노드로 이동하기 위해 대기열에 있습니다.

사전 요구 사항

  • OpenShift Container Platform CLI oc를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.

절차

  1. 다음 노드 유지관리 CR을 생성하고 파일을 nodemaintenance-cr.yaml로 저장합니다.

    apiVersion: nodemaintenance.kubevirt.io/v1beta1
    kind: NodeMaintenance
    metadata:
      name: maintenance-example  1
    spec:
      nodeName: node-1.example.com 2
      reason: "Node maintenance" 3
    1
    노드 유지관리 CR 이름
    2
    유지관리 모드에 배치할 노드의 이름
    3
    유지 관리 이유에 대한 일반 텍스트 설명
  2. 다음 명령을 실행하여 노드 유지관리 일정을 적용합니다.

    $ oc apply -f nodemaintenance-cr.yaml
  3. 다음 명령을 실행하여 유지관리 작업의 진행 상황을 확인하고 <node-name>을 노드 이름으로 교체합니다.

    $ oc describe node <node-name>

    출력 예

    Events:
      Type     Reason                     Age                   From     Message
      ----     ------                     ----                  ----     -------
      Normal   NodeNotSchedulable         61m                   kubelet  Node node-1.example.com status is now: NodeNotSchedulable

11.2.3.1. 현재 NodeMaintenance CR 작업의 상태 확인

현재 NodeMaintenance CR 작업의 상태를 확인할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform CLI oc를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  • 다음 명령을 실행하여 현재 노드 유지관리 작업의 상태를 확인합니다.

    $ oc get NodeMaintenance -o yaml

    출력 예

    apiVersion: v1
    items:
    - apiVersion: nodemaintenance.kubevirt.io/v1beta1
      kind: NodeMaintenance
      metadata:
    ...
      spec:
        nodeName: node-1.example.com
        reason: Node maintenance
      status:
        evictionPods: 3   1
        pendingPods:
        - pod-example-workload-0
        - httpd
        - httpd-manual
        phase: Running
        lastError: "Last failure message" 2
        totalpods: 5
    ...

    1
    evictionPods는 제거로 예약된 Pod 수입니다.
    2
    lastError는 최신 제거 오류(있는 경우)를 기록합니다.