MIG에서 VM 구성 업데이트를 자동으로 적용


이 문서에서는 관리형 인스턴스 그룹(MIG)에서 가상 머신(VM) 인스턴스에 구성 업데이트를 자동으로 적용하는 방법을 설명합니다.

Compute Engine은 사용하는 구성 구성요소(인스턴스 템플릿, 선택적인 전체 인스턴스 구성, 선택적인 스테이트풀(Stateful) 구성)을 기반으로 MIG에서 VM을 유지 관리합니다.

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

업데이트된 구성을 기존 VM에 적용하려면 사전 예방적 업데이트 유형으로도 알려진 자동 업데이트를 설정할 수 있습니다. MIG는 그룹 VM의 전체 또는 하위 집합에 구성 업데이트를 자동으로 롤아웃합니다. 배포 속도, 서비스 중단 수준을 제어할 수 있고 카나리아 업데이트를 사용하여 MIG가 새 구성으로 업데이트하는 인스턴스 수를 제어할 수 있습니다. 새 구성을 지정한 후에는 추가 입력을 제공할 필요가 없으며 업데이트가 자체적으로 완료됩니다.

또는 MIG의 신규 인스턴스 또는 특정 인스턴스에만 새 구성을 선택적으로 적용하려면 MIG에서 선택적으로 VM 구성 업데이트 적용을 참조하세요. 결정을 돕기 위해서는 기존 VM에 새 구성 적용 방법을 참조하세요.

시작하기 전에

  • 스테이트풀(Stateful) 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

제한사항

  • 스테이트풀(Stateful) MIG가 있고 자동화된 순차적 업데이트를 사용하려면 인스턴스를 대체할 때 인스턴스 이름을 유지하거나, 그에 상응하는 방식으로 교체 메서드RECREATE로 설정해야 합니다.

기본 순차적 업데이트 시작하기

기본 순차적 업데이트는 모든 인스턴스가 의도된 최신 구성으로 업데이트될 때까지 MIG의 모든 인스턴스에 점진적으로 적용되는 업데이트입니다. 순차적 업데이트는 이미 최신 구성에 있는 인스턴스를 자동으로 건너뜁니다.

업데이트 중 오프라인으로 설정할 수 있는 인스턴스 수, 인스턴스 업데이트 간격, 새 템플릿의 적용 범위(인스턴스 전체 또는 일부) 등의 순차적 업데이트의 다양한 측면을 제어할 수 있습니다.

순차적 업데이트를 수행할 때 다음 사항에 유의해야 합니다.

  • 업데이트는 인텐트를 기반으로 합니다. 초기 업데이트 요청을 수행할 때 Compute Engine API는 요청이 유효한지 확인하기 위해 성공 응답을 반환하지만, 이것이 업데이트 성공을 나타내지는 않습니다. 업데이트가 성공적으로 배포되었는지 확인하려면 그룹의 상태를 확인해야 합니다.

  • Instance Group Updater API는 선언적 API입니다. 이 API에는 명시적 함수 호출이 아니라 MIG의 사후 업데이트 구성을 구체적으로 지정하는 요청이 필요합니다.

  • 자동 업데이트는 MIG에서 최대 2개의 인스턴스 템플릿 버전을 지원합니다. 즉, 그룹에 다음 2개의 인스턴스 템플릿 버전을 지정할 수 있으므로 카나리아 업데이트를 수행하는 데 유용합니다.

업데이트가 그룹에 있는 인스턴스 모두에 적용되는 기본 순차적 업데이트를 시작하려면 아래 안내를 따르세요.

콘솔

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

    인스턴스 그룹으로 이동

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

  3. VM 업데이트를 클릭합니다.

  4. 새 템플릿 아래의 드롭다운 목록을 클릭하고 업데이트할 새 템플릿을 선택합니다. 대상 크기가 자동으로 100%로 설정되어, 모든 인스턴스가 업데이트됨을 나타냅니다.

  5. 업데이트 구성에서 선택 메뉴를 확장하고 업데이트 유형으로 자동을 선택합니다. 다른 옵션은 기본값 그대로 둡니다.

  6. VM 업데이트를 클릭하여 업데이트를 시작합니다.

gcloud

rolling-action start-update 명령어를 사용합니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=INSTANCE_TEMPLATE_NAME
    [--zone=ZONE | --region=REGION]

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: MIG 이름입니다.
  • INSTANCE_TEMPLATE_NAME: 새 인스턴스 템플릿
  • ZONE: 영역 MIG의 경우 영역 제공
  • REGION: 리전 MIG의 경우 리전을 제공합니다.

REST

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

예를 들어 리전 MIG의 경우 다음 요청은 전체 인스턴스를 자동으로 새 인스턴스 템플릿으로 업데이트하는 데 필요한 최소 구성을 보여줍니다.

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

{
  "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
  "updatePolicy": {
    "type": "PROACTIVE"
   }
}

요청한 후에는 업데이트를 모니터링하여 업데이트가 언제 완료되었는지 알 수 있습니다.

고급 구성의 경우 다른 업데이트 옵션을 포함합니다. 별도로 지정하지 않은 경우 maxSurgemaxUnavailable 옵션의 기본값은 1에 해당 영역 수를 곱한 값입니다. 즉, 각 영역마다 인스턴스 1개만 오프라인으로 전환되며, MIG는 업데이트 도중 영역별로 추가 인스턴스를 1개만 만듭니다.

업데이트 옵션 구성

보다 복잡한 업데이트의 경우 다음 섹션의 설명과 같이 추가적인 옵션을 구성할 수 있습니다.

유형 업데이트

관리형 인스턴스 그룹은 두 가지 유형의 업데이트를 지원합니다.

  • 자동 또는 사전형 업데이트
  • 선택적 또는 상황별 업데이트

업데이트를 자동으로 적용하려면 유형을 사전형으로 설정합니다.

또는 자동 업데이트가 중단을 너무 많이 유발할 수 있는 경우 상황별 업데이트를 수행할 수 있습니다. MIG는 선택된 인스턴스에서 업데이트를 수동으로 시작하거나 새 인스턴스를 만들 때만 상황별 업데이트를 적용합니다. 자동 확장 처리 등의 사용자 또는 다른 서비스가 MIG의 크기를 조정하면 새 인스턴스를 만들 수 있습니다. Compute Engine은 기존 인스턴스에 상황별 업데이트를 적용하기 위한 요청을 적극적으로 시작하지 않습니다.

자동 및 선택적 업데이트에 대한 자세한 내용은 기존 VM에 새 구성을 적용하는 방법을 참조하세요.

최대 초과 개수

자동 업데이트 중에 MIG가 targetSize 이상으로 만들 수 있는 새 인스턴스 수를 구성하려면 maxSurge 옵션을 사용합니다. 예를 들어 maxSurge를 5로 설정하면 MIG는 새 인스턴스 템플릿을 사용하여 새 인스턴스를 대상 크기보다 최대 5개까지 더 많이 만듭니다. maxSurge 값을 높게 설정하면 추가되는 인스턴스 덕분에 업데이트 속도가 향상됩니다. 이때 추가 인스턴스는 Compute Engine 가격표에 따라 비용이 청구됩니다.

고정된 숫자를 지정할 수 있습니다. 또는 그룹에 인스턴스가 10개 이상 있는 경우 백분율을 지정할 수 있습니다. 백분율을 설정하면 업데이터는 필요에 따라 인스턴스 수를 반올림합니다.

maxSurge 값을 설정하지 않으면 기본값이 사용됩니다. 영역 MIG의 경우 maxSurge의 기본값은 1입니다. 리전 MIG의 경우 기본값은 그룹과 연결된 영역 수(3)입니다.

maxSurge는 추가 리소스를 지원하기에 충분한 할당량 또는 리소스가 있는 경우에만 작동합니다.

업데이트 시 VM을 교체할 필요가 없는 경우 이 옵션은 무시됩니다. 최소 작업 옵션을 설정하여 업데이트 중에 VM을 강제 교체할 수 있습니다.

최대 사용 불가 개수

자동 업데이트 중에 언제든지 사용할 수 없는 인스턴스 수를 구성하려면 maxUnavailable 옵션을 사용합니다. 예를 들어 maxUnavailable을 5로 설정하면 업데이트를 위해 한 번에 5개의 인스턴스만 오프라인으로 설정됩니다. 이 옵션을 사용하여 업데이트로 인해 서비스가 얼마나 중단되는지 제어하고 업데이트가 배포되는 속도를 조정합니다.

이 숫자에는 다른 이유로 사용할 수 없는 인스턴스도 포함됩니다. 예를 들어 그룹의 크기 조절이 진행 중인 경우 생성 중인 인스턴스는 사용하지 못할 수 있습니다. 이러한 인스턴스는 maxUnavailable 수에 포함됩니다.

고정된 숫자를 지정할 수 있습니다. 또는 그룹에 인스턴스가 10개 이상 있는 경우 백분율을 지정할 수 있습니다. 백분율을 설정하면 업데이터는 필요에 따라 인스턴스 수를 내림합니다.

업데이트 중에 사용할 수 없는 머신을 사용하지 않으려면 maxUnavailable 값을 0으로, maxSurge 값을 0보다 큰 값으로 설정합니다. 이 설정을 사용하면 대체용 새 머신이 생성되어 실행된 후에만 Compute Engine에서 각 오래된 머신을 제거합니다.

maxUnavailable 값을 설정하지 않으면 기본값이 사용됩니다. 영역 MIG의 경우 기본값은 1입니다. 리전 MIG의 경우 기본값은 그룹과 연결된 영역 수(3)입니다.

최소 대기 시간

minReadySec 옵션을 사용하여 새 인스턴스 또는 다시 시작된 인스턴스를 업데이트한 것으로 간주하기 전에 대기할 시간을 지정합니다. 이 옵션을 사용하면 자동 업데이트가 배포되는 속도를 제어할 수 있습니다. 다음 두 조건이 모두 충족되면 타이머가 시작됩니다.

  • 인스턴스의 상태가 RUNNING입니다.
  • 상태 확인이 사용 설정되면 상태 확인이 HEALTHY를 반환합니다.

상태 확인에서 정상을 반환하기 위해 업데이터는 다음 조건을 기다립니다.

  1. 상태 확인에서 HEALTHY를 반환할 때까지 MIG의 autohealingPolicies.initialDelaySec 값에 지정된 기간까지 대기합니다.
  2. 그런 다음 minReadySec에서 지정된 시간 동안 대기합니다.

상태 확인이 initialDelaySec 내에서 HEALTHY를 반환하지 않으면 업데이터가 VM 인스턴스를 비정상으로 선언하고 업데이트를 중지할 수 있습니다. initialDelaySecminReadySec 기간 중 VM 인스턴스가 확인을 기다리는 동안 인스턴스의 currentActionVERIFYING 상태가 됩니다. 하지만 기본 VM 인스턴스 상태는 RUNNING으로 유지됩니다.

그룹에 대한 상태 확인이 없으면 인스턴스의 상태가 RUNNING일 때 타이머가 시작됩니다.

minReadySec 필드의 최댓값은 3,600초(1시간)입니다.

다음 다이어그램은 대상 크기, 최대 사용 불가 개수, 최대 초과 개수, 최소 대기 시간 옵션이 인스턴스에 어떤 영향을 미치는지 보여줍니다. 대상 크기에 대한 자세한 내용은 카나리아 업데이트를 참조하세요.

업데이트 정책 옵션이 요청에 미치는 영향

최소 작업

최소 작업 옵션을 사용하여 중단을 최소화하거나 팔요 이상으로 더 많이 중단을 유발하는 작업을 적용합니다. 예를 들어 Compute Engine에서 메타데이터를 변경하기 위해 VM을 다시 시작할 필요가 없습니다. 그러나 애플리케이션이 VM이 다시 시작될 때에만 인스턴스 메타데이터를 읽는 경우에는 최소 작업을 다시 시작으로 설정하여 메타데이터 변경사항을 가져오면 됩니다.

업데이트에 이 플래그로 설정한 것보다 더 많이 중단을 유발하는 작업이 필요한 경우 Compute Engine이 업데이트를 실행하는 데 필요한 작업을 수행합니다. 예를 들어 최소 작업으로 다시 시작을 지정하면 업데이터가 업데이트 적용을 위해 인스턴스를 다시 시작하려고 시도합니다. 하지만 인스턴스를 다시 시작하여 수행할 수 없는 OS를 변경하면 업데이터가 그룹의 인스턴스를 새 VM 인스턴스로 바꿉니다.

유효한 옵션을 포함한 자세한 내용은 순차적 업데이트 중에 중단 수준 제어를 참조하세요.

중단을 가장 많이 유발하는 작업

업데이트를 허용할 수 있는 수준보다 더 많이 중단을 유발하는 경우 중단을 가장 많이 유발하는 작업 옵션을 사용하여 업데이트를 방지하세요. 이 설정으로 인해 업데이트를 완료할 수 없는 경우 업데이트가 실패하고 VM이 이전 구성을 유지합니다.

자세한 내용은 순차적 업데이트 중 중단 수준 제어를 참조하세요.

대체 방법

기본적으로 MIG를 사전 업데이트하면 그룹에서 VM 인스턴스를 삭제하고 새 이름을 사용하는 새 인스턴스로 바꿉니다. VM 인스턴스 이름을 보존해야 하는 경우 replacementMethod 옵션을 사용하세요.

특정 인스턴스 이름을 사용하는 애플리케이션이나 시스템이 있는 경우 기존 인스턴스 이름을 유지하는 것이 유용할 수 있습니다. 예를 들어 Memcached와 같은 일부 애플리케이션에는 검색 서비스가 없으므로 이러한 애플리케이션은 인스턴스 이름을 사용합니다. 따라서 인스턴스 이름이 변경될 때마다 애플리케이션에서 특정 VM 연결이 손실됩니다.

인스턴스 이름을 보존하려면 gcloud CLI 또는 Compute Engine API를 사용하여 MIG를 업데이트하는 경우 교체 메서드를 SUBSTITUTE 대신 RECREATE로 설정합니다. 또는 Google Cloud 콘솔에서 MIG를 업데이트하는 경우 인스턴스를 교체할 때 인스턴스 이름 유지 체크박스를 선택합니다.

관리형 인스턴스 교체 메서드

유효한 replacementMethod 값은 다음과 같습니다.

  • SUBSTITUTE(기본값) 이전 VM 인스턴스가 종료되기 전에 새 VM이 생성되므로 업데이트 중에 VM 인스턴스를 더 빠르게 교체합니다. 그러나 이전 인스턴스에서 인스턴스 이름을 계속 사용하므로 이 인스턴스 이름은 유지되지 않습니다.

  • RECREATE. 업데이트를 통해 인스턴스 이름을 유지합니다. 이전 VM이 종료되면 Compute Engine에서 인스턴스 이름을 사용할 수 있게 만듭니다. 그런 다음 Compute Engine은 동일한 이름으로 새 인스턴스를 만듭니다. 이 모드를 사용하려면 maxSurge0으로 설정해야 합니다.

자세한 내용은 인스턴스 이름 유지를 참조하세요.

추가 업데이트 예시

다음은 일반적인 구성 옵션을 사용하는 몇 가지 명령줄 예시입니다.

모든 VM 인스턴스의 순차적 업데이트를 수행하지만 대상 크기보다 최대 5개 더 많은 새 인스턴스를 한 번에 생성

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --max-surge=5 \
    [--zone=ZONE | --region=REGION]

새 인스턴스를 사용 가능으로 표시하기 전 최대 3개의 사용 불가능 머신과 최소 3분의 대기 시간을 사용하여 순차적 업데이트 수행

gcloud beta compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --min-ready=3m \
    --max-unavailable=3 \
    [--zone=ZONE | --region=REGION]

모든 VM 인스턴스의 순차적 업데이트를 수행하지만 대상 크기보다 최대 10% 이상인 새 인스턴스를 한 번에 만들기

예를 들어 1,000개의 인스턴스가 있는 상태에서 다음 명령어를 실행하면 업데이터는 이전 인스턴스 템플릿을 실행하는 인스턴스 삭제를 시작하기 전에 최대 100개의 인스턴스를 만듭니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    --max-surge=10% \
    [--zone=ZONE | --region=REGION]

카나리아 업데이트

카나리아 업데이트는 그룹의 인스턴스 하위 집합에 적용되는 업데이트입니다. 카나리아 업데이트를 사용하면 중단을 유발할 수 있는 업데이트를 모든 인스턴스에 출시하는 대신 인스턴스의 임의 하위 집합에서 새 기능이나 업그레이드를 테스트할 수 있습니다. 업데이트가 잘 진행되지 않는 경우 인스턴스의 하위 집합만 롤백하면 사용자 작업 중단을 최소화할 수 있습니다.

카나리아 업데이트는 표준 순차적 업데이트와 동일하지만 업데이트해야 하는 인스턴스 수가 인스턴스 그룹의 전체 크기보다 작습니다. 표준 순차적 업데이트와 마찬가지로 추가 옵션을 구성하여 서비스에 대한 장애 수준을 제어할 수 있습니다.

카나리아 업데이트 시작

카나리아 업데이트를 시작하려면 최대 2개의 인스턴스 템플릿 버전(대개 카나리아 테스트를 수행할 새 인스턴스 템플릿과 나머지 인스턴스를 위한 현재 인스턴스 템플릿)을 지정합니다. 예를 들어 인스턴스의 20%는 NEW_INSTANCE_TEMPLATE을 기반으로 생성되고 나머지 인스턴스는OLD_INSTANCE_TEMPLATE에서 계속 실행되도록 지정할 수 있습니다. 한 번에 인스턴스 템플릿을 3개 이상 지정할 수 없습니다. NEW_INSTANCE_TEMPLATE은 MIG와 동일한 리전의 리전 인스턴스 템플릿이나 전역 인스턴스 템플릿일 수 있습니다.

항상 카나리아 버전의 대상 크기(targetSize)를 지정해야 합니다. 카나리아 버전의 대상 크기를 생략하면 카나리아 업데이트를 시작할 수 없습니다. 예를 들어 10%의 인스턴스를 카나리아 업데이트에 사용하도록 지정하면 나머지 90%는 변경되지 않고 현재 인스턴스 템플릿을 사용합니다.

콘솔

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

    인스턴스 그룹으로 이동

  2. 업데이트할 관리형 인스턴스 그룹을 선택합니다.
  3. VM 업데이트를 클릭합니다.
  4. 두 번째 템플릿 추가를 클릭하고 카나리아 테스트를 수행할 새 인스턴스 템플릿을 선택합니다.
  5. 대상 크기 아래에서 새 인스턴스 템플릿에 대해 카나리아 테스트를 수행하는 데 사용할 인스턴스의 백분율이나 고정된 숫자를 입력합니다.
  6. 원하는 경우 기타 업데이트 옵션을 구성할 수 있습니다.
  7. VM 업데이트를 클릭하여 업데이트를 시작합니다.

gcloud

rolling-action start-update 명령어를 사용합니다. 현재 템플릿과 새 템플릿을 모두 제공하여 각 템플릿을 사용해야 하는 인스턴스 수를 명시합니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=CURRENT_INSTANCE_TEMPLATE_NAME \
    --canary-version=template=NEW_TEMPLATE,target-size=SIZE \
    [--zone=ZONE | --region=REGION]

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: 인스턴스 그룹 이름입니다.
  • CURRENT_INSTANCE_TEMPLATE_NAME: 인스턴스 그룹이 현재 실행 중인 인스턴스 템플릿입니다.
  • NEW_TEMPLATE: 카나리아를 수행할 새 템플릿입니다.
  • SIZE: 이 업데이트를 적용할 인스턴스의 수 또는 백분율입니다. --canary-version 템플릿에 target-size 속성을 적용해야 합니다. 그룹에 인스턴스가 10개 이상 있는 경우에만 백분율을 설정할 수 있습니다.
  • ZONE: 영역 MIG의 경우 영역을 제공합니다.
  • REGION: 리전 MIG의 경우 리전을 제공합니다.

예를 들어 다음 명령어는 그룹의 인스턴스 중 10%에 example-template-B를 적용하는 카나리아 업데이트를 수행합니다.

gcloud compute instance-groups managed rolling-action start-update example-mig \
    --version=template=example-template-A \
    --canary-version=template=example-template-B,target-size=10%

REST

리전별 또는 영역별 MIG 리소스에서 patch 메서드를 호출합니다. 요청 본문에 현재 인스턴스 템플릿과 카나리아를 수행할 새 인스턴스 템플릿을 모두 포함합니다. 예를 들면 다음과 같습니다.

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

{
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
   "targetSize": {
    "[percent|fixed]": NUMBER|PERCENTAGE # Use `fixed` for a specific number of instances
   }
  },
  {
   "instanceTemplate": "global/instanceTemplates/CURRENT_INSTANCE_TEMPLATE_NAME"
  }
 ]
}

다음을 바꿉니다.

  • NEW_TEMPLATE: 카나리아 테스트를 수행할 새 템플릿의 이름입니다.
  • NUMBER|PERCENTAGE: 이 업데이트에 대해 카나리아 테스트를 수행할 인스턴스의 고정된 숫자나 백분율입니다. 그룹에 인스턴스가 10개 이상 있는 경우에만 백분율을 설정할 수 있습니다. 그렇지 않으면 고정된 숫자를 제공합니다.
  • CURRENT_INSTANCE_TEMPLATE_NAME: 그룹이 실행 중인 현재 인스턴스 템플릿의 이름입니다.

추가 옵션은 업데이트 옵션 구성을 참조하세요.

요청한 후에는 업데이트를 모니터링하여 업데이트가 언제 완료되었는지 알 수 있습니다.

카나리아 업데이트 롤포워드

카나리아 업데이트를 실행한 후 업데이트를 MIG의 100%로 커밋할지 아니면 롤백할지 결정할 수 있습니다.

콘솔

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

    인스턴스 그룹으로 이동

  2. 업데이트할 관리형 인스턴스 그룹을 선택합니다.
  3. VM 업데이트를 클릭합니다.
  4. 새 템플릿 아래에서 카나리아 템플릿의 대상 크기를 100%로 업데이트하여 템플릿을 모든 인스턴스로 롤포워드합니다. 또는 기본 템플릿을 카나리아 템플릿으로 바꾸고 두 번째 템플릿 필드를 삭제할 수 있습니다.
  5. VM 업데이트를 클릭하여 업데이트를 시작합니다.

gcloud

카나리아 업데이트에 커밋하려면 다른 rolling-action start-update 명령어를 실행하여 업데이트를 롤포워드하면서 version 플래그만 지정하고 --canary-version 플래그를 생략합니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=NEW_TEMPLATE \
    [--zone=ZONE | --region=REGION]

REST

리전별 또는 영역별 MIG 리소스에서 patch 메서드를 호출합니다. 요청 본문에서 새 인스턴스 템플릿을 version으로 지정하고 요청 본문에서 이전 인스턴스 템플릿을 생략합니다. 업데이트를 인스턴스 100%로 롤아웃하려면 대상 크기 사양을 생략합니다. 예를 들면 다음과 같습니다.

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

{
"versions": [
   {
   "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE" # New instance template
   }
 ]
}

업데이트 모니터링하기

업데이트를 시작한 후 새 구성이 영향을 받는 모든 인스턴스에 출시되는 데 다소 시간이 걸릴 수 있습니다. 다음을 확인하여 업데이트 진행 상태를 모니터링할 수 있습니다.

그룹 상태

그룹 수준에서 Compute Engine은 versionTarget.isReached 플래그isStable 플래그가 포함된 status라는 읽기 전용 필드를 채웁니다. gcloud CLI 또는 REST를 사용하여 이러한 플래그에 액세스할 수 있습니다. Google Cloud 콘솔을 사용하여 업데이트 중인 현재 및 계획된 인스턴스 수를 확인할 수도 있습니다.

콘솔

그룹의 세부정보 페이지로 이동하여 그룹의 순차적 업데이트를 모니터링할 수 있습니다.

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

    인스턴스 그룹으로 이동

  2. 모니터링할 관리형 인스턴스 그룹을 선택합니다. 그룹의 개요 페이지에 각 인스턴스가 사용 중인 템플릿이 표시됩니다.
  3. 세부정보를 보려면 세부정보 탭을 클릭합니다.
  4. 인스턴스 템플릿 아래에서 각 인스턴스 템플릿에 대한 인스턴스의 현재 및 목표 수와 업데이트 매개변수를 확인할 수 있습니다.

gcloud

describe 명령어를 사용합니다.

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

gcloud compute instance-groups managed wait-until 명령어--version-target-reached 플래그와 함께 사용하여 그룹의 status.versionTarget.isReachedtrue로 설정될 때까지 기다릴 수도 있습니다.

gcloud compute instance-groups managed wait-until INSTANCE_GROUP_NAME \
    --version-target-reached \
    [--zone=ZONE | --region=REGION]

REST

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

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

업데이트 출시 완료 여부 확인(베타)

MIG의 status.versionTarget.isReached 필드 값을 확인하여 업데이트 롤아웃이 완료되었는지 확인합니다.

  • status.versionTarget.isReachedtrue로 설정되면 대상 버전을 통해 모든 VM 인스턴스가 생성되었거나 생성되고 있음을 나타냅니다.

  • status.versionTarget.isReachedfalse로 설정되면 하나 이상의 VM이 아직 대상 버전을 사용하지 않음을 나타냅니다. 또는 카나리아 업데이트의 경우 false는 대상 버전을 사용하는 VM 수가 대상 크기와 일치하지 않음을 나타냅니다.

관리형 인스턴스 그룹이 안정적인지 확인

그룹의 status.isStable 필드 값을 확인하여 관리형 인스턴스 그룹의 모든 인스턴스가 실행 중이고 정상 상태인지 확인합니다.

status.isStablefalse로 설정되면 변경사항이 활성 또는 대기 중 상태이거나 MIG 자체가 수정 중임을 나타냅니다.

status.isStabletrue로 설정되면 다음을 나타냅니다.

  • MIG의 인스턴스 중 변경 중인 인스턴스가 없으며, 모든 인스턴스의 currentActionNONE입니다.
  • MIG의 인스턴스에 대기 중인 변경사항이 없습니다.
  • MIG 자체가 수정되지 않습니다.

MIG는 다양한 방법으로 수정할 수 있으므로 MIG의 안정성은 여러 요소에 따라 달라집니다. 예를 들면 다음과 같습니다.

  • 새 인스턴스 템플릿의 출시를 요청합니다.
  • MIG의 인스턴스를 생성, 삭제, 크기 조절 또는 업데이트하는 요청을 실행합니다.
  • 자동 확장 처리가 MIG의 크기 조절을 요청합니다.
  • 자동 복구 리소스가 MIG에 속한 하나 이상의 비정상 인스턴스를 교체합니다.
  • 리전 MIG에 속한 인스턴스 중 일부가 재배포됩니다.

모든 작업이 완료되면 해당 MIG에 대한 status.isStable이 다시 true로 설정됩니다.

인스턴스에서 현재 작업 실행

Google Cloud CLI 또는 REST를 사용하여 관리형 인스턴스 그룹의 인스턴스에 대한 세부정보를 확인합니다. 세부정보에는 그룹이 해당 인스턴스에서 수행하는 인스턴스 상태 및 현재 작업이 포함됩니다.

gcloud

모든 관리형 인스턴스

그룹의 모든 인스턴스에 대해 상태 및 현재 작업을 확인하려면 list-instances 명령어를 사용합니다.

gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

이 명령어는 상태, 현재 작업, 기타 세부정보를 포함하여 그룹에 있는 인스턴스 목록을 반환합니다.

NAME               ZONE           STATUS   HEALTH_STATE  ACTION  INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
vm-instances-9pk4  us-central1-f                          CREATING  my-new-template
vm-instances-h2r1  us-central1-f  STOPPING                DELETING  my-old-template
vm-instances-j1h8  us-central1-f  RUNNING                 NONE      my-old-template
vm-instances-ngod  us-central1-f  RUNNING                 NONE      my-old-template

상태 확인을 설정하지 않으면 HEALTH_STATE 열은 비어 있습니다.

특정 관리형 인스턴스

그룹에서 특정 인스턴스의 상태 및 현재 작업을 확인하려면 describe-instance 명령어를 사용합니다.

gcloud compute instance-groups managed describe-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    [--zone=ZONE | --region=REGION]

이 명령어는 인스턴스 상태, 현재 작업, 스테이트풀(Stateful) MIG의 예약 상태를 포함하여 인스턴스에 대한 세부정보를 반환합니다.

currentAction: NONE
id: '6789072894767812345'
instance: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-mig-hz41
instanceStatus: RUNNING
name: example-mig-hz41
preservedStateFromConfig:
  metadata:
    example-key: example-value
preservedStateFromPolicy:
  disks:
    persistent-disk-0:
      autoDelete: NEVER
      mode: READ_WRITE
      source: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/example-mig-hz41
version:
  instanceTemplate: https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template

REST

리전별 또는 영역별 MIG 리소스에서 listManagedInstances 메서드를 호출합니다. 예를 들어 영역 MIG 리소스에서 인스턴스에 대한 세부정보를 보려면 다음 요청을 수행합니다.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/listManagedInstances

이 호출은 각 인스턴스의 instanceStatuscurrentAction을 비롯한 MIG의 인스턴스 목록을 반환합니다.

{
 "managedInstances": [
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-prvp",
   "id": "5317605642920955957",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-pz5j",
   "currentAction": "DELETING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-w2t5",
   "id": "2800161036826218547",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  }
 ]
}

유효한 instanceStatus 필드 값 목록을 보려면 VM 인스턴스 수명 주기를 참조하세요.

인스턴스를 변경 중이면 관리형 인스턴스 그룹이 인스턴스의 currentAction 필드를 다음 작업 중 하나로 설정하여 변경 상태를 추적할 수 있게 합니다. 그렇지 않으면 currentAction 필드가 NONE으로 설정됩니다.

가능한 currentAction 값은 다음과 같습니다.

  • ABANDONING: 인스턴스가 MIG에서 삭제되고 있습니다.
  • CREATING: 인스턴스를 만드는 중입니다.
  • CREATING_WITHOUT_RETRIES: 인스턴스가 재시도 없이 생성되고 있습니다. 첫 번째 시도에서 인스턴스가 생성되지 않은 경우에도 MIG는 인스턴스를 다시 교체하지 않습니다.
  • DELETING: 인스턴스가 삭제되고 있습니다.
  • RECREATING: 인스턴스를 교체하는 중입니다.
  • REFRESHING: 인스턴스가 현재 대상 풀에서 삭제되고 현재 대상 풀 목록에 다시 추가되는 중입니다. 이 목록은 기존 대상 풀과 동일하거나 다를 수 있습니다.
  • RESTARTING: 인스턴스가 stopstart 메서드를 사용하여 다시 시작되고 있습니다.
  • RESUMING: 인스턴스가 정지된 후 재개되는 중입니다.
  • STARTING: 인스턴스가 중지된 후 시작하는 중입니다.
  • STOPPING: 인스턴스가 중지되는 중입니다.
  • SUSPENDING - 인스턴스를 일시정지하는 중입니다.
  • VERIFYING: 인스턴스가 생성되었으며 확인되고 있습니다.
  • NONE: 인스턴스에서 수행 중인 작업이 없습니다.

업데이트 롤백

이전 버전으로 업데이트를 롤백하는 데 사용되는 명시적인 명령어는 없지만 새 업데이트를 요청하고 롤백 대상 인스턴스 템플릿을 전달하여 완전히 커밋된 업데이트나 카나리아 업데이트를 롤백할 수 있습니다.

gcloud

예를 들어 다음 gcloud CLI 명령어는 최대한 빨리 업데이트를 롤백합니다. OLD_INSTANCE_TEMPLATE을 롤백 대상 인스턴스 템플릿의 이름으로 바꿉니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --version=template=OLD_INSTANCE_TEMPLATE_NAME \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

REST

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

요청 본문에서 이전 인스턴스 템플릿을 version으로 지정합니다.

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

{
  "updatePolicy":
  {
    "maxUnavailable":
    {
      "percent": 100
    }
  },
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/OLD_INSTANCE_TEMPLATE_NAME" # Old instance template
    }
  ]
}

인스턴스가 10개 미만인 리전 MIG의 경우 maxUnavailable에 고정 값을 사용하고 이 값을 그룹에 속한 인스턴스 수로 설정해야 합니다.

업데이터는 일반 업데이트 요청과 동일한 롤백 요청을 처리하므로 추가 업데이트 옵션을 지정할 수 있습니다.

업데이트 중지하기

업데이트를 중지하는 명시적 메서드나 명령어는 없습니다. 사전형에서 상황별로 업데이트를 변경할 수 있으며, 자동 확장 처리 등의 다른 서비스에서 그룹의 크기를 조정하지 않는 경우 상황별로 변경하면 업데이트가 효과적으로 '중지'됩니다.

gcloud CLI를 사용하여 사전형에서 상황별로 업데이트를 변경하려면 다음 명령어를 실행합니다.

gcloud compute instance-groups managed rolling-action stop-proactive-update INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

사전형에서 상황별로 업데이트를 변경한 후 완전히 중지하려면 다음 단계를 수행합니다.

  1. 업데이트된 인스턴스 수를 확인하도록 요청합니다.

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
       [--zone=ZONE | --region=REGION]

    gcloud CLI는 그룹의 인스턴스 목록과 현재 상태가 포함된 응답을 반환합니다.

    NAME               ZONE           STATUS   HEALTH_STATE  ACTION    INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
    vm-instances-9pk4  us-central1-f  RUNNING  HEALTHY       NONE      example-new-template
    vm-instances-j1h8  us-central1-f  RUNNING  HEALTHY       NONE      example-old-template
    vm-instances-ngod  us-central1-f  STAGING  UNKNOWN       CREATING  example-new-template
    

    이 예시에서는 인스턴스 두 개가 이미 업데이트되었습니다.

  2. 이제 새 업데이트를 수행할 요청을 실행하되 이미 대상 크기로 업데이트된 인스턴스 수를 전달합니다.

    gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
       --version template=OLD_INSTANCE_TEMPLATE_NAME \
       --canary-version template=NEW_INSTANCE_TEMPLATE_NAME,target-size=2 \
       [--zone=ZONE | --region=REGION]

    업데이터에 이 업데이트는 '완료'로 나타나므로 다른 인스턴스는 업데이트되지 않고 업데이트를 효과적으로 중지합니다.

순차적 업데이트 속도 제어

기본적으로 업데이트를 요청하면 업데이터가 최대한 빨리 업데이트를 수행합니다. 업데이트를 완전히 적용할지 아니면 변경사항을 시험 삼아 테스트할지 잘 모르겠으면 다음 방법을 사용하여 업데이트 속도를 제어할 수 있습니다.

  1. 전체 업데이트가 아닌 카나리아 업데이트를 시작합니다.
  2. minReadySec 값을 크게 설정합니다. 이 값을 설정하면 인스턴스가 성공적으로 업데이트되었다고 간주하고 다음 인스턴스로 진행하기에 앞서 업데이터가 해당 시간(초) 동안 대기합니다.
  3. 상태 확인을 사용 설정하면 인스턴스가 성공적으로 업데이트되었다고 간주하고 다음 인스턴스로 진행하기에 앞서 업데이터가 애플리케이션이 시작되고 상태 신호를 보고할 때까지 대기합니다.
  4. maxUnavailablemaxSurge 값을 낮게 설정합니다. 그러면 한 번에 최소한의 인스턴스만 업데이트됩니다.
  5. 자동 업데이트를 사용하는 대신 MIG에서 인스턴스를 선택적으로 업데이트합니다.

이러한 메서드를 조합하여 업데이트 속도를 제어할 수도 있습니다.

순차적 업데이트 중에 장애 수준 제어

업데이트 특성에 따라 인스턴스 수명 주기 상태가 중단될 수 있습니다. 예를 들어 인스턴스의 부팅 디스크를 변경하려면 인스턴스를 바꿔야 합니다. 다음 옵션을 설정하여 순차적 업데이트 중에 중단 수준을 제어할 수 있습니다.

  • 최소 작업: 중단을 최소화하거나 필요 이상으로 더 많이 중단을 유발하는 작업을 적용하려면 이 옵션을 사용합니다.

    • 중단을 최대한 제한하려면 최소 작업을 REFRESH으로 설정합니다. 업데이트에 더 많이 중단을 유발하는 작업이 필요한 경우 Compute Engine이 업데이트를 실행하는 데 필요한 작업을 수행합니다.
    • 반드시 필요한 것보다 더 많이 중단을 유발하는 작업을 적용하려면 최소 작업을 RESTART 또는 REPLACE로 설정합니다. 예를 들어 Compute Engine에서 메타데이터를 변경하기 위해 VM을 다시 시작할 필요가 없습니다. 그러나 애플리케이션이 VM이 다시 시작될 때에만 인스턴스 메타데이터를 읽는 경우에는 최소 작업을 RESTART로 설정하여 메타데이터 변경사항을 가져오면 됩니다.
  • 중단을 가장 많이 유발하는 작업: 감당할 수 있는 수준보다 더 많이 중단을 유발하는 업데이트를 방지하려면 이 옵션을 사용합니다. 업데이트에 이 플래그로 설정한 것보다 더 많이 중단을 유발하는 작업이 필요한 경우 업데이트 요청이 실패합니다. 예를 들어 중단을 가장 많이 유발하는 작업을 RESTART로 설정하면 부팅 디스크 이미지 업데이트 시도는 실패하게 됩니다. 이는 해당 업데이트에 다시 시작보다 더 많이 중단을 유발하는 작업인 인스턴스 교체가 필요하기 때문입니다.

두 옵션 모두 다음 값을 허용합니다.

설명업데이트할 인스턴스 속성
REFRESH인스턴스를 중지하지 않습니다.추가 디스크, 인스턴스 메타데이터, 라벨, 태그
RESTART인스턴스를 중지한 후 다시 시작합니다.추가 디스크, 인스턴스 메타데이터, 라벨, 태그, 머신 유형
REPLACE(기본값) 교체 메서드 옵션에 따라 인스턴스를 바꿉니다.인스턴스 템플릿이나 인스턴스별 구성에 저장된 모든 인스턴스 속성

중단을 가장 많이 유발하는 작업은 최소 작업보다 중단을 적게 유발할 수 없습니다.

업데이트를 자동으로 출시할 때는 다음 기본값이 적용됩니다.

  • 최소 작업 기본값은 REPLACE입니다. 불필요한 중단을 방지하려면 최소 작업이 중단을 적게 유발하도록 설정합니다.
  • 중단을 가장 많이 유발하는 작업 기본값은 REPLACE입니다. 이러한 중단을 감당할 수 없는 경우 중단을 가장 많이 유발하는 작업을 중단을 적게 유발하도록 설정합니다.

regionInstanceGroupManagers.patch 메서드 호출과 같이 MIG 리소스에서 updatePolicy.minimalActionupdatePolicy.mostDisruptiveAllowedAction 필드를 설정하도록 Compute Engine API를 사용하여 기본 동작을 변경할 수 있습니다. 또는 Google Cloud 콘솔에서 MIG를 업데이트할 때 구체적인 VM 업데이트가 허용되는 작업을 선택할 수 있습니다. 현재 설정을 보려면 MIG 속성 가져오기를 참조하세요.

허용된 것보다 중단 수준이 높은 작업이 필요하면 업데이트가 실패합니다. 이 경우 허용되는 중단 수준이 높은 작업으로 업데이트를 다시 시도하거나 인스턴스를 선택적으로 업데이트할 수 있습니다. Compute Engine은 지정된 중단 제한으로 인스턴스를 업데이트할 수 있는지 확인하기 위해 최선의 검증을 수행합니다. 하지만 시스템 내에서 수행되는 동시 변경사항으로 인해 업데이트 시작 후 상황이 변경될 수 있습니다. 특정 인스턴스에서의 작업이 실패하면 인스턴스 오류를 나열하여 오류를 확인합니다.

순차적 교체 또는 재시작 수행하기

순차적 재시작은 모든 인스턴스를 중지하고 다시 시작하는 반면, 순차적 교체는 교체 메서드 옵션에 따라 인스턴스를 바꿉니다. 순차적 재시작 또는 교체는 인스턴스 템플릿을 비롯하여 그룹에서 다른 아무것도 변경하지 않습니다.

순차적 재시작 또는 순차적 교체가 필요할 수 있는 이유는 다양합니다. 예를 들어 경우에 따라 다음 중 한 가지 이유로 VM 인스턴스를 다시 시작하거나 교체할 수 있습니다.

  • 메모리 누수 문제를 해결합니다.
  • 새로운 머신에서 실행될 수 있게 애플리케이션을 다시 시작합니다.
  • 정기적 교체를 VM 테스트의 권장사항으로 적용합니다.
  • VM의 운영체제 이미지를 업데이트하거나 시작 스크립트를 다시 실행하여 소프트웨어를 업데이트합니다.

Google Cloud 콘솔, Google Cloud CLI 또는 REST를 사용하여 다시 시작 또는 교체를 수행합니다.

콘솔

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

    인스턴스 그룹으로 이동

  2. 재시작하거나 교체하려는 VM이 있는 관리형 인스턴스 그룹을 선택합니다.
  3. VM 재시작/교체를 클릭합니다.
  4. 작업에서 재시작 또는 교체를 선택합니다.
  5. 작업을 시작하려면 VM 다시 시작 또는 VM 교체를 클릭합니다.

gcloud

restart 명령어 또는 replace 명령어를 사용합니다.

다음 명령어는 MIG의 모든 인스턴스를 한 번에 하나씩 교체합니다.

gcloud compute instance-groups managed rolling-action replace INSTANCE_GROUP_NAME

다음 명령어는 각 인스턴스를 한 번에 하나씩 다시 시작합니다.

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME

업데이트에 제공되는 동일한 옵션(예: maxSurge, maxUnavailable)으로 각 명령어를 추가로 맞춤설정할 수 있습니다.

REST

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

updatePolicy.minimalAction 필드에 RESTART 또는 REPLACE를 지정합니다. versions.instanceTemplate 필드에 현재 템플릿을 지정합니다.

작업을 트리거하려면 versions.name 필드도 업데이트해야 합니다. 예를 들어 타임스탬프를 추가하는 방법이 있습니다. 나중에 MIG의 VM을 나열하고 각 VM의 versions.name 필드를 검사하여 교체되거나 다시 시작된 VM을 확인할 수 있습니다.

예를 들어 영역별 MIG의 경우 다음 요청은 인스턴스 100%를 자동으로 다시 시작하는 데 필요한 최소 구성을 보여줍니다.

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

{
 "updatePolicy": {
  "minimalAction": "RESTART",
  "type": "PROACTIVE"
 },
 "versions": [
  {
   "instanceTemplate": "global/instanceTemplates/CURRENT_INSTANCE_TEMPLATE_NAME",
   "name": "v2-1705499403"
  }
 ]
}

추가 교체/재시작 예시

한 번에 2개씩 모든 VM의 순차적 재시작 수행

이 명령어는 그룹의 모든 VM을 한 번에 2개씩 재시작합니다. 새 인스턴스 템플릿이 지정되어 있지 않습니다.

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME \
    --max-unavailable=2 \
    [--zone=ZONE | --region=REGION]

가능한 빨리 모든 VM 순차적 재시작 수행

gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_NAME \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

가능한 빨리 모든 VM 순차적 교체 수행

gcloud compute instance-groups managed rolling-action replace INSTANCE_GROUP_NAME  \
    --max-unavailable=100% \
    [--zone=ZONE | --region=REGION]

인스턴스 이름 유지

업데이트 중에 VM 인스턴스 이름을 유지해야 하면 replacementMethodRECREATE로 설정합니다. 또한 maxUnavailable0보다 큰 값으로, maxSurge0으로 설정해야 합니다. 인스턴스를 바꾸는 대신 다시 만들면 업데이트가 완료되는 데 시간이 더 오래 걸릴 수 있지만 업데이트된 인스턴스의 이름은 유지됩니다.

교체 메서드를 지정하지 않으면 MIG의 현재 updatePolicy.replacementMethod 값이 사용됩니다. 설정하지 않으면 기본값(substitute)이 사용되며, 이때 VM 인스턴스가 이름을 무작위로 생성한 새 인스턴스로 바뀝니다.

gcloud

rolling-action 명령어를 실행할 때 --replacement-method=recreate 플래그를 포함합니다.

gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \
    --replacement-method=recreate \
    --version=template=NEW_TEMPLATE \
    --max-unavailable=5 \
    [--zone=ZONE | --region=REGION]

REST

리전별 또는 영역별 MIG 리소스에서 patch 메서드를 호출합니다. 요청 본문에 updatePolicy.replacementMethod 필드를 포함합니다.

PATCH /compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME
{
    "updatePolicy": {
        "type": "PROACTIVE",
        "maxUnavailable": { "fixed": 5 },
        "replacementMethod": "RECREATE"
    },
    "versions": [ {
        "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE"
    } ]
}

요청한 후에는 업데이트를 모니터링하여 업데이트가 언제 완료되었는지 알 수 있습니다.

리전 관리형 인스턴스 그룹 업데이트하기

한 영역의 인스턴스만 들어 있는 영역 MIG와 반대로, 리전 MIG에는 한 리전 내의 여러 영역에 분포된 VM 인스턴스가 들어 있습니다. 리전 MIG를 사용하면 영역 두 개 이상에 인스턴스를 배포하여 애플리케이션의 가용성을 높일 수 있으며 한 영역에서 오류가 발생하거나 전체 인스턴스 그룹이 응답하지 않는 극단적인 경우를 지원할 수 있습니다.

리전 MIG에서 업데이트를 수행하는 것은 아래 설명된 몇 가지 예외를 제외하고는 영역 MIG에 업데이트를 수행하는 것과 동일합니다. 리전 MIG에 대한 업데이트를 시작하면 업데이터가 항상 각 영역에 균등하게 비례적으로 인스턴스를 업데이트합니다. 영역을 먼저 업데이트할 인스턴스를 선택하거나 한 영역에서만 인스턴스를 업데이트하도록 선택할 수 없습니다.

리전 MIG 업데이트와 영역 MIG 업데이트의 차이

리전 MIG에는 다음과 같은 기본 업데이트 값이 있습니다.

  • maxUnavailable=NUMBER_OF_ZONES
  • maxSurge=NUMBER_OF_ZONES

NUMBER_OF_ZONES는 리전 MIG와 연결된 영역의 수입니다. 기본적으로 리전 MIG의 영역 수는 3입니다. 하지만 다른 번호를 선택할 수도 있습니다.

업데이트를 지정할 때 고정된 숫자를 사용하는 경우 고정된 숫자는 0이거나 리전 MIG와 연결된 영역 수 이상이어야 합니다. 예를 들어 그룹이 3개 영역에 분산된 경우 업데이터가 3개의 각 영역에 추가 인스턴스를 만들어야 하므로 maxSurge1이나 2로 설정할 수 없습니다.

업데이트 요청에 고정된 숫자 또는 백분율 사용

업데이트 요청에 고정된 숫자를 지정하면 해당 숫자는 리전 MIG의 영역 수로 나뉘고 균등하게 분배됩니다. 예를 들어 maxSurge=10을 지정하면 리전의 영역 수에 10개의 인스턴스를 나누고 해당 숫자를 기반으로 새 인스턴스를 만듭니다. 인스턴스의 수가 여러 영역에서 균등하게 분할되지 않으면 업데이터가 나머지 인스턴스를 무작위 영역에 추가합니다. 예를 들어 영역 3개에 인스턴스 10개를 나누는 경우 두 영역이 인스턴스 3개를 받고 한 영역은 인스턴스 4개를 받습니다. 동일한 로직이 카나리아 업데이트의 maxUnavailabletargetSize 매개변수에 적용됩니다.

MIG에 VM 인스턴스가 10개 이상 있는 경우에만 백분율을 지정할 수 있습니다. 백분율은 상황에 따라 약간 다르게 처리됩니다.

  • 카나리아 업데이트에 대한 VM 인스턴스의 백분율을 지정하면 업데이터가 인스턴스를 여러 영역에 균등하게 배포하려고 시도합니다. 나머지는 각 영역에서 올림 또는 내림되지만 전체 차이는 그룹당 VM 인스턴스 1개를 넘지 않습니다. 예를 들어 인스턴스가 10개이고 대상 크기(백분율)가 25%인 MIG의 경우 2~3개의 VM 인스턴스로 업데이트가 롤아웃됩니다.

  • maxSurgemaxUnavailable과 같은 업데이트 옵션에 대해 백분율을 지정하는 경우 백분율이 영역마다 독립적으로 반올림됩니다.

다음 단계