MIG에서 클릭 한 번으로 OS 이미지 업그레이드 수행


커스텀 이미지 계열순차적 업데이트를 함께 사용하면 관리형 인스턴스 그룹(MIG)에서 클릭 한 번으로 OS 이미지 업그레이드를 사용 설정할 수 있습니다.

클릭 한 번으로 OS 이미지 업그레이드를 사용하면 다음과 같은 다양한 혜택을 누릴 수 있습니다.

  • 모든 VM 머신 유형 및 모든 인스턴스 그룹 크기에서 작동합니다.
  • Windows 및 Linux 이미지와 컨테이너를 모두 지원합니다.
  • 인스턴스는 현재 인스턴스 템플릿을 기준으로 또는 새 템플릿을 기준으로 다시 생성됩니다. 따라서 커스텀 시작 스크립트 및 메타데이터를 보존할 수 있습니다.
  • 스테이트풀(Stateful) MIG에서 작동하므로 비부팅 디스크에 데이터를 보존할 수 있습니다.
  • 새 OS 버전 출시는 최초 요청 후 추가 사용자 입력 없이 자동으로 수행됩니다.
  • 상태 확인(선택사항)을 사용하여 일괄 업데이트를 지원합니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.
    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

클릭 한 번으로 OS 이미지 업그레이드는 어떻게 작동하나요?

업데이트를 호출하면 MIG가 그룹의 모든 VM 부팅 디스크를 커스텀 이미지 계열에서 사용 가능한 최신 OS 이미지 버전으로 바꿉니다. MIG는 인스턴스 템플릿에서 설정한 모든 메타데이터 및 시작 스크립트를 그룹의 각 VM에 보존합니다. 비부팅 디스크는 인스턴스 템플릿의 사양에 따라 재생성됩니다. 데이터 보존에 대한 자세한 내용은 MIG에서 스테이트풀(Stateful) 디스크 구성을 참조하세요.

애플리케이션 중단을 제한하기 위해 업데이트 중에 특정 비율의 VM을 계속 실행하여 일괄 업데이트를 수행할 수 있습니다. 안정성을 높이기 위해 MIG의 애플리케이션 기반 상태 확인을 구성할 수 있습니다. 이 경우 그룹이 업데이트된 VM의 애플리케이션에서 정상 응답을 대기한 후 다른 VM에 대한 추가 업데이트를 진행합니다.

시작하기 전에

  • 최신 버전의 Google Cloud CLI를 설치하거나 업데이트합니다.

  • 이미지 계열을 가리키는 인스턴스 템플릿을 만들어야 합니다. 애플리케이션과 호환되지 않는 이미지 버전이 출시되는 위험을 줄이려면 커스텀 이미지 계열을 사용하는 것이 좋습니다. 호환되는 이미지 버전만 출시되도록 하려면 애플리케이션과의 호환성을 테스트한 후 커스텀 이미지 계열에 이미지를 추가하며 됩니다.

    인스턴스 템플릿이 이미지 계열을 가리키는 경우 MIG는 항상 해당 계열의 최신 이미지에서 인스턴스를 만듭니다. 예를 들면 다음과 같습니다.

    • 사용자 또는 MIG의 자동 확장 처리가 MIG 크기를 늘려 MIG에서 새 인스턴스를 추가하는 경우
    • MIG가 인스턴스를 다시 만들거나 수동으로 또는 자동 복구를 통해 트리거되는 경우
  • 새 이미지를 이미지 계열에 추가하고 출시하기 전에 앱에서 이미지를 테스트합니다.

  • 필요한 경우 MIG에 대한 애플리케이션 기반 상태 확인을 만듭니다. 애플리케이션 기반 상태 확인은 MIG의 각 VM에서 애플리케이션이 예상대로 응답하는지 확인합니다. 사용할 수 없는 VM을 하나만 허용하도록 업데이트를 구성할 수 있습니다. 애플리케이션이 예상대로 응답하지 않으면 MIG에서 해당 VM을 사용할 수 없는 것으로 표시하고 출시가 진행되지 않습니다.

MIG에서 클릭 한 번으로 OS 이미지 업그레이드 수행

MIG의 모든 VM을 커스텀 이미지 계열의 최신 이미지로 업데이트하려면 다음 단계를 수행합니다.

  1. 다음 명령어를 사용하여 순차적 교체를 시작합니다.

    gcloud compute instance-groups managed rolling-action replace instance-group-name \
        [--max-surge=max-surge ] [--max-unavailable=max-unavailable]

    다음을 바꿉니다.

    • instance-group-name: 작업할 MIG의 이름입니다.
    • max-surge: 업데이트 프로세스 중에 임시로 생성될 수 있는 VM의 최대 추가 개수입니다. 이 수치는 고정 숫자(예: 5) 또는 MIG 크기 비율(예: 10%)일 수 있습니다.
    • max-unavailable: 업데이트 프로세스 중에 사용할 수 없는 최대 VM 수입니다. 이 수치는 고정 숫자(5) 또는 MIG 크기 비율(10%)일 수 있습니다.

    상태 확인을 --max-unavailable--max-surge 옵션과 함께 사용하면 VM을 사용할 수 없는 경우 추가 업데이트를 중지할 수 있습니다.

  2. wait-until 하위 명령어를 사용해 업데이트를 모니터링하여 MIG의 status.versionTarget.isReached 필드가 true로 설정되었는지 확인합니다.

    gcloud compute instance-groups managed wait-until instance-group-name --version-target-reached

    다음을 바꿉니다.

    • instance-group-name: 작업할 MIG의 이름입니다.

    그룹이 업데이트되면 명령이 반환됩니다.

    인스턴스를 나열하여 각 인스턴스의 상태를 확인할 수도 있습니다.

    gcloud compute instance-groups managed list-instances instance-group-name

    이 명령어는 각 VM의 상태, 정상 상태, 현재 작업을 비롯해 인스턴스 및 관련 세부정보 목록을 반환합니다. 모든 VM이 RUNNING이고 현재 작업이 없으면 MIG가 최신 상태이며 안정적입니다.

  3. 이전 OS 이미지로 롤백해야 하는 경우 인스턴스 템플릿을 만들고 사용할 이미지를 지정해야 합니다. 그런 다음 순차적 업데이트를 시작하여 해당 템플릿을 사용하도록 모든 관리형 인스턴스를 업데이트합니다. 자세한 내용은 업데이트 롤백을 참조하세요.

예시

이 예시에서는 다음 작업을 다룹니다.

  1. OS 이미지 업데이트를 위한 인스턴스 템플릿을 만듭니다.
  2. 템플릿을 기반으로 MIG를 만듭니다.
  3. 상태 확인을 설정하여 이미지 업데이트로 인한 중단을 제한합니다.
  4. 이미지 계열에 새 이미지를 추가합니다.
  5. 단일 명령어로 OS 업데이트를 호출합니다.
  6. 업데이트를 모니터링합니다.

MIG에서 클릭 한 번으로 OS 업그레이드를 사용 설정 및 수행하려면 다음 단계를 수행합니다.

  1. 커스텀 이미지 계열을 지정하는 인스턴스 템플릿을 만듭니다. 이미지 계열에는 테스트를 거쳐 신뢰할 수 있는 이미지가 포함되어야 합니다. MIG가 템플릿을 사용해 만든 각 VM은 이 계열의 최신 이미지를 사용합니다.

    gcloud compute instance-templates create example-template \
        --machine-type n1-standard-4 \
        --image-family my-image-family \
        --image-project my-project \
        --tags=http-server
    
  2. 인스턴스 템플릿을 기반으로 MIG를 만듭니다. 이 예시에서는 example-template에 따라 3개의 인스턴스로 MIG를 시작합니다. 인스턴스 템플릿이 이미지 계열을 지정하므로 MIG는 각 VM을 해당 계열의 최신 이미지로 만듭니다.

    gcloud compute instance-groups managed create example-group \
      --base-instance-name example \
      --size 3 \
      --zone us-east1-b \
      --template example-template
    
  3. 선택사항: 애플리케이션 기반 상태 확인을 구성하고 사용 설정합니다. 이미지 업데이트 후 앱이 응답하지 않으면 상태 확인 상태를 maxUnavailable 설정과 함께 사용하여 MIG의 추가 출시를 중지할 수 있습니다.

    1. 요청 경로 /health에서 HTTP 200 응답을 찾는 상태 확인을 만듭니다. 각 인스턴스에 있는 GitHub 앱이 해당 경로를 제공합니다.

      gcloud compute health-checks create http example-autohealer-check \
          --check-interval 10 \
          --timeout 5 \
          --healthy-threshold 2 \
          --unhealthy-threshold 3 \
          --request-path "/health"
      
    2. 상태 확인기 프로브가 인스턴스에 액세스할 수 있도록 허용하는 방화벽 규칙을 만듭니다. 상태 확인기 프로브는 130.211.0.0/2235.191.0.0/16 범위의 주소에서 전송됩니다.

      gcloud compute firewall-rules create default-allow-http-health-check \
          --network default \
          --allow tcp:80 \
          --source-ranges 130.211.0.0/22,35.191.0.0/16
      
    3. MIG에 상태 확인을 추가합니다.

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. 업데이트가 제공되고 테스트되고 앱과 호환되는 것으로 확인되면 새 이미지를 만들고 --family 플래그를 사용하여 커스텀 이미지 계열에 해당 이미지를 포함합니다.

    gcloud compute images my-image-v2 \
        --source-disk boot-disk-1 \
        --source-disk-zone us-central1-f \
        --family my-image-family

    이 예시에서 my-image-family의 최신 이미지는 이제 소스 디스크 boot-disk-1을 기반으로 하는 my-image-v2입니다.

  5. 순차적 교체를 호출하여 MIG의 모든 VM을 바꿉니다. MIG는 그룹의 인스턴스 템플릿을 기준으로 각 VM을 바꿉니다. 인스턴스 템플릿이 my-image-family를 지정하므로 각 VM은 해당 계열(my-image-v2)에서 최신 이미지를 가져옵니다.

    업데이트로 인해 발생하는 중단 수준을 구성할 수 있습니다. 이 예시에서 MIG는 그룹의 대상 크기 위에 VM을 하나 더 만들고 해당 VM이 실행될 때까지 기존 VM을 삭제하지 않습니다.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. 업데이트 상태를 모니터링하려면 --version-target-reached 플래그와 함께 wait-until 명령어를 사용합니다. 그룹이 업데이트되면 명령어가 반환됩니다.

    gcloud compute instance-groups managed wait-until --version-target-reached example-group \
        --zone us-east1-
    Waiting for group to reach version target
    ...
    Version target is reached
    

    또한 list-instances 명령어를 사용하여 상태, 정상 상태, 현재 작업, 인스턴스 템플릿, 각 VM의 버전을 확인합니다.

    gcloud compute instance-groups managed list-instances example-group \
        --zone us-east1-b
    
    
    NAME       ZONE        STATUS   HEALTH_STATE  ACTION     INSTANCE_TEMPLATE  VERSION_NAME                        LAST_ERROR
    test-211p  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-30 13:34:28.843377+00:00
    test-t5qb  us-east1-b  RUNNING  UNKNOWN       VERIFYING  example-template   0/2020-01-30 13:34:28.843377+00:00
    test-x331  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-20 20:39:51.819399+00:00
    
  7. 이전 이미지로 롤백해야 하는 경우 다음 단계를 수행합니다.

    1. 원하는 이미지를 지정하는 새 인스턴스 템플릿을 만듭니다.
    2. 순차적 업데이트를 시작하여 인스턴스 템플릿을 적용합니다.

다음 단계