노드를 유지보수 모드로 전환

노드를 복구 또는 유지보수해야 하는 경우 먼저 노드를 유지보수 모드로 설정해야 합니다. 노드를 유지보수 모드로 전환하면 포드/워크로드가 안전하게 드레이닝되고 포드 예약에서 노드가 제외됩니다. 유지보수 모드에서는 포드 트래픽을 방해할 위험 없이 노드에서 작업할 수 있습니다.

작동 방식

베어메탈용 GKE는 노드를 유지보수 모드로 설정하는 방법을 제공합니다. 이 접근 방식을 사용하면 다른 클러스터 구성요소는 노드가 유지보수 모드임을 올바르게 알 수 있습니다. 노드를 유지보수 모드로 설정하면 노드에 추가 포드를 예약할 수 없으며 기존 포드가 중지됩니다.

유지보수 모드를 사용하는 대신 특정 노드에서 kubectl cordonkubectl drain과 같은 Kubernetes 명령어를 수동으로 사용할 수 있습니다. 베어메탈 GKE 버전 1.12.0(anthosBareMetalVersion: 1.12.0) 이하에서 Anthos 클러스터를 실행하는 경우 유지보수 모드 절차를 사용하지 않으면 차단되지 않은 노드 관련 알려진 문제를 참조하세요.

유지보수 모드 프로세스를 사용하면 베어메탈용 GKE는 다음을 수행합니다.

  • 지정된 노드에 노드 taint가 추가되어 노드에서 포드를 예약하거나 실행할 수 없음을 나타냅니다.

  • 포드가 중지될 때까지 노드가 중단되지 않도록 제한 시간 20분이 적용됩니다. 모든 taint를 허용하도록 구성되었거나 최종화가 있는 포드는 중지되지 않을 수 있습니다. 베어메탈용 GKE가 모든 포드를 중지하려고 시도하지만 제한 시간이 초과되면 노드가 유지보수 모드로 전환됩니다. 이 제한 시간은 실행 중인 포드에서 업그레이드를 차단하지 못하게 합니다.

노드를 유지보수 모드로 전환

클러스터 구성 파일에서 maintenanceBlocks 아래에 선택한 노드에 대해 IP 범위를 지정하여 유지보수 모드로 설정할 노드를 선택합니다. 선택한 노드가 준비 상태이며 클러스터에서 작동해야 합니다.

노드를 유지보수 모드로 설정하려면 다음 안내를 따르세요.

  1. 클러스터 구성 파일을 수정하여 유지보수 모드로 설정할 노드를 선택합니다.

    원하는 편집기로 구성 파일을 수정하거나 다음 명령어를 실행하여 클러스터 커스텀 리소스를 직접 수정할 수 있습니다.

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

    다음을 바꿉니다.

    • CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다.
    • CLUSTER_NAME: 클러스터의 이름입니다.
  2. maintenanceBlocks 섹션을 클러스터 구성 파일에 추가하여 유지보수 모드로 설정할 노드에 대해 단일 IP 주소 또는 주소 범위를 지정합니다.

    다음 샘플은 IP 주소 범위를 지정하여 여러 노드를 선택하는 방법을 보여줍니다.

    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    
  3. 업데이트된 클러스터 구성을 저장하고 적용합니다.

    베어메탈용 GKE가 노드를 유지보수 모드로 전환합니다.

  4. 다음 명령어를 실행하여 클러스터에서 노드 상태를 가져옵니다.

    kubectl get nodes --kubeconfig=KUBECONFIG

    응답은 다음과 같이 표시됩니다.

    NAME                       STATUS   ROLES           AGE     VERSION
    user-anthos-baremetal-01   Ready    control-plane   2d22h   v1.27.4-gke.1600
    user-anthos-baremetal-04   Ready    worker          2d22h   v1.27.4-gke.1600
    user-anthos-baremetal-05   Ready    worker          2d22h   v1.27.4-gke.1600
    user-anthos-baremetal-06   Ready    worker          2d22h   v1.27.4-gke.1600
    

    노드는 여전히 예약할 수 있지만 taint는 적절한 내결함성이 없는 모든 포드가 노드에 예약되지 않도록 합니다.

  5. 다음 명령어를 실행하여 유지보수 모드에서 노드 수를 가져옵니다.

    kubectl get nodepools --kubeconfig ADMIN_KUBECONFIG
    

    응답은 다음 예시와 같이 표시됩니다.

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    이 샘플에서 이 UNDERMAINTENANCE 열은 한 노드가 유지보수 모드에 있음을 보여줍니다.

    베어메탈용 GKE는 또한 유지보수 모드로 설정될 때 노드에 다음 taint를 추가합니다.

    • baremetal.cluster.gke.io/maintenance:NoExecute
    • baremetal.cluster.gke.io/maintenance:NoSchedule

결제 및 유지보수 모드

베어메탈용 GKE의 청구는 워크로드를 실행할 수 있는 노드에 대해 클러스터에 있는 vCPU 수를 기준으로 청구됩니다. 노드를 유지보수 모드로 설정하면 NoExecuteNoSchedule taint가 노드에 추가되지만 결제를 사용 중지하지는 않습니다. 노드를 유지보수 모드로 전환한 후 노드(kubectl cordon NODE_NAME)를 차단하여 예약 불가능으로 표시하세요. 노드가 예약할 수 없는 것으로 표시되면 노드 및 연결된 vCPU가 청구에서 제외됩니다.

가격 책정 페이지에 설명된 대로 kubectl을 사용하여 각 사용자 클러스터의 vCPU 용량(Anthos 청구에 사용됨)을 확인할 수 있습니다. 이 명령어는 노드의 예약 가능 여부를 고려하지 않고 노드당 vCPU 수만 제공합니다.

사용자 클러스터의 노드당 vCPU 수를 확인하려면 다음 안내를 따르세요.

kubectl get nodes \
    --kubeconfig USER_KUBECONFIG \
    -o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"} \
    {.status.capacity.cpu}{\"\n\"}{end}"

USER_KUBECONFIG를 사용자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

유지보수 모드에서 노드 삭제

유지보수 모드에서 노드를 삭제하려면 다음을 안내를 따르세요.

  1. 클러스터 구성 파일을 수정하여 유지보수 모드에서 삭제하려는 노드를 지웁니다.

    원하는 편집기로 구성 파일을 수정하거나 다음 명령어를 실행하여 클러스터 커스텀 리소스를 직접 수정할 수 있습니다.

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME

    다음을 바꿉니다.

    • CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다.
    • CLUSTER_NAME: 클러스터의 이름입니다.
  2. IP 주소를 수정하여 유지보수 모드에서 특정 노드를 삭제하거나 maintenanceBlocks 섹션을 삭제하여 유지보수 모드에서 모든 노드를 삭제합니다.

  3. 업데이트된 클러스터 구성을 저장하고 적용합니다.

  4. kubectl 명령어를 사용하여 노드 상태를 확인합니다.