노드 재설정 및 클러스터 삭제

베어메탈용 GKE 클러스터를 설치하는 동안에는 바이너리 및 systemd 서비스가 해당 클러스터를 호스팅하는 노드에 설치되고 서비스가 노드의 포트에서 리슨하기 시작합니다.

하지만 클러스터 설치에 실패하면 이러한 모든 바이너리와 서비스를 삭제해야 합니다. 즉, 클러스터 설치를 다시 시도하기 위해서는 먼저 노드를 재설정하거나 완전히 삭제해야 합니다. 이런 방식으로 노드를 재설정되지 않으면 다음에 클러스터 설치하려 할 때 실패하게 됩니다.

이 페이지에서는 특정 노드에 대하여 이러한 제거 작업을 수행하고 클러스터를 삭제하는 방법을 설명합니다.

삭제 방법 선택

클러스터를 삭제하는 데 사용하는 방법은 다음에 따라 다릅니다.

  • 클러스터 유형
  • 특정 노드만 삭제하고 전체 클러스터는 삭제하지 않으려는 경우
  • 클러스터가 생성된 방법

베어메탈용 GKE는 다음 삭제 방법을 제공합니다.

  • Google Cloud 콘솔 또는 Google Cloud CLI:

    • 콘솔이나 gcloud CLI를 사용하여 GKE On-Prem API에서 관리하는 사용자 클러스터를 삭제합니다. 다음 중 하나가 참인 경우 GKE On-Prem API에서 사용자 클러스터를 관리합니다.

      • 클러스터가 Google Cloud 콘솔에서 또는 gcloud CLI를 통해 생성되었고 GKE On-Prem API에서 클러스터를 관리하도록 자동으로 구성됨

      • 클러스터는 bmctl을 통해 생성되었지만 GKE On-Prem API에서 관리하도록 구성

  • bmctl:

    • bmctl reset nodes 명령어를 사용하여 특정 노드를 재설정합니다.
    • bmctl reset을 사용하여 다음 클러스터 유형을 삭제합니다.

      • 관리자, 하이브리드, 독립형 클러스터(자체 관리형 클러스터라고 함). 여기에는 GKE On-Prem API에서 관리하는 관리자 클러스터가 포함됩니다.
      • GKE On-Prem API에서 관리하지 않는 사용자 클러스터

    bmctl를 사용하여 노드를 재설정하거나 클러스터를 삭제하는 경우 이 명령어는 클러스터 구성 파일이 현재의 작업 디렉터리에 있다고 가정합니다. 기본적으로 경로는 다음과 같습니다.

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

    --workspace-dir 플래그를 사용하여 클러스터 만들기 중에 다른 디렉터리를 지정한 경우 클러스터를 재설정할 때도 이 플래그를 사용해서 작업 디렉터리를 지정해야 합니다.

  • kubectl:

    • kubectl delete cluster를 사용하여 GKE On-Prem API 클러스터에서 관리하지 않는 사용자 클러스터만 삭제합니다. 다른 클러스터 유형에는 이 명령어를 실행하지 마세요.
    • 참고로 kubectl delete cluster 명령어를 사용하는 경우에는 클러스터를 삭제한 후 클러스터가 있는 네임스페이스도 삭제해야 합니다.

클러스터를 삭제한 후에는 필요한 구성을 변경한 후 다시 설치할 수 있습니다.

자체 관리형 클러스터 삭제

관리자, 하이브리드, 독립형 클러스터를 삭제하려면 다음 명령어를 실행합니다.

bmctl reset --cluster CLUSTER_NAME

명령어에서 CLUSTER_NAME을 재설정하려는 클러스터의 이름으로 바꿉니다.

bmctl cluster reset 명령어의 결과는 이 샘플과 비슷하게 표시됩니다.

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

이 명령어는 클러스터를 삭제할 뿐 아니라 Fleet에서 클러스터 멤버십을 삭제합니다.

GKE On-Prem API에서 관리하는 관리자 클러스터의 경우 Google Cloud에서 API 리소스도 삭제해야 합니다. 그렇지 않으면 Google Cloud 콘솔의 GKE 클러스터 페이지에 클러스터가 표시됩니다. 다음 명령어를 사용하여 관리자 클러스터의 GKE On-Prem API 리소스를 삭제합니다.

gcloud container bare-metal admin-clusters unenroll CLUSTER_NAME \
    --project=FLEET_HOST_PROJECT_ID \
    --location=REGION \
    --ignore-errors

다음을 바꿉니다.

  • FLEET_HOST_PROJECT_ID: 관리자 클러스터가 속한 Fleet의 프로젝트 ID

  • REGION: GKE On-Prem API에서 클러스터 메타데이터를 저장하는 Google Cloud 리전

--ignore-errors 플래그는 등록 취소 중에 오류가 발생하더라도 베어메탈 관리자 클러스터 리소스 등록이 해제되도록 합니다.

클러스터 삭제가 완료되면 새 클러스터를 만들 수 있습니다. 자세한 내용은 클러스터 만들기 개요를 참조하세요.

사용자 클러스터 삭제

GKE On-Prem API에서 사용자 클러스터를 관리하는 경우 콘솔이나 gcloud CLI를 사용하여 클러스터를 삭제합니다. 그렇지 않으면 bmctl 또는 kubectl을 사용하여 클러스터를 삭제합니다.

bmctl

bmctl을 사용하여 bmctl 또는 kubectl로 생성되고 GKE On-Prem API에 등록되지 않은 사용자 클러스터를 삭제할 수 있습니다.

다음 명령어를 실행하여 bmctl로 사용자 클러스터를 삭제합니다.

bmctl reset --cluster USER_CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

명령어에서 다음 항목을 사용자 환경에 해당하는 정보로 바꿉니다.

  • USER_CLUSTER_NAME: 삭제할 사용자 클러스터의 이름입니다.

  • ADMIN_KUBECONFIG_PATH: 연결된 관리자 클러스터의 kubeconfig 파일 경로입니다. bmctl--kubeconfig--admin-kubeconfig 플래그의 별칭으로 사용하도록 지원합니다.

bmctl cluster reset 명령어의 결과는 이 샘플과 비슷하게 표시됩니다.

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

kubectl

kubectl을 사용하여 bmctl 또는 kubectl로 생성되고 GKE On-Prem API에 등록되지 않은 사용자 클러스터를 삭제할 수 있습니다. kubectl을 사용하여 사용자 클러스터를 삭제하려면 먼저 클러스터 객체를 삭제한 후 해당 네임스페이스를 삭제해야 합니다. 이렇게 하지 않으면 머신 재설정 작업을 만들 수 없으며 삭제 프로세스가 무기한 막힐 수 있습니다.

kubectl로 사용자 클러스터를 삭제하려면 다음 안내를 따르세요.

  1. 다음 명령어를 실행하여 클러스터 객체를 삭제합니다.

    kubectl delete cluster USER_CLUSTER_NAME -n USER_CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH

    명령어에서 다음 항목을 사용자 환경에 해당하는 정보로 바꿉니다.

    • USER_CLUSTER_NAME: 삭제할 사용자 클러스터의 이름입니다.

    • USER_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 기본적으로 베어메탈용 GKE의 클러스터 네임스페이스는 cluster-가 앞에 표시된 클러스터 이름입니다. 예를 들어 클러스터 이름을 test로 지정한 경우 네임스페이스 이름은 cluster-test가 됩니다.

    • ADMIN_KUBECONFIG_PATH: 연결된 관리자 클러스터의 kubeconfig 파일 경로입니다.

  2. 클러스터가 성공적으로 삭제되었으면 다음 명령어를 실행하여 네임스페이스를 삭제합니다.

    kubectl delete namespace USER_CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH

콘솔

GKE On-Prem API로 사용자 클러스터를 관리하는 경우 다음 단계를 수행하여 클러스터를 삭제합니다.

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 삭제할 클러스터를 클릭합니다.

  4. 클러스터 목록에서 삭제할 클러스터를 클릭합니다. 유형외부이면 클러스터가 bmctl을 사용하여 생성되었으며 GKE On-Prem API에 등록되지 않았음을 나타냅니다. 이 경우 bmctl 또는 kubectl 탭의 단계에 따라 클러스터를 삭제합니다.

    상태 열의 아이콘에 문제가 나타나는 경우 gcloud CLI 탭의 단계에 따라 클러스터를 삭제합니다. 삭제 명령어에 --ignore-errors 플래그를 추가해야 합니다.

  5. 삭제하려는 클러스터의 이름을 클릭합니다.

  6. 창 상단에 있는 세부정보 패널에서 삭제를 클릭합니다.

  7. 확인 메시지가 표시되면 클러스터 이름을 입력하고 삭제를 클릭합니다.

gcloud CLI

GKE On-Prem API에서 사용자 클러스터를 관리하는 경우 다음 단계를 수행하여 gcloud CLI가 설치된 컴퓨터에서 클러스터를 삭제합니다.

  1. Google 계정으로 로그인합니다.

    gcloud auth login
    
  2. 구성요소를 업데이트합니다.

    gcloud components update
    
  3. delete 명령어에 올바른 클러스터 이름을 지정하는 데 도움이 되는 클러스터 목록을 가져옵니다.

    gcloud container bare-metal clusters list \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    다음을 바꿉니다.

    • FLEET_HOST_PROJECT_ID: 클러스터가 생성된 프로젝트의 ID입니다.

    • LOCATION: 사용자 클러스터와 연결된 Google Cloud 위치

    출력은 다음과 비슷합니다.

    NAME                      LOCATION    VERSION         ADMIN_CLUSTER            STATE
    example-user-cluster-1a   us-west1    1.16.7          example-admin-cluster-1  RUNNING
    
  4. 다음 명령어를 실행하여 클러스터를 삭제합니다.

    gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --force \
      --allow-missing
    

    다음을 바꿉니다.

    • USER_CLUSTER_NAME: 삭제할 사용자 클러스터의 이름입니다.

    • FLEET_HOST_PROJECT_ID: 클러스터가 생성된 프로젝트의 ID입니다.

    • LOCATION: 사용자 클러스터와 연결된 Google Cloud 위치

    --force 플래그를 사용하면 노드 풀이 있는 클러스터를 삭제할 수 있습니다. --force 플래그가 없으면 먼저 노드 풀을 삭제한 후 클러스터를 삭제해야 합니다.

    --allow-missing 플래그는 표준 Google API 플래그입니다. 이 플래그를 포함할 때 클러스터를 찾을 수 없으면 명령어가 성공을 반환합니다.

    명령어가 failed connecting to the cluster's control plane 텍스트가 포함된 오류를 반환하는 경우 관리자 클러스터, Connect Agent 또는 온프레미스 환경에 연결 문제가 있다는 것입니다. Connect Agent 문제를 해결하려면 Connect Agent 로그 수집을 참조하세요.

    • 네트워크 문제로 인해 연결 문제가 일시적이라고 생각되면 기다렸다가 명령어를 다시 시도하세요.

    • 관리자 클러스터가 삭제되었거나 관리자 또는 사용자 클러스터의 노드 머신이 종료되거나 오프라인 상태가 된 경우 --ignore-errors 플래그를 포함하고 명령어를 다시 시도합니다.

      또한 클러스터가 bmctl 또는 kubectl을 통해 삭제된 경우 --ignore-errors를 포함해야 하므로 Google Cloud에 GKE On-Prem API 리소스가 남게 됩니다. 한 가지 증상은 콘솔의 GKE 클러스터 페이지에 클러스터가 비정상 상태로 계속 표시되는 것입니다.

다른 플래그에 대한 자세한 내용은 gcloud CLI 참조를 확인하세요.

특정 클러스터 노드 재설정

예를 들어 관리자 클러스터가 삭제되었지만 관리자 클러스터에서 관리하는 사용자 클러스터가 남아 있는 경우 클러스터의 특정 노드를 재설정할 수 있습니다. 이 경우 관리자 클러스터가 삭제되었으므로 전체 사용자 클러스터를 삭제할 수 없습니다. 따라서 사용자 클러스터 노드를 개별적으로 재설정해야 합니다.

노드를 재설정하려면 Google Container Registry(GCR)에 대한 읽기 액세스 권한이 있는 서비스 계정이 필요합니다. bmctl 명령어는 이 서비스 계정의 JSON 키 파일을 인수로 예상합니다. 클러스터의 개별 노드를 재설정하려면 다음 명령어를 실행하세요.

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-private-key-path SSH_KEY_PATH \
    --gcr-service-account-key SERVICE_ACCOUNT_KEY_PATH \
    --login-user root

명령어에서 다음 항목을 사용자 환경에 해당하는 정보로 바꿉니다.

  • NODE_1_IP_ADDRESS , NODE_2_IP_ADDRESS: 삭제할 노드의 IP 주소를 쉼표로 구분한 목록

  • SSH_KEY_PATH: SSH 비공개 키의 경로. 이 키는 재설정 중에 노드와의 SSH 연결을 설정하는 데 사용됩니다.

  • SERVICE_ACCOUNT_KEY_PATH: 서비스 계정 키가 포함된 JSON 파일의 경로. 이 키는 Google Container Registry에서 이미지를 가져올 수 있는 bmctl 권한을 부여합니다. 콘솔 또는 gcloud CLI를 사용하여 서비스 계정 키를 만들 수 있습니다. 자세한 내용은 서비스 계정 키 만들기 및 관리를 참조하세요. 서비스 계정 키 파일을 만드는 또 다른 방법은 --create-service-accounts 플래그가 지정된 create config 명령어를 실행하는 것입니다. 해당 명령어에 대한 자세한 내용은 bmctl을 사용하여 클러스터 구성 만들기 및 관리를 참조하세요.

클러스터 삭제 세부정보

삭제하는 동안 클러스터의 Fleet 멤버십 등록, 스토리지 마운트, anthos-system StorageClass의 데이터가 삭제됩니다.

모든 노드에 대해 클러스터 네트워킹에 사용되는 터널 인터페이스가 삭제되고 다음 디렉터리가 삭제됩니다.

  • /etc/kubernetes
  • /etc/cni/net.d
  • /root/.kube
  • /var/lib/kubelet

부하 분산기 노드의 경우:

  • keepalivedhaproxy 서비스가 삭제됩니다.
  • keepalivedhaproxy의 구성 파일이 삭제됩니다.