MIG에서 새 VM 구성 적용


이 페이지에서는 관리형 인스턴스 그룹(MIG)에서 가상 머신(VM) 인스턴스를 구성하는 방법과 그룹의 기존 VM에 구성을 적용하는 데 사용할 수 있는 방법을 설명합니다.

다음 VM 구성 구성요소를 사용하여 MIG에 있는 VM에 대해 의도한 구성을 지정합니다.

  • 필수: 인스턴스 템플릿
  • 선택사항: 모든 인스턴스 구성
  • 선택사항: 스테이트풀(Stateful) 구성

해당 구성요소를 사용하여 의도한 구성을 업데이트할 때마다 Compute Engine은 그룹에 추가된 새 VM에 업데이트된 구성을 자동으로 적용합니다.

기존 VM에 업데이트된 구성을 적용하려면 이 페이지에 설명된 방법을 사용합니다.

  • 중단 예산 및 새 템플릿의 선택적 카나리아 업데이트가 포함된 자동 출시
  • 특정 VM에 대한 선택적 수동 업데이트로 중단 최소화
  • 특정 VM 재생성

VM 복구 중에 VM에 사용 가능한 최신 구성을 적용하도록 MIG를 구성할 수도 있습니다. 자세한 내용은 복구 중 구성 업데이트 적용을 참조하세요.

MIG의 크기 조절만 필요한 경우 MIG에서 인스턴스를 추가 또는 삭제하는 방법에 대한 문서를 참조하세요. MIG 기능 구성에 대한 자세한 내용은 자동 확장, 자동 복구, 부하 분산스테이트풀(Stateful) 워크로드 문서를 참조하세요.

시작하기 전에

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

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

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

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

MIG의 VM에 대한 구성 구성요소

다음 구성요소를 통해 MIG에서 VM을 구성합니다.

구성요소속성사용 사례
인스턴스 템플릿 머신 유형, 부팅 디스크 이미지, 라벨, 시작 스크립트, 기타 VM 속성 필수: 인스턴스 템플릿을 사용하여 그룹의 모든 VM에 대한 필수 및 선택적 인스턴스 속성을 정의합니다.

선택사항: 두 번째 VM 구성을 카나리아 테스트하려면 그룹에 두 번째 인스턴스 템플릿을 추가하고 그룹의 VM 하위 집합에 적용할 수 있습니다.
모든 인스턴스 구성 라벨 및 메타데이터 선택사항: 모든 인스턴스 구성을 사용하여 그룹의 모든 VM에 대한 인스턴스 템플릿 속성을 빠르게 재정의합니다.
스테이트풀(Stateful) 구성 스테이트풀(Stateful) 디스크, IP 주소, 메타데이터 선택사항: 스테이트풀(Stateful) 워크로드를 지원해야 하는 경우 그룹의 VM에 스테이트풀(Stateful) 구성을 추가합니다.

이러한 구성요소를 통해 그룹에 대한 구성을 업데이트하는 경우 업데이트된 구성을 효과적으로 수행하기 위해 그룹의 기존 VM에 업데이트된 구성을 적용해야 합니다.

기존 VM에 새 구성을 적용하는 방법

MIG의 VM 구성을 업데이트한 후 다음 방법을 사용하여 그룹의 기존 VM에 새 구성을 적용할 수 있습니다.

  • 자동(사전형): 이 방법을 사용하면 MIG에서 새 구성을 그룹 내 기존 VM 전체 또는 하위 집합에 자동으로 적용할 수 있습니다. 실행 중인 VM에 대한 중단 수준은 구성하는 업데이트 정책에 따라 다릅니다. 이 메서드를 사용하여 새 인스턴스 템플릿을 카나리아 업데이트할 수 있습니다. 이 메서드를 사용하려면 MIG의 업데이트 유형을 '사전형'으로 설정합니다.
  • 선택적(상황별): 업데이트를 수동으로 적용하거나 그룹의 모든 기존 VM을 한 번에 업데이트하려면 이 방법을 사용합니다. 최신 구성으로 업데이트할 VM의 일부 또는 전부를 대상으로 합니다. 이 메서드를 사용하려면 MIG의 업데이트 유형을 '상황별'로 설정합니다.
  • VM 재생성: 특정 VM을 다시 만들어 새 구성을 적용합니다.

MIG의 업데이트 유형 설정에 대한 자세한 내용은 사전형 또는 상황별 업데이트 설정을 참조하세요.

자동(사전형)

자동 업데이트 유형은 사전형 업데이트 유형이라고도 합니다. MIG의 업데이트 유형을 사전 예방적으로 설정하면 MIG는 필요에 따라 업데이트된 구성을 VM에 자동으로 적용합니다.

MIG의 업데이트 유형을 사전 예방적으로 설정하면 다음과 같은 두 가지 주요 이점이 있습니다.

  • 초기 요청 후 추가 입력 없이 사양에 맞게 업데이트가 자동으로 출시됩니다. 배포 속도, 서비스 중단 수준, 업데이트 범위를 지정할 수 있습니다.
  • 카나리아 테스트를 허용하는 부분 출시를 자동화할 수 있습니다.

MIG의 업데이트 유형을 설정하는 방법은 사전형 또는 상황별 업데이트 설정을 참조하세요.

자동 출시에 대한 자세한 내용은 MIG에서 VM 구성 업데이트 자동 적용을 참조하세요.

선택적(상황별)

선택적 업데이트 유형은 상황별 업데이트 유형이라고도 합니다. MIG의 업데이트 유형을 상황별로 설정하면 MIG는 업데이트할 특정 VM을 선택적으로 타겟팅하는 경우에만 기존 VM에 새 구성을 적용합니다.

MIG의 업데이트 유형을 상황별로 설정하면 다음과 같은 이점이 있습니다.

  • 업데이트하려는 VM을 선택할 수 있습니다.
  • 업데이트 타이밍 및 순서를 제어할 수 있습니다.
  • gcloud CLI 또는 REST를 사용하여 모든 인스턴스를 즉시 업데이트할 수 있습니다.

특정 시나리오에서 선택적 업데이트 유형을 사용하면 시스템이 불안정해지는 것을 방지할 수 있으므로 유용합니다. 예를 들어 다음 사항을 고려해 보세요.

  • MIG의 VM 중 하나가 다운되어 복구되어야 하지만 구성을 변경하지 않으려는 경우 MIG의 업데이트 유형을 상황별로 설정하고 복구 중에 업데이트를 강제로 적용하지 않으면 Compute Engine은 원래 인스턴스 템플릿이 더 이상 존재하지 않더라도 해당 VM을 만드는 데 사용된 것과 동일한 구성을 사용하여 VM을 복구합니다.

  • 자동 확장된 MIG가 있고 긴급하지 않고 중요하지 않은 업데이트를 적용하려고 합니다. Compute Engine이 업데이트 적용을 위해 기존 VM을 삭제하지 않도록 하려면 MIG의 업데이트 유형을 상황별로 설정합니다. 수평 축소 시 자동 확장 처리는 이전 구성을 사용하여 VM을 우선적으로 종료합니다. 그룹이 수평 확장되면 최신 구성으로 VM을 만듭니다.

MIG의 업데이트 유형을 설정하는 방법은 사전형 또는 상황별 업데이트 설정을 참조하세요.

VM을 선택적으로 업데이트하는 방법에 대한 자세한 내용은 MIG에서 VM 구성 업데이트를 선택적으로 적용을 참조하세요.

VM 재생성

MIG의 VM을 다시 만들 수 있습니다. 그러면 MIG는 해당 VM에 아직 적용되지 않은 업데이트된 구성을 적용합니다. 자세한 내용은 MIG에서 VM 다시 만들기를 참조하세요.

사전형 또는 상황별 업데이트 설정

기존 VM에 새 구성을 자동으로 적용하려면 MIG의 업데이트 유형을 '사전형'으로 설정합니다. 업데이트할 VM을 선택할 때만 기존 VM에 새 구성을 적용하려면 MIG의 업데이트 유형을 "낙관적"으로 설정합니다.

Google Cloud 콘솔, Google Cloud CLI 또는 REST를 사용합니다.

콘솔

  1. Google Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

    인스턴스 그룹 페이지로 이동

  2. 업데이트할 MIG를 선택합니다.

  3. 페이지 상단에서 VM 업데이트를 클릭합니다.

  4. 그룹에 다른 템플릿을 설정하려면 새 템플릿에서 사용할 인스턴스 템플릿을 선택합니다.

  5. 업데이트 구성에서 자동 또는 선택적 업데이트를 선택합니다.

gcloud

rolling-action start-update 명령어를 사용하고 --type 플래그를 opportunistic 또는 proactive로 설정합니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --type=TYPE

베타 update 명령어를 사용하고 --update-policy-type 플래그를 포함할 수도 있습니다.

gcloud beta compute instance-groups managed update INSTANCE_GROUP_NAME \
    --update-policy-type=TYPE

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: 그룹 이름
  • NEW_TEMPLATE: 그룹의 새 템플릿 이름
  • TYPE: 업데이트 유형(opportunistic 또는 proactive)

REST

영역 또는 리전 MIG 리소스에 대해 patch 메서드를 호출합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
  "updatePolicy": {
    "type": "TYPE" # Choose an opportunistic or proactive update
  },
  "versions": [{
    "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
    }]
}

다음을 바꿉니다.

  • PROJECT_ID: MIG가 있는 프로젝트
  • REGION: MIG가 있는 리전. 영역 MIG의 경우 regions/REGIONzones/ZONE으로 바꿉니다.
  • INSTANCE_GROUP_NAME: 그룹 이름
  • NEW_TEMPLATE: 그룹의 새 템플릿 이름
  • TYPE: 업데이트 유형(OPPORTUNISTIC 또는 PROACTIVE)

새 템플릿을 설정한 후 MIG의 신규 및 기존 VM에 템플릿을 적용하는 방법에 대한 자세한 내용은 다음 페이지를 참조하세요.

그룹의 업데이트 정책 유형 검사

gcloud CLI 또는 REST를 사용하여 MIG의 현재 구성된 업데이트 정책 유형('상황별' 또는 '사전형') 및 기타 업데이트 정책 설정을 볼 수 있습니다.

gcloud

describe 명령어를 사용하고 updatePolicy 설정만 나열하도록 --format 플래그를 포함합니다.

gcloud beta compute instance-groups managed describe INSTANCE_GROUP_NAME \
    --format="(updatePolicy)"

REST

영역 또는 리전 MIG에서 GET 요청을 수행하고 updatePolicy 필드를 확인합니다.

GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

정책 유형을 변경하려면 사전형 또는 상황별 업데이트 설정을 참조하세요.

정지 및 중지된 VM 업데이트

MIG의 VM 풀을 정지하고 중지한 경우 실행 중인 다른 VM을 업데이트하는 것처럼 선택적으로(상황별) 정지 또는 중지된 VM을 업데이트할 수 있습니다. 자동(사전) 업데이트를 구성하면 MIG는 VM을 다음 순서대로 업데이트합니다.

  1. 실행 중, 정지, 중지된 VM
  2. 상태가 SUSPENDING 또는 STOPPING인 VM

자동 업데이트의 경우 MIG는 실행 중인 대상 VM 수를 기준으로만 최대 초과 개수최대 사용 불가능 개수를 계산하며 대기 풀의 VM을 고려하지 않습니다.

자동 업데이트에서 그룹에 있는 VM을 바꿔야 하는 경우 MIG는 다음을 수행합니다.

  1. 정지 및 중지된 VM을 삭제합니다.
  2. 새 인스턴스 템플릿으로 새 VM을 만듭니다.
  3. 초기화 프로세스를 수행합니다.
  4. VM을 정지하거나 중지합니다.

자동 업데이트에서 그룹의 VM을 새로고침하거나 다시 시작해야 하는 경우 MIG는 다음을 수행합니다.

  1. VM을 재개하거나 시작합니다.
  2. VM이 실행될 때 VM에서 업데이트를 수행합니다.
  3. 초기화 프로세스를 수행합니다.
  4. VM을 정지하거나 중지합니다.

카나리아 업데이트

VM을 정지하거나 중지한 MIG에서 카나리아 업데이트를 시작하려면 다음이 적용됩니다.

  • manual 대기 정책 모드에서 MIG는 업데이트를 적용할 VM 수나 백분율에 따라 실행 중인 VM만 업데이트합니다. 정지 및 중지된 VM은 이전 버전으로 유지됩니다.
  • scale-out-pool 대기 정책 모드에서는 카나리아 업데이트를 MIG에서 시작할 수 없습니다.

versions 필드와 instanceTemplate 필드의 관계

REST를 사용하는 경우 instanceGroupManagers.versionsregionInstanceGroupManagers.versions 필드를 사용하여 영역 및 리전 MIG의 인스턴스 템플릿을 구성하는 것이 좋습니다.

기존 instanceTemplate 필드와 versions 필드는 MIG가 인VM을 만드는 데 사용할 인스턴스 템플릿을 지정하므로 기능적으로 중복됩니다. 그러나 versions 필드만 사용하면 고급 템플릿(카나리아) 구성 두 개를 지정할 수 있습니다.

이전 버전과의 호환성을 위해 MIG에서 versions 필드만 사용하도록 전환하는 것이 좋지만 최상위 instanceTemplate 필드도 계속 설정할 수 있습니다. 최상위 instanceTemplate 필드와 versions 필드를 동시에 사용하면 모호해지고 혼란스러워집니다.

update() 또는 patch() 메서드를 호출할 때 instanceTemplate 필드와 versions 필드를 모두 지정하면 다음과 같은 세 가지 결과가 발생할 수 있습니다.

  • 두 필드 모두 동일한 값으로 설정합니다.

    유효한 요청입니다. 이 경우 모호성이 없으면 새 인스턴스 템플릿이 MIG에 적용됩니다.

    예를 들어 다음 요청에서 최상위instanceTemplateversions 필드는 기존 현재 템플릿과 다른 동일한 인스턴스 템플릿을 지정하므로 MIG가 새 인스턴스 템플릿으로 업데이트됩니다.

    {
     "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    
  • 일치하지 않는 두 필드를 모두 설정하지만 하나의 값만 MIG의 현재 인스턴스 템플릿과 다릅니다.

    유효한 요청입니다. 현재 설정과 다른 필드가 의도한 값으로 사용됩니다. 예를 들어 update() 메서드를 호출하고 두 필드 모두에 적용하면 다음 한 필드만 업데이트됩니다.

    {
     "instanceTemplate": "global/instanceTemplates/CURRENT_TEMPLATE",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    
  • 일치하지 않는 두 필드를 모두 설정하지만 두 값 모두 MIG의 현재 인스턴스 템플릿과 다릅니다.

    이 설정은 명확한 인텐트가 없으므로 유효하지 않으며 오류를 반환합니다.

    {
     "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
     "versions": [
      {
       "instanceTemplate": "global/instanceTemplates/A_DIFFERENT_NEW_TEMPLATE"
      }
     ],
     "updatePolicy": {
       "type": "PROACTIVE"
     }
    }
    

versions 필드, instanceTemplate 필드, get() 메서드

최상위 instanceTemplate 필드나 versions 필드 또는 둘 다를 통해 하나의 인스턴스 템플릿만 지정하는 경우 get() 메서드가 응답으로 두 필드를 모두 반환합니다. 이렇게 하면 새 versions 필드가 이전 버전과 호환됩니다. 이 두 필드 중 하나에 단일 인스턴스 템플릿을 지정하면 get()instanceTemplate 필드에서 반환하는 메서드는 변경되지 않습니다.

versions 필드에 2개의 인스턴스 템플릿이 지정된 경우 get() 메서드가 빈 최상위 instanceTemplate 필드를 반환합니다. 카나리아 업데이트 중에 필드가 사용되지 않도록 최상위 instanceTemplate 필드에 두 인스턴스 템플릿 구성을 명확하게 표현할 수 있는 방법은 없습니다.

versions 필드 및 setInstanceTemplate() 메서드

이전 버전과의 호환성을 위해 setInstanceTemplate() 메서드는 이전과 동일하게 동작하므로 MIG에서 VM을 만드는 데 사용하는 템플릿을 변경할 수 있습니다. 이 메서드를 호출하면 versions 필드가 setInstanceTemplate() 메서드로 지정된 인스턴스 템플릿으로 재정의됩니다.

또한 setInstanceTemplate() 메서드는 updatePolicyOPPORTUNISTIC으로 설정합니다. 그러면 MIG에서 versions 필드에 명시적으로 지정되지 않은 인스턴스 템플릿을 적극적으로 배포하는 것을 방지할 수 있습니다.

다음 단계