MIG의 인스턴스에 자동으로 업데이트 적용

이 문서에서는 새 인스턴스 템플릿관리형 인스턴스 그룹(MIG) 내 가상 머신(VM) 인스턴스의 전체 또는 임의의 하위 집합 1개에 자동으로 적용하는 방법을 설명합니다.

자동 업데이트를 구성하면 MIG가 사양에 새 버전의 인스턴스 템플릿을 자동으로 적용합니다. 배포 속도, 서비스 중단 수준, MIG가 업데이트하는 인스턴스 수를 제어할 수 있습니다. 업데이트를 시작한 후에는 추가 입력을 제공할 필요가 없으며 업데이트가 자체적으로 완료됩니다.

MIG의 새 인스턴스 또는 특정 인스턴스에만 새 템플릿을 선택적으로 적용하고, 스테이트풀(Stateful) MIG가 있고 인스턴스별 스테이트리스(Stateless) 구성을 적용해야 하는 경우, MIG에서 선택적으로 인스턴스 업데이트를 참조하세요. 결정하는 데 도움이 필요하면 자동 업데이트 및 선택적 업데이트 선택을 참조하세요.

시작하기 전에

제한사항

  • MIG에 스테이트풀(Stateful) 구성이 있는 경우에는 자동화된 순차적 업데이트를 사용할 수 없습니다. 대신 특정 인스턴스를 업데이트하여 업데이트를 제어하고 중단을 제한할 수 있습니다.
  • 커스텀 인스턴스 이름을 사용하고 스테이트풀(Stateful) 디스크 또는 메타데이터를 구성하지 않으면 자동 업데이트를 사용할 수 있습니다. 하지만 인스턴스 이름을 유지하려면 교체 메서드RECREATE로 설정해야 합니다.

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

기본 순차적 업데이트란 모든 인스턴스가 업데이트될 때까지 MIG의 모든 인스턴스에 단계적으로 적용되는 업데이트입니다. 업데이트 중 오프라인으로 설정할 수 있는 인스턴스 수, 인스턴스 업데이트 간격, 업데이트의 적용 범위(인스턴스 전체 또는 일부) 등 순차적 업데이트의 다양한 측면을 제어할 수 있습니다.

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

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

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

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

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

Console

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

    인스턴스 그룹으로 이동

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

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

  4. 템플릿 아래의 드롭다운 목록을 클릭하고 업데이트할 새 템플릿을 선택합니다.

  5. 대상 크기로 100%를 입력하여 모든 인스턴스를 업데이트합니다.

  6. 업데이트 모드에서 사전을 선택합니다.

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

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의 경우 리전을 제공합니다.

API

리전별 또는 영역별 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은 기존 인스턴스에 상황별 업데이트를 적용하기 위한 요청을 적극적으로 시작하지 않습니다.

자동 및 선택적 업데이트에 대한 자세한 내용은 자동 및 선택적 업데이트 선택을 참조하세요.

최대 일시 급증 개수

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

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

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

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

이 옵션은 REPLACE 최소 작업으로 구성되었을 때만 인식되지만 RESTART 작업 설정에는 지원되지 않습니다.

최대 사용 불가

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

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

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

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시간)입니다.

최소 작업

최소 작업 옵션을 사용하여 자동 업데이트가 그룹의 인스턴스를 업데이트하기 위해 수행해야 하는 최소 작업을 지정합니다. 예를 들어 REPLACE를 최소 작업으로 설정하면 영향을 받는 모든 인스턴스가 삭제되고 필요 여부에 관계없이 새 인스턴스로 바뀝니다.

최소 작업을 설정하면 업데이터가 최소한으로 해당 작업을 수행합니다. 그러나 업데이터에서 지정된 최소 작업이 업데이트를 수행하기에 충분하지 않다고 판단하면 더 많은 중단이 요구되는 작업을 수행할 수 있습니다. 예를 들어 RESTART를 최소 작업으로 설정하면 업데이터가 업데이트를 적용하기 위해 인스턴스 다시 시작을 시도합니다. 하지만 인스턴스를 다시 시작하여 수행할 수 없는 OS를 변경하면 업데이터가 그룹의 인스턴스를 새 VM 인스턴스로 바꿉니다.

가능한 작업은 REPLACE 또는 RESTART입니다.

  • RESTART. stopstart 요청을 수행하여 인스턴스를 다시 시작합니다. 이미지를 변경하려면 인스턴스가 삭제되고 바뀌어야 하는 경우와 같이 업데이트 요청에서 변경사항을 적용하기 위해 인스턴스가 바뀌어야 하는 경우 업데이터가 REPLACE를 수행합니다.

  • REPLACE: 기존 인스턴스를 삭제하고 대상 템플릿에서 인스턴스를 만듭니다. 업데이터가 새로운 내부 및 외부 IP 주소와 같은 모든 새 인스턴스 속성을 사용하여 완전히 새로운 인스턴스를 만듭니다.

다음 다이어그램에서는 이러한 옵션이 어떻게 인스턴스에 영향을 주는지 보여줍니다.

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

대체 방법

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

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

인스턴스 이름을 유지하려면 교체 메서드를 SUBSTITUTE 대신 RECREATE로 설정합니다.

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

유효한 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 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개 이상 지정할 수 없습니다.

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

Console

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

    인스턴스 그룹으로 이동

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

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=emplate=example-template-A \
    --canary-version=template=example-template-B,target-size=10%

API

리전별 또는 영역별 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%로 커밋할지 아니면 롤백할지 결정할 수 있습니다.

Console

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

    인스턴스 그룹으로 이동

  2. 업데이트할 관리형 인스턴스 그룹을 선택합니다.
  3. 페이지 상단에서 순차적 업데이트를 클릭합니다.
  4. 템플릿 아래에서 카나리아 템플릿의 대상 크기를 100%로 업데이트하여 템플릿을 모든 인스턴스로 롤포워드합니다. 또는 기본 템플릿을 카나리아 템플릿으로 바꾸고 대상 크기를 100%로 설정해도 됩니다. 그런 다음 두 번째 템플릿 필드를 완전히 삭제할 수 있습니다.
  5. 업데이트를 클릭하여 업데이트를 시작합니다.

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]

API

리전별 또는 영역별 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 도구 또는 Compute Engine API를 사용하여 이러한 플래그에 액세스할 수 있습니다. Cloud Console을 사용하여 업데이트 중인 현재 및 계획된 인스턴스 수를 확인할 수도 있습니다.

Console

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

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

    인스턴스 그룹으로 이동

  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]

API

리전별 또는 영역별 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로 설정됩니다.

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

관리형 인스턴스 그룹에서 실행 중인 currentAction 및 각 인스턴스의 status를 보려면 gcloud 명령줄 도구 또는 Compute Engine API를 사용하면 됩니다.

gcloud

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

명령어는 MIG의 인스턴스 목록과 해당 상태와 현재 작업을 반환합니다. 예를 들면 다음과 같습니다.

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 열은 비어 있습니다.

API

리전별 또는 영역별 MIG 리소스에서 listManagedInstances 메서드를 호출합니다. 예를 들면 다음과 같습니다.

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 필드 값 목록을 보려면 인스턴스 상태 확인을 참조하세요.

인스턴스에 어떤 유형의 변경이 진행 중인 경우 변경 과정을 쉽게 추적할 수 있도록 currentAction 필드에 다음 작업 중 하나가 입력됩니다. 그렇지 않으면 currentAction 필드는 NONE입니다.

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

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

업데이트 롤백

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

gcloud

예를 들어 다음 gcloud 명령어는 최대한 빨리 업데이트를 롤백합니다. 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]

API

리전별 또는 영역별 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 도구를 사용하여 사전형에서 상황별로 업데이트를 변경하려면 다음 명령어를 실행합니다.

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 도구는 그룹의 인스턴스 목록과 현재 상태가 포함된 응답을 반환합니다.

    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개의 인스턴스가 이미 업데이트되었습니다.

  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에서 인스턴스를 선택적으로 업데이트합니다.

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

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

재시작하면 인스턴스에서 stopstart 메서드가 실행되고, 교체하면 인스턴스가 삭제되고 생성됩니다.

순차적 재시작 또는 교체는 인스턴스 템플릿을 비롯하여 그룹에서 다른 아무것도 변경하지 않습니다. 선택한 메서드를 사용하여 그룹의 인스턴스만 새로 고칩니다.

순차적 재시작 또는 순차적 바꾸기가 필요할 수 있는 이유는 다양합니다. 예를 들어 다음 이유 중 하나로 VM 인스턴스를 수시로 새로고침해야 할 수 있습니다.

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

Cloud Console, gcloud 명령줄 도구 또는 Compute Engine API를 사용하여 다시 시작 또는 바꾸기를 수행합니다.

Console

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

    인스턴스 그룹으로 이동

  2. 업데이트할 관리형 인스턴스 그룹을 선택합니다.
  3. 페이지 상단에서 순차적 재시작/교체를 클릭합니다.
  4. 인스턴스를 재시작할지 아니면 교체할지 선택합니다.
  5. 필요에 따라 최대 초과 개수, 최대 사용 불가능 옵션, 최소 대기 시간과 같은 구성 옵션을 전환할 수 있습니다.
  6. 재시작 또는 교체 버튼을 클릭하여 업데이트를 시작합니다.

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)으로 각 명령어를 추가로 맞춤설정할 수 있습니다.

API

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

updatePolicy.minimalAction 필드에 RESTART 또는 REPLACE를 지정합니다. 두 경우 모두 작업을 트리거하기 위해 versions.instanceTemplateversions.name 속성도 제공해야 합니다.

예를 들어 영역별 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"
  }
 ]
}

추가 교체/재시작 예

한 번에 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]

API

리전별 또는 영역별 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과 같은 업데이트 옵션에 대해 백분율을 지정하는 경우 백분율이 영역마다 독립적으로 반올림됩니다.

다음 단계