노드 풀 업그레이드

이 페이지에서는 VMware에서 Google Distributed Cloud (소프트웨어 전용)로 만든 사용자 클러스터에서 제어 영역과 노드 풀을 별도로 업그레이드하는 방법을 보여줍니다. 이 페이지는 기본 기술 인프라의 수명 주기를 관리하는 IT 관리자 및 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 작업을 참고하세요. 이 문서를 읽기 전에 다음에 설명된 대로 Google Distributed Cloud 업그레이드 계획 및 실행에 익숙해야 합니다.

Ubuntu 및 COS 노드 풀의 경우 제어 영역과 별도로 노드 풀의 업그레이드가 지원되지만 Windows 노드 풀에서는 이러한 업그레이드가 지원되지 않습니다. 또한 이 기능은 고급 클러스터에서는 사용할 수 없습니다.

제어 영역과 노드 풀을 별도로 업그레이드해야 하는 이유는 무엇인가요?

  • 클러스터의 버전이 1.16 이상이면 노드 풀을 업그레이드할 때 부 버전을 건너뛸 수 있습니다. 버전 건너뛰기 업그레이드를 실행하면 노드 풀을 두 버전씩 순차적으로 업그레이드하는 데 걸리는 시간이 절반으로 줄어듭니다. 또한 버전 건너뛰기 업그레이드를 사용하면 지원되는 버전을 계속 사용하는 데 필요한 업그레이드 간격을 늘릴 수 있습니다. 업그레이드 횟수를 줄이면 워크로드 중단 및 확인 시간이 줄어듭니다. 자세한 내용은 노드 풀 업그레이드 시 버전 건너뛰기를 참고하세요.

  • 특정 상황에서는 사용자 클러스터의 노드 풀 중 일부만 업그레이드하려는 경우가 있습니다. 예를 들면 다음과 같습니다.

    • 먼저 트래픽이 적거나 가장 중요하지 않은 워크로드를 실행하는 제어 영역과 노드 풀을 업그레이드할 수 있습니다. 워크로드가 새 버전에서 올바르게 실행된다고 확신하면 결국 모든 노드 풀이 업그레이드될 때까지 추가 노드 풀을 업그레이드할 수 있습니다.

    • 클러스터 업그레이드를 위한 하나의 긴 유지보수 기간 대신 여러 유지보수 기간에 걸쳐 클러스터를 업그레이드할 수 있습니다. 유지보수 기간의 시간을 예측하는 방법에 관한 자세한 내용은 소요 시간 예측 및 유지보수 기간 계획을 참고하세요.

시작하기 전에

  1. 버전 1.29 이상에서는 서버 측 프리플라이트 검사가 기본적으로 사용 설정됩니다. 방화벽 규칙을 검토하여 필요한 사항을 변경해야 합니다.

  2. 버전 1.28 이상으로 업그레이드하려면 kubernetesmetadata.googleapis.com을 사용 설정하고 로깅 모니터링 서비스 계정kubernetesmetadata.publisher IAM 역할을 부여해야 합니다. 자세한 내용은 Google API 및 IAM 요구사항을 참고하세요.

  3. 현재 클러스터 버전이 1.14 이상인지 확인합니다.

컨트롤 플레인 및 선택한 노드 풀 업그레이드

gkectl, Google Cloud CLI, Terraform을 사용하여 워커 노드 풀과 별도로 사용자 클러스터의 제어 영역을 업그레이드할 수 있습니다. Terraform을 사용하여 사용자 클러스터를 만든 경우에만 업그레이드에 Terraform을 사용할 수 있습니다.

gkectl

  1. 다음 자리표시자 변수에서 소스 버전과 대상 버전을 정의합니다. 모든 버전은 1.16.11-gke.25와 같은 x.y.z-gke.N 형식의 전체 버전 번호여야 합니다.

    버전 설명
    SOURCE_VERSION 현재 클러스터 버전입니다.
    TARGET_VERSION 대상 버전을 선택합니다. 대상 마이너 버전에서 추천 패치를 선택합니다.
  2. 관리자 워크스테이션을 대상 버전으로 업그레이드합니다. 업그레이드가 완료되었다는 메시지가 표시될 때까지 기다립니다.

  3. 해당하는 OS 이미지를 vSphere로 가져옵니다.

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    ADMIN_CLUSTER_KUBECONFIG를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.

  4. 사용자 클러스터 구성 파일을 다음과 같이 변경합니다.

    • gkeOnPremVersion 필드를 대상 버전 TARGET_VERSION로 설정합니다.

    • 업그레이드하려는 각 노드 풀에 대해 nodePools.nodePool[i].gkeOnPremVersion 필드를 빈 문자열로 설정합니다.

      • 버전 1.28 이상에서는 nodePools.nodePool[i].updateStrategy.rollingUpdate.maxSurge 필드를 1보다 큰 정수 값으로 설정하여 노드 풀 업그레이드 속도를 높일 수 있습니다. maxSurge로 노드를 업그레이드하면 단일 노드를 업그레이드하는 데 걸리는 시간과 동일한 시간에 여러 노드가 업그레이드됩니다.
    • 업그레이드 하지 않을 각 노드 풀에 대해 nodePools.nodePool[i].gkeOnPremVersion를 소스 버전인 SOURCE_VERSION로 설정합니다.

    다음 예는 사용자 클러스터 구성 파일의 일부를 보여줍니다. 여기에서 제어 영역과 pool-1TARGET_VERSION로 업그레이드되도록 지정하지만 pool-2SOURCE_VERSION로 유지됩니다.

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: SOURCE_VERSION
      ...
    
  5. 컨트롤 플레인과 선택한 노드 풀을 업그레이드합니다.

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    

    USER_CLUSTER_CONFIG를 사용자 클러스터 구성 파일의 경로로 바꿉니다.

추가 노드 풀 업그레이드

이전 예시를 사용하여 pool-1를 사용하여 모든 요소가 제대로 작동하며, 이제 pool-2를 업그레이드한다고 가정해 보겠습니다.

  1. 사용자 클러스터 구성 파일의 pool-2 아래에서 gkeOnPremVersion을 빈 문자열로 설정합니다.

    gkeOnPremVersion: TARGET_VERSION
    ...
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      ...
    - name: pool-2
      gkeOnPremVersion: ""
      ...
    
  2. gkectl update cluster를 실행하여 변경사항을 적용합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG
    

gcloud CLI

사용자 클러스터를 업그레이드하려면 관리자 클러스터에 몇 가지 변경사항을 적용해야 합니다. gcloud container vmware clusters upgrade 명령어는 자동으로 다음을 수행합니다.

  • 아직 등록되지 않았으면 GKE On-Prem API에 관리자 클러스터를 등록합니다.

  • 구성요소 번들을 관리자 클러스터에 다운로드하고 배포합니다. 구성요소의 버전이 업그레이드에서 지정한 버전과 일치합니다. 이러한 구성요소를 통해 관리자 클러스터는 해당 버전의 사용자 클러스터를 관리할 수 있습니다.

컨트롤 플레인 업그레이드

사용자 클러스터의 컨트롤 플레인을 업그레이드하려면 다음 단계를 따르세요.

  1. Google Cloud CLI 구성요소를 업데이트합니다.

    gcloud components update
    
  2. 클러스터에서 업그레이드 정책을 변경합니다.

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    다음을 바꿉니다.

    • USER_CLUSTER_NAME: 업그레이드할 사용자 클러스터 이름

    • PROJECT_ID: 사용자 클러스터가 구성원인 Fleet 호스트 프로젝트의 ID. 이 프로젝트는 클러스터를 만들 때 지정된 프로젝트입니다. gkectl을 사용하여 클러스터를 만들었으면 클러스터 구성 파일에서 gkeConnect.projectID 필드의 프로젝트 ID입니다.

    • REGION: GKE On-Prem API가 메타데이터를 실행하고 저장하는 Google Cloud 리전입니다. GKE On-Prem API 클라이언트를 사용하여 클러스터를 만든 경우 이 리전은 클러스터를 만들 때 선택한 리전입니다. gkectl을 사용하여 클러스터를 만든 경우 이 리전은 GKE On-Prem API에 클러스터를 등록할 때 지정한 리전입니다.

  3. 클러스터의 제어 영역을 업그레이드합니다.

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

    TARGET_VERSION을 업그레이드할 버전으로 바꿉니다. 대상 마이너 버전에서 추천 패치를 선택합니다.

    명령어 출력은 다음과 비슷합니다.

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    예시 출력에서 operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 문자열은 장기 실행 작업의 OPERATION_ID입니다. 다른 터미널 창에서 다음 명령어를 실행하여 작업 상태를 찾을 수 있습니다.

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

노드 풀 업그레이드

사용자 클러스터의 컨트롤 플레인이 업그레이드된 후 노드 풀을 업그레이드하려면 다음 단계를 따르세요.

  1. 사용자 클러스터의 노드 풀 목록을 가져옵니다.

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. 업그레이드하려는 각 노드 풀에 대해 다음 명령어를 실행합니다.

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=TARGET_VERSION
    

Terraform

  1. Google Cloud CLI 구성요소를 업데이트합니다.

    gcloud components update
    
  2. 아직 수행하지 않았으면 GKE On-Prem API에 관리자 클러스터를 등록합니다.. GKE On-Prem API에 클러스터를 등록한 다음에는 이 단계를 다시 수행할 필요가 없습니다.

  3. 새 버전의 구성요소를 다운로드하고 관리자 클러스터에 배포합니다.

    gcloud vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=TARGET_VERSION
    

    다음을 바꿉니다.

    • USER_CLUSTER_NAME: 업그레이드할 사용자 클러스터 이름

    • PROJECT_ID: 사용자 클러스터가 구성원인 Fleet 호스트 프로젝트의 ID. 이 프로젝트는 클러스터를 만들 때 지정된 프로젝트입니다. gkectl을 사용하여 클러스터를 만들었으면 클러스터 구성 파일에서 gkeConnect.projectID 필드의 프로젝트 ID입니다.

    • REGION: GKE On-Prem API가 메타데이터를 실행하고 저장하는 Google Cloud 리전입니다. GKE On-Prem API 클라이언트를 사용하여 클러스터를 만든 경우 이 리전은 클러스터를 만들 때 선택한 리전입니다. gkectl을 사용하여 클러스터를 만든 경우 이 리전은 GKE On-Prem API에 클러스터를 등록할 때 지정한 리전입니다.

    • TARGET_VERSION: 업그레이드할 버전입니다. 타겟 마이너 버전에서 권장 패치를 선택합니다.

    이 명령어는 --required-platform-version에 지정하는 구성요소 버전을 관리자 클러스터에 다운로드한 후 구성요소를 배포합니다. 이러한 구성요소를 통해 관리자 클러스터는 해당 버전의 사용자 클러스터를 관리할 수 있습니다.

  4. 사용자 클러스터를 만드는 데 사용한 main.tf 파일에서 클러스터 리소스의 on_prem_version을 새 버전으로 변경합니다.

  5. 컨트롤 플레인만 업그레이드되도록 클러스터 리소스에 다음을 추가합니다.

    upgrade_policy {
      control_plane_only = true
    }
    
  6. Terraform 계획을 초기화하고 만듭니다.

    terraform init
    

    Terraform은 Google Cloud

  7. 구성을 검토하고 필요한 경우 변경합니다.

    terraform plan
    
  8. Terraform 계획을 적용하여 사용자 클러스터를 만듭니다.

    terraform apply
    

노드 풀 업그레이드

사용자 클러스터의 컨트롤 플레인이 업그레이드된 후 노드 풀을 업그레이드하려면 다음 단계를 따르세요.

  1. 업그레이드하려는 각 노드 풀에서 리소스의 main.tf에 다음을 추가합니다.

    on_prem_version = "TARGET_VERSION"
    

    예를 들면 다음과 같습니다.

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = true
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. Terraform 계획을 초기화하고 만듭니다.

    terraform init
    
  3. 구성을 검토하고 필요한 경우 변경합니다.

    terraform plan
    
  4. Terraform 계획을 적용하여 사용자 클러스터를 만듭니다.

    terraform apply
    

문제 해결

노드 풀을 업그레이드한 후 문제가 발생하면 이전 버전으로 롤백할 수 있습니다. 자세한 내용은 업그레이드 후 노드 풀 롤백을 참고하세요.