관리형 인스턴스 그룹 만들기

이 페이지에서는 영역 안에 관리형 인스턴스 그룹이라는 관리형 인스턴스의 그룹을 만드는 방법을 설명합니다. 관리형 인스턴스 그룹에는 단일 항목으로 관리할 수 있는 동일한 여러 인스턴스가 포함되어 있습니다. 관리형 인스턴스 그룹은 사전에 인스턴스를 사용 가능하게(즉, RUNNING 상태로) 유지함으로써 앱의 고가용성을 유지합니다. 관리형 인스턴스 그룹은 자동 확장, 부하 분산, 지속적 업데이트, 자동 복구 등을 지원합니다.

같은 지역 안의 여러 영역에 있는 인스턴스를 포함하는 지역 관리형 인스턴스 그룹을 만들 수도 있습니다. 인스턴스 그룹에 대한 자세한 내용은 인스턴스 그룹 개요를 참조하세요.

시작하기 전에

제한사항

  • 관리형 인스턴스 그룹마다 VM 인스턴스를 1000개까지 포함할 수 있습니다.
  • 관리형 인스턴스 그룹을 업데이트할 때 한 요청에 인스턴스를 1000개 이내로 지정할 수 있습니다.

상태 비추적 애플리케이션에 관리형 인스턴스 그룹 사용

관리형 인스턴스 그룹은 기본 VM 인스턴스의 특정 상태에 관계없이 실행할 수 있는 상태 비추적 애플리케이션을 지원하기 위한 것입니다. 관리형 인스턴스 그룹에서는 자동 확장, 자동 복구 등의 기능이 지원되어 자동으로 인스턴스를 삭제하고 다시 만들 수 있습니다. 또한 사용자 작업으로 인해, 자동 복구의 일환으로 또는 인스턴스가 실시간 이전으로 설정되지 않은 경우 인프라 유지관리로 인해 관리형 인스턴스 그룹에서 인스턴스가 삭제되면 인스턴스 그룹에서 새 루트 영구 디스크를 사용하여 자동으로 인스턴스를 다시 만듭니다.

관리형 인스턴스 그룹의 상태 비추적 특성 때문에 IP 주소나 인메모리 데이터와 같이 지속되지 않는 특정 인스턴스 속성에 종속되지 않도록 애플리케이션을 설계하거나 개조해야 합니다. 마찬가지로 부팅 영구 디스크의 기본 동작은 해당 VM 인스턴스가 삭제되면 부팅 디스크도 삭제되는 것이므로 관리형 인스턴스 그룹에서 부팅 디스크를 영구 데이터로 사용해서는 안 됩니다.

데이터를 보관하려면 정기적으로 최신 OS 이미지를 유지관리하고 시작 스크립트를 사용하며 Google Cloud Storage 등 다른 중앙 위치에 데이터를 백업하는 것이 가장 좋습니다.

인스턴스 템플릿에서 컨테이너 이미지 또는 커스텀 이미지와 관련 시작 스크립트를 지정할 수 있으므로 인스턴스가 다시 만들어지면 필요한 소프트웨어 애플리케이션이 설치되고 필요한 데이터에 액세스할 수 있습니다. 인스턴스 템플릿 만들기에 관한 권장사항은 확정 인스턴스 템플릿을 참조하세요.

관리형 인스턴스 그룹에 연결된 부팅 디스크를 유지하려는 경우 disks.autoDelete 옵션을 사용하지 않도록 설정하여 부팅 영구 디스크가 삭제되지 않도록 할 수 있지만 그러면 관리형 인스턴스 그룹에서 새 인스턴스를 만들 수 없으므로 권장되지 않습니다.

관리형 인스턴스 그룹 만들기

관리형 인스턴스 그룹을 만들기 전에 인스턴스 템플릿을 만들어 그룹에 속한 모든 인스턴스의 운영체제 이미지 또는 컨테이너 이미지와 설정을 지정해야 합니다.

템플릿을 만든 후 Google Cloud Platform Console, gcloud compute 도구 또는 API를 통해 관리형 인스턴스 그룹을 만드세요.

콘솔

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

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

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 관리형 인스턴스 그룹의 이름을 입력하고 그룹을 포함할 영역을 선택합니다.
  4. 그룹 유형에서 관리형 인스턴스 그룹을 선택합니다.
  5. 인스턴스 템플릿에서 인스턴스 템플릿을 선택합니다. 사용할 수 있는 템플릿이 없으면 인스턴스 템플릿을 만듭니다.
  6. 그룹에 만들 인스턴스의 수를 지정합니다. 필요하면 자동 확장을 사용하여 그룹이 인스턴스 CPU 사용량에 따라 인스턴스를 자동으로 추가 또는 삭제하도록 하거나 자동 복구를 사용하여 인스턴스 그룹에 있는 인스턴스의 상태를 확인할 수 있습니다.
  7. 만들기를 클릭하여 새 그룹을 만듭니다.

gcloud

instance-groups managed create 명령어를 사용하여 인스턴스 그룹을 만듭니다.

gcloud compute instance-groups managed create [NAME] \
    --base-instance-name [BASE_NAME] \
    --size [SIZE] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

여기서 다음과 같이 바꿉니다.

  • [NAME]을 이 인스턴스 그룹의 이름으로 바꿉니다.
  • [BASE_NAME]을 이 인스턴스 그룹에서 만든 인스턴스에 사용할 이름으로 바꿉니다. 이러한 인스턴스는 동일하므로 임의의 문자열이 인스턴스 이름의 일부로 인스턴스에 할당됩니다. 이 임의의 문자열 앞에 기본 이름이 옵니다. 예를 들어 기본 이름이 example이면 인스턴스 이름이 example-yahs, example-qtyz 등으로 지정됩니다.
  • [SIZE]를 인스턴스 그룹의 크기로 바꿉니다.
  • [INSTANCE_TEMPLATE]을 이 그룹에 사용할 인스턴스 템플릿의 이름으로 바꿉니다.
  • [ZONE]은 Compute Engine에 사용할 수 있는 영역 중 하나입니다.

    예를 들어 다음 명령어를 실행하면 이름이 example-group이고 기본 인스턴스 이름이 test인 인스턴스 그룹이 생성됩니다. 다음 세 가지 인스턴스가 그룹에 포함됩니다.

    gcloud compute instance-groups managed create example-group
    --base-instance-name test
    --size 3
    --template an-instance-template

API

API에서 instanceGroupManagers 서비스에 POST 요청을 생성합니다. 원하는 그룹 이름, 그룹 크기, 그룹의 속한 인스턴스의 기본 이름, 인스턴스 템플릿 URL을 요청 본문에 포함합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

{
  "baseInstanceName": "[BASE_NAME]",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
  ],
  "name": "[NAME]",
  "targetSize": [SIZE]
}

여기서 다음과 같이 바꿉니다.

  • [PROJECT_ID]를 요청의 프로젝트 ID로 바꿉니다.
  • [ZONE]을 요청의 영역으로 바꿉니다.
  • [NAME]을 이 인스턴스 그룹의 이름으로 바꿉니다.
  • [BASE_NAME]을 이 인스턴스 그룹에서 만든 인스턴스에 사용할 이름으로 바꿉니다. 이러한 인스턴스는 동일하므로 임의의 문자열이 인스턴스 이름의 일부로 인스턴스에 할당됩니다. 이 임의의 문자열 앞에 기본 이름이 옵니다. 예를 들어 기본 이름이 example이면 인스턴스 이름이 example-yahs, example-qtyz 등으로 지정됩니다.
  • [SIZE]를 인스턴스 그룹의 크기로 바꿉니다.
  • [INSTANCE_TEMPLATE]을 이 그룹에 사용할 인스턴스 템플릿으로 바꿉니다.

기존 그룹 및 그룹 설명 검색

기존 관리형 인스턴스 그룹에 대한 정보는 콘솔, gcloud명령줄 도구 또는 API를 사용하여 확인할 수 있습니다. 그룹의 id를 확인하려면 gcloud 또는 API를 사용해야 합니다.

콘솔

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

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

    기존 인스턴스 그룹이 있으면 페이지에 나열됩니다. 비관리형 인스턴스 그룹도 이 페이지에 나열됩니다.

  2. 목록의 이름 열에서 알아보려는 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성과 그룹에 포함된 인스턴스의 목록이 표시된 페이지가 열립니다.

gcloud

프로젝트의 관리형 인스턴스 그룹을 모두 나열합니다.

gcloud compute instance-groups managed list

특정 그룹에 대한 정보를 가져오려면 다음과 같이 입력합니다.

gcloud compute instance-groups managed describe [INSTANCE_GROUP] \
    --zone [ZONE]

API

영역 내의 모든 관리형 인스턴스 그룹을 나열하려면 instanceGroupManagers 서비스에 대해 GET 요청을 생성합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

특정 그룹에 대한 정보를 가져오려면 instanceGroupManagers 서비스에 대해 GET 요청을 생성하고 특정 관리형 인스턴스 그룹의 이름을 포함합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

지역(다중 영역) 괸라형 인스턴스 그룹의 경우 대신 regionInstanceGroupManagers 리소스인 regionInstanceGroupManagers.listregionInstanceGroupManagers.get을 사용합니다.

관리형 인스턴스 그룹의 인스턴스 템플릿 변경

기존 인스턴스에 변경사항을 적용하지 않고 관리형 인스턴스 그룹의 인스턴스 템플릿을 변경할 수 있습니다. 인스턴스를 추가하거나 다시 만들도록 요청하면 새 템플릿이 관리형 인스턴스 그룹에 사용되지만 템플릿으로 그룹의 기존 인스턴스가 자동으로 업데이트되지는 않습니다. 따라서 업데이트할 인스턴스를 정확하게 제어할 수는 있지만 그러면 인스턴스 그룹에 서로 다른 인스턴스가 포함됩니다.

새 인스턴스 템플릿을 만든 후에는 기존 인스턴스 그룹의 인스턴스 템플릿을 변경하세요.

콘솔

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

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

  2. 목록의 이름 열에서 인스턴스 템플릿을 변경할 인스턴스 그룹의 이름을 클릭합니다.
  3. 그룹 편집을 클릭하여 이 관리형 인스턴스 그룹을 수정합니다.
  4. 인스턴스 템플릿에서 이 그룹에 사용할 새 인스턴스 템플릿을 선택합니다.
  5. 저장을 클릭하여 새 템플릿을 적용합니다.

gcloud

set-instance-template 메소드를 사용하여 템플릿을 업데이트하려면 새 템플릿을 instance-groups managed set-instance-template 하위 명령어에 전달합니다.

gcloud compute instance-groups managed set-instance-template [INSTANCE_GROUP] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 새 인스턴스 템플릿의 URL을 요청 분문에 포함합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers[INSTANCE_GROUP]/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]
}

인스턴스 템플릿을 변경한 후에 개별 인스턴스를 다시 만들거나 지속적 업데이트를 통해 그룹에 속한 모든 인스턴스를 업데이트합니다.

자동으로 관리형 인스턴스 그룹 크기 조절

작업 부하에 따라 자동으로 인스턴스를 추가하거나 삭제하도록 관리형 인스턴스 그룹을 구성할 수 있습니다. 그러면 애플리케이션에서 트래픽 증가를 원활하게 처리할 수 있으며, 컴퓨팅 리소스에 대한 요구가 줄어 비용이 절감됩니다. 관리형 인스턴스 그룹 확장을 시작하려면 인스턴스 그룹 자동 확장을 참조하세요.

수동으로 관리형 인스턴스 그룹 크기 조절

관리형 인스턴스 그룹이 자동 확장되도록 설정되지 않은 경우 수동으로 그룹 크기를 조절하여 그룹의 인스턴스 수를 변경할 수 있습니다. 크기를 늘리면 관리형 인스턴스 그룹에서 현재 인스턴스 템플릿을 사용하여 새 인스턴스가 추가되고, 크기를 줄이면 관리형 인스턴스 그룹에서 인스턴스가 삭제됩니다. 예약된 작업 없이 실행되는 인스턴스가 삭제되기 전에 그룹에서 DELETING, CREATING, RECREATINGcurrentAction을 사용하여 인스턴스가 삭제됩니다.

그룹이 연결 드레이닝을 사용하도록 설정한 백엔드 서비스의 일부일 경우 VM 인스턴스가 제거 또는 삭제되려면 연결 드레이닝 기간 경과 후 최대 60초가 걸릴 수 있습니다.

Google Cloud Platform Console, gcloud compute 도구 또는 API를 사용하여 관리형 인스턴스 그룹의 크기를 조절할 수 있습니다.

콘솔

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

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

  2. 목록의 이름 열에서 그룹 크기를 변경할 인스턴스 그룹의 이름을 클릭합니다.
  3. 그룹 편집을 클릭하여 이 관리형 인스턴스 그룹을 수정합니다.
  4. 인스턴스 수에서 이 관리형 인스턴스 그룹에 포함할 인스턴스 수를 지정합니다. 자동 확장을 사용하도록 설정하면 필요에 따라 그룹에서 자동으로 인스턴스가 추가 또는 제거됩니다. 하지만 최소 인스턴스 수최대 인스턴스 수 값을 변경하여 자동 확장 처리를 통해 그룹 크기를 자동으로 조정할 수 있습니다.
  5. 저장을 클릭하여 새 템플릿을 적용합니다.

gcloud

다음과 같이 명령어를 사용합니다.

gcloud compute instance-groups managed resize [INSTANCE_GROUP ] \
    --size [NEW_SIZE] \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 매개변수로 새 인스턴스 크기를 지정합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resize?size=[NEW_SIZE]

관리형 인스턴스 그룹 크기를 조절하도록 요청한 후 시스템에서 인스턴스를 프로비저닝하거나 삭제할 수 있게 되는 즉시 인스턴스가 시작되거나 중지됩니다. 그룹에 있는 인스턴스 수에 따라 이 프로세스에는 상당한 시간이 걸릴 수 있습니다. 관리형 인스턴스 그룹에 있는 인스턴스의 상태를 확인하세요.

만들기 재시도 사용 안함 모드

기본적으로 가상 머신 인스턴스를 처음 만들 때 실패하면 관리형 인스턴스 그룹에서 인스턴스가 성공적으로 생성될 때까지 각 인스턴스를 만들기 위해 계속 재시도합니다. 하지만 만들기를 자동으로 재시도하지 않게 하려면 인스턴스 그룹 크기를 조절할 때 --nocreation-retries 플래그를 제공하여 만들기 재시도 모드를 중지할 수 있습니다. 이 모드에서 관리형 인스턴스 그룹은 모든 인스턴스를 만들기 위해 한 번만 시도합니다. 만드는 동안 오류가 발생하면 관리형 인스턴스 그룹은 이 인스턴스를 만들지 않고 관리형 인스턴스 그룹의 타겟 크기를 줄입니다.

인스턴스를 만들기 위해 처음 시도할 때만 이 모드가 적용됩니다. 이 모드를 사용하는 동안 인스턴스가 성공적으로 생성되면 인스턴스는 일반적인 크기 조절 요청으로 만든 다른 모든 인스턴스와 동일한 방식으로 동작합니다. 특히 실행 중인 인스턴스가 나중에 예기치 않게 손상되어 다시 만들어야 할 경우 이 모드는 다시 만들기 동작에 영향을 주지 않습니다.

만들기 재시도 사용 안함 모드는 특히 인스턴스 수가 정확하지 않아도 되는 인스턴스 그룹을 시스템에서 자동으로 생성하는 시나리오에서 유용합니다. 할당량 오류나 기타 관련 없는 문제로 인해 일시적으로나 영구적으로 지연을 겪으면서 요청한 모든 인스턴스가 만들어질 때까지 무기한 기다릴 필요 없이 관리형 인스턴스 그룹의 크기를 신속하게 안정화하고 그룹의 인스턴스 수를 탄력적으로 조정할 수 있습니다.

만들기 재시도 사용 안함 모드에서 관리형 인스턴스 그룹의 크기를 조절하려면 gcloud compute 도구 또는 API를 사용하세요.

gcloud

gcloud 명령줄 도구를 사용하여 --no-creation-retries 플래그와 함께 resize 명령어를 실행합니다.

gcloud beta compute instance-groups managed resize [INSTANCE_GROUP] --size [NEW_SIZE] \
    --nocreation-retries \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 요청 본문에 새 인스턴스 크기와 noCreationRetries 필드를 지정합니다.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resizeAdvanced

{
 "targetSize": [SIZE]
 "noCreationRetries": true
}

listManagedInstances 메소드를 사용하여 어떤 모드에서 어떤 인스턴스가 생성되는지 확인할 수 있습니다. 만들기 재시도 사용 안함 모드에서 생성되는 인스턴스는 CREATING_WITHOUT_RETRIES 상태가 됩니다.

관리형 인스턴스 그룹의 상태 확인 및 자동 복구 설정

애플리케이션의 가용성을 향상시키고 애플리케이션이 응답하는지 확인하기 위해 관리형 인스턴스 그룹의 자동 복구 정책을 구성할 수 있습니다. 자동 복구 정책은 애플리케이션 기반 상태 확인을 사용하여 애플리케이션이 예상대로 응답하는지 확인합니다. 인스턴스가 RUNNING 상태인지 단순히 확인하는 것보다 애플리케이션이 응답하는지 확인하는 것이 더 정확합니다.

자동 복구기가 애플리케이션이 응답하지 않는다고 결정하면 관리형 인스턴스 그룹은 자동으로 해당 인스턴스를 다시 만듭니다. 선점형 인스턴스의 경우, 필요한 리소스를 다시 사용할 수 있게 되면 그룹이 인스턴스를 다시 생성합니다.

상태 확인 신호를 사용하여 인스턴스가 생성되고 애플리케이션이 응답하는지 확인할 수 있습니다. 생성 중인 관리형 인스턴스의 currentActionCREATING입니다. 자동 복구 정책이 연결되면 관리형 인스턴스가 생성되어 실행되고, 인스턴스의 currentActionVERIFYING으로 진행되며, 상태 확인기가 인스턴스의 애플리케이션을 조사하기 시작합니다. 애플리케이션이 애플리케이션 시작에 소요되는 시간 안에 이 상태 확인을 통과하면 인스턴스가 확인되고 currentActionNONE으로 바뀝니다. 관리형 인스턴스 그룹에 상태 확인을 처음 연결하면 확인이 완료될 때까지 15분 정도 걸릴 수 있습니다. 자세한 내용은 관리형 인스턴스 그룹의 인스턴스 상태 확인을 참조하세요.

자동 복구는 인스턴스를 다시 만들 때 원래 이 인스턴스를 만들 때 사용했던 인스턴스 템플릿을 사용합니다(관리형 인스턴스 그룹에 연결된 기본 인스턴스 템플릿이 아닐 수도 있습니다). 예방 조치를 취하지 않으면 인스턴스와 디스크가 삭제되고 다시 만들어질 때 인스턴스의 디스크에 기록된 모든 데이터가 손실됩니다. Compute Engine 자동 복구기의 작동 방식과 자동 복구가 연결된 디스크에 미치는 영향에 대한 자세한 내용은 관리형 인스턴스 그룹 및 자동 복구를 참조하세요. 관리형 인스턴스 그룹에 하나의 자동 복구 정책을 설정할 수 있습니다.

관리형 인스턴스 그룹에서 상태 확인을 사용하는 방법의 예로, 아래의 안내에 따라 포트 80의 웹 서버 응답을 확인하는 상태 확인을 만들어보세요. 그런 다음 그룹의 웹 서버가 제대로 작동하도록 이 상태 확인을 관리형 인스턴스 그룹에 적용하세요.

콘솔

  1. 부하 분산 상태 확인보다 보수적인 자동 복구용 상태 확인을 만듭니다.

    예를 들어 포트 80에서 응답을 찾고, 인스턴스를 UNHEALTHY로 표시해 인스턴스가 다시 만들어지도록 하기 전에 일부 오류를 허용할 수 있는 상태 확인을 만듭니다. 이 예에서는 인스턴스가 성공적으로 한 번 반환되면 정상으로 표시되고, 3회 연속 반환이 실패하면 비정상으로 표시됩니다.

    1. GCP Console에서 상태 확인 만들기 페이지로 이동합니다.

      상태 확인 만들기 페이지로 이동

    2. 상태 확인에 이름을 지정합니다(예: example-check).
    3. 아직 선택하지 않았으면 프로토콜HTTP를 선택합니다.
    4. 포트80을 입력합니다.
    5. 확인 간격5를 입력합니다.
    6. 제한시간5를 입력합니다.
    7. 정상 기준을 설정하여 비정상 인스턴스가 정상으로 표시되려면 성공적인 상태 확인이 몇 번 연속 반환되어야 하는지 지정합니다. 이 예에서는 1을 입력합니다.
    8. 비정상 기준을 설정하여 정상 인스턴스가 비정상으로 표시되려면 실패한 상태 확인이 몇 번 연속 반환되어야 하는지 지정합니다. 이 예에서는 3을 입력합니다.
    9. 만들기를 클릭하여 상태 확인을 만듭니다.
  2. 방화벽 규칙을 만들어 상태 확인 프로브가 애플리케이션에 연결하도록 허용합니다.

    상태 확인 프로브가 130.211.0.0/2235.191.0.0/16 범위의 주소에서 전송되므로 네트워크 방화벽 규칙에서 상태 확인 연결을 허용하도록 합니다. 이 예에서는 관리형 인스턴스 그룹에 default 네트워크가 사용되고 인스턴스가 포트 80에서 수신 대기합니다. 기본 네트워크에서 포트 80이 아직 열려 있지 않으면 방화벽 규칙을 만듭니다.

    1. GCP Console에서 방화벽 규칙 만들기 페이지로 이동합니다.

      방화벽 규칙 만들기 페이지로 이동

    2. 이름에 방화벽 규칙 이름(예: allow-health-check)을 입력합니다.
    3. 네트워크에서 default 네트워크를 선택합니다.
    4. 소스 필터에서 IP ranges를 선택합니다.
    5. 소스 IP 범위130.211.0.0/2235.191.0.0/16을 입력합니다.
    6. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택하고 tcp:80을 입력합니다.
    7. 만들기를 클릭합니다.
  3. 지역 또는 영역 관리형 인스턴스 그룹의 자동 복구 정책을 구성하여 상태 확인을 적용합니다.

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

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

    2. 목록의 이름 열에서 상태 확인을 적용할 인스턴스 그룹 이름을 클릭합니다.
    3. 그룹 편집을 클릭하여 이 관리형 인스턴스 그룹을 수정합니다.
    4. 자동 복구에서 전에 만든 상태 확인을 선택합니다.
    5. 초기 지연 설정을 변경하거나 유지합니다. 이 설정은 인스턴스 시작 도중에 자동 복구가 인스턴스를 너무 이르게 다시 만드는 것을 지연시킵니다. 초기 지연 타이머는 인스턴스의 currentActionVERIFYING일 때 시작됩니다.
    6. 저장을 클릭하여 변경사항을 적용합니다.

    자동 복구가 그룹의 인스턴스 모니터링을 시작하기까지 몇 분 정도 걸릴 수 있습니다.

gcloud

  1. 부하 분산 상태 확인보다 보수적인 자동 복구용 상태 확인을 만듭니다.

    예를 들어 포트 80에서 응답을 찾고, 인스턴스를 UNHEALTHY로 표시해 인스턴스가 다시 만들어지도록 하기 전에 일부 오류를 허용할 수 있는 상태 확인을 만듭니다. 이 예에서는 인스턴스가 성공적으로 한 번 반환되면 정상으로 표시되고, 3회 연속 반환이 실패하면 비정상으로 표시됩니다.

    gcloud compute health-checks create http example-check --port 80 \
        --check-interval 30s \
        --healthy-threshold 1 \
        --timeout 10s \
        --unhealthy-threshold 3
    
  2. 방화벽 규칙을 만들어 상태 확인 프로브가 애플리케이션에 연결하도록 허용합니다.

    상태 확인 프로브가 130.211.0.0/2235.191.0.0/16 범위의 주소에서 전송되므로 방화벽 규칙에서 상태 확인 연결을 허용하도록 합니다. 이 예에서는 관리형 인스턴스 그룹에 default 네트워크가 사용되고 인스턴스가 포트 80에서 수신 대기합니다. 기본 네트워크에서 포트 80이 아직 열려 있지 않으면 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    
  3. 지역 또는 영역 관리형 인스턴스 그룹의 자동 복구 정책을 구성하여 상태 확인을 적용합니다.

    gcloud beta computeset-autohealing 명령어를 사용하여 관리형 인스턴스 그룹에 상태 확인을 적용합니다.

    initial-delay 설정은 인스턴스 시작 도중에 자동 복구가 너무 이르게 인스턴스를 다시 만드는 것을 지연시킵니다. 초기 지연 타이머는 인스턴스의 currentActionVERIFYING일 때 시작됩니다.

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

    gcloud beta compute instance-groups managed set-autohealing my-mig \
        --health-check example-check \
        --initial-delay 300 \
        --zone us-east1-b
    

    자동 복구가 그룹의 인스턴스 모니터링을 시작하기까지 15분 정도 걸릴 수 있습니다.

API

  1. 부하 분산 상태 확인보다 보수적인 자동 복구용 상태 확인을 만듭니다.

    예를 들어 포트 80에서 응답을 찾고, 인스턴스를 UNHEALTHY로 표시해 인스턴스가 다시 만들어지도록 하기 전에 일부 오류를 허용할 수 있는 상태 확인을 만듭니다. 이 예에서는 인스턴스가 성공적으로 한 번 반환되면 정상으로 표시되고, 3회 연속 반환이 실패하면 비정상으로 표시됩니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. 방화벽 규칙을 만들어 상태 확인 프로브가 애플리케이션에 연결하도록 허용합니다.

    상태 확인 프로브가 130.211.0.0/2235.191.0.0/16 범위의 주소에서 전송되므로 방화벽 규칙에서 상태 확인 연결을 허용하도록 합니다. 이 예에서는 관리형 인스턴스 그룹에 default 네트워크가 사용되고 인스턴스가 포트 80에서 수신 대기합니다. 기본 네트워크에서 포트 80이 아직 열려 있지 않으면 방화벽 규칙을 만듭니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    
  3. 지역 또는 영역 관리형 인스턴스 그룹의 자동 복구 정책을 구성하여 상태 확인을 적용합니다.

    자동 복구 정책은 instanceGroupManager 리소스 또는 regionInstanceGroupManager 리소스의 일부입니다.

    insert 또는 patch 메소드를 사용하여 자동 복구 정책을 설정할 수 있습니다.

    다음 예에서는 instanceGroupManagers.patch 메소드를 사용하여 자동 복구 정책을 설정합니다.

    PATCH https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]
    {
      "autoHealingPolicies": [
        {
          "healthCheck": "global/healthChecks/example-check",
          "initialDelaySec": 300
        }
      ],
    }
    

    initialDelaySec 설정은 인스턴스 시작 도중에 자동 복구가 너무 이르게 인스턴스를 다시 만드는 것을 지연시킵니다. 초기 지연 타이머는 인스턴스의 currentActionVERIFYING일 때 시작됩니다.

    자동 복구가 그룹의 인스턴스 모니터링을 시작하기까지 몇 분 정도 걸릴 수 있습니다.

    애플리케이션 기반 자동 복구를 사용 중지하려면 자동 복구 정책을 빈 값인 autoHealingPolicies[]로 설정하세요. 관리형 인스턴스 그룹은 RUNNING 상태가 아닌 인스턴스만을 다시 만듭니다.

    instanceGroupManagers.autoHealingPolicies 필드를 읽어 관리형 인스턴스 그룹의 자동 복구 정책을 가져올 수 있습니다. 다음 메소드 중 하나를 사용하여 관리형 인스턴스 그룹 리소스를 가져올 수 있습니다.

이전 자동 복구 작업 보기

gcloud 도구 또는 API를 사용하여 과거 자동 복구 이벤트를 볼 수 있습니다.

gcloud

gcloud compute operations list 명령어를 필터와 함께 사용하면 프로젝트의 자동 복구 이벤트만 볼 수 있습니다.

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

특정 복구 작업에 대한 자세한 내용을 보려면 describe 명령어를 사용하세요. 예를 들면 다음과 같습니다.

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

API

영역 관리형 인스턴스 그룹의 경우, GET 요청을 영역의 operations 리소스에 제출하고 필터를 포함시켜 출력 목록의 범위를 compute.instances.repair.* 이벤트로 지정합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

지역 관리형 인스턴스 그룹의 경우, 영역 대신 지역의 operations 리소스를 사용하세요.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

특정 복구 작업에 대한 자세한 내용을 보려면 이 복구 작업에 대한 GET 요청을 제출합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

그룹에 속한 인스턴스 식별

그룹의 모든 인스턴스 목록을 보려면 기존 그룹 및 그룹 설명 검색을 참조하세요.

특정 인스턴스가 현재 그룹의 구성원인지 확인하려면 콘솔 또는 API를 사용합니다.

콘솔

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. VM 인스턴스 세부정보를 확인할 인스턴스를 클릭합니다.
  3. VM 인스턴스가 관리형 인스턴스 그룹의 구성원인 경우, 관리형 인스턴스 그룹의 이름이 다음에서 사용 중 제목 아래 나타납니다. VM 인스턴스가 그룹의 구성원이 아닌 경우, 인스턴스 세부정보 페이지에 다음에서 사용 중 제목이 나타나지 않습니다.

API

VM 인스턴스에 대한 리퍼러 보기를 참조하세요.

또는 인스턴스가 관리형 인스턴스 그룹의 구성원이거나 구성원이었는지 식별하려면 인스턴스 메타데이터에서 다음 두 가지 메타데이터 키를 찾습니다.

  • instance-template - 인스턴스를 만들 때 사용한 템플릿을 나타냅니다.
  • created-by - 인스턴스를 만든 관리형 인스턴스 그룹을 나타냅니다.

인스턴스를 폐기해도 이 메타데이터 항목을 수동으로 삭제하지 않으면 이러한 항목이 인스턴스에 남아 있습니다.

예를 들어 이름이 random-instance-biy인 인스턴스가 있는데 관리형 인스턴스 그룹에서 이 인스턴스를 만들었는지 알아보려면 인스턴스를 설명하고 위의 메타데이터 키를 확인하면 됩니다. 예를 들면 다음과 같습니다.

gcloud compute instances describe random-instance-biy --zone us-central1-f

gcloud가 다음과 비슷한 응답을 반환합니다.

canIpForward: false
cpuPlatform: Intel Ivy Bridge
creationTimestamp: '2016-08-24T14:11:38.012-07:00'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
...[snip]...
metadata:
  items:
  - key: instance-template
    value: projects/123456789012/global/instanceTemplates/example-it
  - key: created-by
    value: projects/123456789012/zones/us-central1-f/instanceGroupManagers/igm-metadata

그룹에서 개별 인스턴스 삭제

관리형 인스턴스 그룹에서 개별 인스턴스를 삭제할 수 있습니다. 인스턴스를 삭제하면 인스턴스 그룹의 지정된 targetSize가 줄어들고 인스턴스가 속한 타겟 풀에서 인스턴스가 제거됩니다.

관리형 인스턴스 그룹에서 인스턴스를 삭제해도 지정된 자동 확장 처리 설정은 변경되지 않습니다. 관리형 인스턴스 그룹에서 인스턴스를 삭제하면 자동 확장 처리에서 그룹에 있는 다른 인스턴스의 작업 부하 증가를 감지하고 그룹 크기를 이전 수준으로 다시 늘릴 수 있습니다. 이를 방지하려면 인스턴스를 삭제하기 전에 자동 확장 처리를 중지하세요.

그룹이 연결 드레이닝을 사용하도록 설정한 백엔드 서비스의 일부일 경우 VM 인스턴스가 제거 또는 삭제되려면 연결 드레이닝 기간 경과 후 최대 60초가 걸릴 수 있습니다.

Google Cloud Platform Console, gcloud compute 도구 또는 API를 사용하여 관리형 인스턴스 그룹에서 인스턴스를 삭제합니다.

콘솔

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

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

  2. 목록의 이름 열에서 개별 인스턴스를 삭제할 인스턴스 그룹 이름을 클릭합니다. 인스턴스 그룹 속성과 그룹에 포함된 인스턴스의 목록이 표시된 페이지가 열립니다.
  3. 인스턴스 목록에서 삭제할 인스턴스를 하나 이상 선택합니다.
  4. 삭제를 클릭합니다. 선택한 인스턴스가 삭제됩니다.

gcloud

gcloud로 인스턴스를 삭제하려면 instance-groups managed delete-instances 하위 명령어를 사용하세요.

gcloud compute instance-groups managed delete-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 삭제할 인스턴스 하나 이상의 URL을 요청 본문에 포함합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/deleteInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

관리형 인스턴스 그룹의 인스턴스를 삭제하도록 요청한 후 시스템에서 인스턴스를 삭제할 수 있게 되는 즉시 인스턴스가 중지됩니다. 그룹에서 삭제하는 인스턴스 수에 따라 이 프로세스에 상당한 시간이 걸릴 수 있습니다. 관리형 인스턴스 그룹에 있는 인스턴스의 상태를 확인하세요.

그룹에서 인스턴스 폐기

관리형 인스턴스 그룹에서 인스턴스를 분리하여 그룹 전체에 영향을 주지 않고 개별 인스턴스의 문제를 쉽게 디버그할 수 있습니다. 그룹에서 인스턴스를 폐기하면 관리형 인스턴스 그룹에 할당된 부하 분산기에서도 인스턴스가 제거됩니다. 특정한 개별 인스턴스에 수동으로 할당된 타겟 풀은 제거되지 않습니다.

인스턴스를 폐기하면 인스턴스 그룹의 지정된 targetSize가 줄어들지만 지정된 자동 확장 처리 설정은 변경되지 않습니다. 자동 확장 처리를 사용하는 관리형 인스턴스 그룹은 필요에 따라 자동으로 계속해서 인스턴스를 추가하거나 제거합니다.

그룹이 연결 드레이닝을 사용하도록 설정한 백엔드 서비스의 일부일 경우 VM 인스턴스가 제거 또는 삭제되려면 연결 드레이닝 기간 경과 후 최대 60초가 걸릴 수 있습니다.

Google Cloud Platform Console, gcloud compute 도구 또는 API를 사용하여 관리형 인스턴스 그룹에서 인스턴스를 폐기합니다.

콘솔

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

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

  2. 목록의 이름 열에서, 제거할 인스턴스가 속한 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성과 그룹에 포함된 인스턴스의 목록이 표시된 페이지가 열립니다.
  3. 인스턴스 목록에서, 그룹에서 제거할 인스턴스를 하나 이상 선택합니다.
  4. 그룹에서 제거를 클릭합니다. 선택한 인스턴스는 그룹에 더 이상 속하지 않지만 그룹 밖에서 계속 실행됩니다.

gcloud

인스턴스를 삭제하지 않고 인스턴스 그룹에서 제거하려면 abandon-instances 하위 명령어를 사용합니다.

gcloud compute instance-groups managed abandon-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 폐기할 인스턴스 하나 이상의 URL을 요청 본문에 포함합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/abandonInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

관리형 인스턴스 그룹에서 인스턴스를 폐기하도록 요청하면 가능한 한 즉시 그룹에서 인스턴스가 제거됩니다. 관리형 인스턴스 그룹에 있는 인스턴스의 상태를 확인하세요.

그룹에 인스턴스 다시 만들기

인스턴스를 다시 만들면 지정된 인스턴스가 삭제되고, 관리형 인스턴스 그룹에 할당된 인스턴스 템플릿을 사용하여 새 인스턴스가 만들어집니다.

선택한 인스턴스를 이 방법을 사용하여 업데이트하면 인스턴스에서 최신 인스턴스 템플릿을 사용할 수 있습니다. 관리형 인스턴스 그룹의 모든 인스턴스를 다시 만들어야 하는 경우에는 대신 지속적 업데이트를 시작하세요.

그룹이 연결 드레이닝을 사용하도록 설정한 백엔드 서비스의 일부일 경우 VM 인스턴스가 제거 또는 삭제되려면 연결 드레이닝 기간 경과 후 최대 60초가 걸릴 수 있습니다.

gcloud compute 도구 또는 API를 사용하여 관리형 인스턴스 그룹에서 선택한 인스턴스를 다시 만듭니다.

gcloud

instance-groups managed recreate-instances 하위 명령어를 사용합니다.

gcloud compute instance-groups managed recreate-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

타겟 관리형 인스턴스 그룹 이름을 사용하여 instanceGroupManagers 서비스에 요청을 생성합니다. 다시 만들 인스턴스 하나 이상의 URL을 요청 본문에 포함합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/recreateInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

관리형 인스턴스 그룹에 인스턴스를 다시 만들도록 요청하면 시스템에서 인스턴스를 프로비저닝할 수 있게 되는 즉시 새 인스턴스가 시작됩니다. 다시 만드는 인스턴스 수에 따라 이 프로세스에 상당한 시간이 걸릴 수 있습니다. 관리형 인스턴스 그룹에 있는 인스턴스의 상태를 확인하세요.

관리형 인스턴스 그룹의 인스턴스 상태 확인

여러 명령어와 요청을 통해 관리형 인스턴스 그룹의 인스턴스를 만들고 삭제하고 수정할 수 있습니다. 그룹에서 인스턴스를 만들거나 삭제하거나 업데이트하는 작업을 예약하면 해당 작업이 DONE으로 반환됩니다. 하지만 이러한 기본 작업이 완료될 때까지는 그룹의 인스턴스가 생성되거나 삭제되거나 업데이트된 것이 아닙니다. gcloud compute 도구 또는 API를 사용하여 인스턴스의 상태를 확인해야 합니다.

gcloud

instance-groups managed list-instances 명령어를 사용하여 그룹의 인스턴스와 인스턴스의 현재 작업을 나열합니다.

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP] \
    --zone [ZONE]

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

gcloud compute instance-groups managed list-instances example-group \
    --zone [ZONE]
NAME               STATUS  ACTION   LAST_ERROR
example-group-0gnk RUNNING NONE
example-group-15xy         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-18ep         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0, Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-1u1y         CREATING

이 예에서 example-group에는 인스턴스 4개가 포함됩니다. 즉, 실행 중인 인스턴스 1개, 만들기 위해 시도 중이지만 주소와 CPU 할당량으로 인해 만들 수 없는 인스턴스 2개, 만드는 중이며 오류가 발생하지 않은 인스턴스 1개가 있습니다.

선점형 인스턴스 그룹의 경우, 선점형 용량을 사용할 수 없다면 만들기 작업이 ZONE_RESOURCE_POOL_EXHAUSTED 오류와 함께 실패합니다. 과거 선점 이벤트를 보려면 인스턴스가 선점되었는지 감지를 참조하세요.

안정될 때까지 대기

instance-groups managed wait-until-stable 명령어를 사용하여 인스턴스 그룹을 자동으로 확인하고 그룹의 모든 인스턴스가 안정될 때까지 스크립트가 대기하도록 할 수 있습니다.

gcloud compute instance-groups managed wait-until-stable example-group \
    --zone [ZONE]

API

instanceGroupManagers 서비스에 요청을 생성하고 확인할 인스턴스가 포함된 관리형 인스턴스 그룹의 이름을 지정합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/listManagedInstances

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

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instanceGroupManagers/example-group/listManagedInstances

요청에 다음 응답이 반환됩니다.

{
 "managedInstances": [
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-0gnk",
   "id": "16960422116594945029",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE"
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-15xy",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-18ep",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0"
      },
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-1u1y",
   "id": "7239700230861444556",
   "instanceStatus": "RUNNING",
   "currentAction": "CREATING"
  }
 ]
}

이 예에서 example-group에는 인스턴스 4개가 포함됩니다. 즉, 실행 중인 인스턴스 1개, 만들기 위해 시도 중이지만 주소와 CPU 할당량으로 인해 만들 수 없는 인스턴스 2개, 만드는 중이며 오류가 발생하지 않은 인스턴스 1개가 있습니다.

선점형 인스턴스 그룹의 경우, 선점형 용량을 사용할 수 없다면 만들기 작업이 ZONE_RESOURCE_POOL_EXHAUSTED 오류와 함께 실패합니다. 과거 선점 이벤트를 보려면 인스턴스가 선점되었는지 감지를 참조하세요.

관리형 인스턴스 그룹 삭제

Google Cloud Platform Console이나 gcloud를 사용하여 관리형 인스턴스 그룹을 삭제하면 그룹의 모든 인스턴스 및 연결된 자동 확장 처리도 함께 삭제됩니다. 이 관리형 인스턴스 그룹의 인스턴스를 유지해야 할 경우 먼저 인스턴스를 폐기하여 그룹에서 인스턴스를 제거하세요. 그런 다음 관리형 인스턴스 그룹을 delete합니다.

API를 사용하여 관리형 인스턴스 그룹을 삭제할 수 있으려면 먼저 연결된 자동 확장 처리를 삭제하도록 개별 요청을 수행해야 합니다.

Google Cloud Platform Console, gcloud compute 도구 또는 API를 사용하여 관리형 인스턴스 그룹과 포함된 인스턴스를 전체적으로 삭제합니다.

콘솔

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

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

  2. 목록에서 삭제할 그룹을 하나 이상 선택합니다.
  3. 삭제를 클릭하여 그룹과 관리형 인스턴스 그룹에 속한 모든 인스턴스를 삭제합니다.

gcloud

instance-groups managed delete 하위 명령어를 사용합니다.

gcloud compute instance-groups managed delete [INSTANCE_GROUP] \
    --zone [ZONE]

API

instanceGroupManagers 서비스에 DELETE 요청을 생성하고 삭제할 관리형 인스턴스 그룹의 이름을 지정합니다.

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

선점형 인스턴스 그룹 만들기

관리형 인스턴스 그룹을 사용하여 여러 선점형 인스턴스를 신속하게 만들면 관리형 인스턴스 그룹에 속한 인스턴스의 비용을 줄일 수 있습니다. 예를 들어 선점형 인스턴스의 그룹을 만들고 이를 사용하여 일괄 처리 작업을 실행한 후 작업이 완료되면 그룹을 삭제할 수 있습니다.

선점형 인스턴스의 그룹을 만들려면 인스턴스 템플릿에서 선점형 옵션을 설정한 후 템플릿을 사용하여 관리형 인스턴스 그룹을 만드세요.

콘솔

  1. GCP Console에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿 페이지로 이동

  2. 새 인스턴스 템플릿을 클릭합니다.
  3. 인스턴스 템플릿에 원하는 속성을 입력합니다.
  4. 고급 옵션 표시를 클릭하여 가용성 정책 섹션을 확장합니다.
  5. 선점사용으로 설정합니다.
  6. 만들기를 클릭하여 템플릿을 만듭니다.
  7. 이 템플릿을 사용하여 관리형 인스턴스 그룹을 만듭니다.

gcloud

gcloud compute에서 instance-templates create 명령어를 사용하여 인스턴스 템플릿을 만듭니다. --preemptible 플래그를 포함합니다.

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --preemptible

인스턴스 템플릿을 만든 후 이를 사용하여 관리형 인스턴스 그룹을 만듭니다.

API

instanceTemplates().insert 메소드를 사용하여 새 인스턴스 템플릿을 만듭니다. preemptible 속성을 scheduling 아래에 포함하고 true로 설정합니다.

{
"name": "[INSTANCE_TEMPLATE]",
"properties": {
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

인스턴스 템플릿을 만든 후 이를 사용하여 관리형 인스턴스 그룹을 만듭니다.

부하 분산기에 관리형 인스턴스 그룹 추가

Google Cloud Platform 부하 분산에서는 트래픽을 처리하기 위해 관리형과 비관리형 인스턴스 그룹이 사용됩니다. 실행하는 부하 분산기 유형에 따라 인스턴스 그룹을 타겟 풀이나 백엔드 서비스에 추가할 수 있습니다. 관리형 인스턴스 그룹과 부하 분산에 대한 자세한 내용은 인스턴스 그룹 개요를 참조하세요.

백엔드 서비스에 관리형 인스턴스 그룹 추가

HTTP(S), 내부 또는 SSL 부하 분산기를 만들기 위해서는 백엔드 서비스가 필요합니다. 백엔드 서비스는 관리형 또는 비관리형의 인스턴스 그룹을 하나씩 포함하는 개별 백엔드를 포함합니다. 인스턴스 그룹의 인스턴스는 부하 분산기의 트래픽에 응답합니다. 그러면 백엔드 서비스는 어느 인스턴스를 사용할 수 있고, 얼마나 많은 트래픽을 처리할 수 있고, 현재 얼마나 많은 트래픽을 처리하고 있는지 파악합니다. 또한 백엔드 서비스는 상태 확인을 모니터링하고 비정상 인스턴스에 새 연결을 전송하지 않습니다.

백엔드 서비스에 인스턴스 그룹을 추가하는 방법은 백엔드 서비스에 인스턴스 그룹 추가를 참조하세요.

타겟 풀에 관리형 인스턴스 그룹 추가

타겟 풀은 가상 머신 인스턴스를 하나 이상 포함하는 객체입니다. 대상 풀은 네트워크 부하 분산기가 사용자 요청을 연결된 대상 풀에 전달하는 대상 부하 분산에 사용됩니다. 해당 대상 풀에 속하는 인스턴스가 이러한 요청을 처리하고 응답을 반환합니다. 인스턴스 그룹에서 인스턴스가 추가되거나 삭제될 때 대상 풀이 변경사항으로 자동 업데이트되도록 관리형 인스턴스 그룹을 대상 풀에 추가할 수 있습니다.

대상 풀이 있어야 대상 풀에 관리형 인스턴스 그룹을 추가할 수 있습니다. 자세한 내용은 대상 풀 추가에 대한 설명서를 참조하세요.

대상 풀에 기존 관리형 인스턴스 그룹을 추가하려면 다음 안내를 따르세요. 그러면 관리형 인스턴스 그룹에 속하는 모든 VM 인스턴스가 대상 풀에 추가됩니다.

콘솔

  1. GCP Console에서 대상 풀 페이지로 이동합니다.

    대상 풀 페이지로 이동

  2. 인스턴스 그룹을 추가할 대상 풀을 클릭합니다.
  3. 수정 버튼을 클릭합니다.
  4. VM 인스턴스 섹션까지 아래로 스크롤하고 인스턴스 그룹 선택을 클릭합니다.
  5. 드롭다운 메뉴에서 인스턴스 그룹을 선택합니다.
  6. 변경사항을 저장합니다.

gcloud

gcloud 명령줄 도구에서 set-target-pools 명령어를 사용합니다.

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--zone ZONE]

각 항목의 의미는 다음과 같습니다.

  • [INSTANCE_GROUP]은 인스턴스 그룹의 이름입니다.
  • [TARGET_POOL]은 이 인스턴스 그룹을 추가할 타겟 풀 하나 이상의 이름입니다.
  • [ZONE]은 인스턴스 그룹의 영역입니다.

API

API에서 다음 URI에 POST를 요청합니다.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 이 요청의 프로젝트 ID입니다.
  • [ZONE]은 인스턴스 그룹의 영역입니다.
  • [INSTANCE_GROUP]은 인스턴스 그룹의 이름입니다.

이 그룹을 추가할 대상 풀에 대한 URI 목록이 요청 본문에 포함되어야 합니다. 예를 들면 다음과 같습니다.

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

관리형 인스턴스 그룹에 이름이 지정된 포트 할당

이름이 지정된 포트는 서비스가 실행되는 포트 번호와 서비스 이름을 나타내는 키:값 쌍입니다. 이름이 지정된 포트는 개별 인스턴스의 특정 포트로 트래픽을 보내기 위해 부하 분산 서비스에 사용됩니다. 예를 들어 이름이 지정된 포트를 http:80으로 설정한 다음 이름이 http인 포트로 트래픽을 보내도록 백엔드 서비스를 구성하면 부하 분산은 인스턴스 그룹에 속한 개별 인스턴스의 포트 80으로 트래픽을 전달합니다.

이름이 지정된 포트는 부하 분산에 사용되는 간단한 메타데이터이며 Compute Engine에서 네트워크 또는 방화벽 리소스를 제어하지 않습니다.

각 서비스 이름에 여러 포트를 할당하거나 각 포트에 여러 서비스 이름을 할당할 수 있지만 지정된 백엔드 서비스는 한 번에 이름이 지정된 포트 하나로만 트래픽을 전달할 수 있습니다.

콘솔

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

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

  2. 이름이 지정된 포트를 지정할 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성이 있는 페이지가 열립니다.
  3. 그룹 편집을 클릭하여 이 관리형 인스턴스 그룹을 수정합니다.
  4. 포트 이름 매핑 지정을 클릭하여 이름이 지정된 포트 옵션을 확장합니다.
  5. 항목 추가를 클릭하고 원하는 포트 이름과 이 이름에 연결할 포트 번호를 입력합니다. 필요하면 항목 추가를 다시 클릭하여 항목을 더 추가합니다.
  6. 저장을 클릭하여 변경사항을 저장하고 관리형 인스턴스 그룹의 인스턴스에 이름이 지정된 포트를 적용합니다.

gcloud

set-named-ports 명령어를 사용하여 이름이 지정된 포트를 하나 이상 설정합니다.

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

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

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:80,name2:8080

각 서비스 이름에 여러 포트를 할당하거나 각 서비스에 여러 이름을 할당하려면 이름이나 포트마다 항목을 2개 이상 만듭니다. 예를 들어 name1을 포트 10, 20, 80에 할당한 다음 name2name3을 모두 포트 80에 할당합니다. 마지막으로 포트 9000name4에 할당합니다.

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:10,name1:20,name1:80,\
                name2:8080,name3:8080,\
                name4:9000

get-named-ports 명령어를 사용하여 관리형 인스턴스 그룹의 이름이 지정된 포트 할당을 확인합니다.

gcloud compute instance-groups managed get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

인스턴스 그룹 관리자 API에서는 setNamedPorts API 메소드를 사용할 수 없지만 대신 인스턴스 그룹 API를 사용하여 이 작업을 할 수 있습니다.

인스턴스 그룹 API에 요청을 생성하고 인스턴스 그룹의 이름을 포함합니다. 특정 그룹에 대한 정보를 가져와서 인스턴스 그룹의 현재 fingerprint 값을 가져옵니다. 요청 본문에 fingerprint와 하나 이상의 namedPorts 값 쌍을 포함하세요.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

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

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

각 서비스 이름에 여러 포트를 할당하려면 해당 서비스 이름에 대해 여러 항목을 만듭니다. 예를 들어 포트 10, 20, 80name1에 할당하고 포트 8080name2에 할당할 수 있습니다.

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

관리형 인스턴스 그룹에 이미 할당된 이름이 지정된 포트를 나열하려면 이 그룹을 가리키는 GET 요청을 생성합니다.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

instanceTemplateversions 필드 이해

관리형 인스턴스 그룹을 만들 때 사용자는 개별 VM 인스턴스를 만들기 위해 관리형 인스턴스 그룹에 사용되는 인스턴스 템플릿을 제공합니다. 기본적으로 Compute Engine에서는 별도의 두 API 속성, 즉 최상위 instanceTemplate 속성과 versions 속성에 사용된 인스턴스 템플릿을 설명합니다. 예를 들어 다음 관리형 인스턴스 그룹에서는 instanceTemplate 필드와 versions 필드가 둘 다 채워집니다.

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

Compute Engine에서는 이전 버전과의 호환성을 위해 최상위 instanceTemplate 필드와 versions 필드를 둘 다 자동으로 채웁니다. 가능한 경우 versions 필드를 지정하고 최상위 instanceTemplates 필드를 생략하는 것이 좋지만 애플리케이션 코드에 의해 현재 최상위 instanceTemplate 필드가 설정된 경우 여전히 요청이 유효합니다.

관리형 인스턴스 그룹 업데이터에 대한 자세한 내용은 관리형 인스턴스 그룹 업데이트를 참조하세요.

(고급) 관리형 인스턴스 그룹으로 인스턴스 템플릿 카나리아

서로 다른 인스턴스 템플릿을 사용하는 두 그룹의 VM이 있는 관리형 인스턴스 그룹을 만들 수 있습니다. 예를 들어 VM 인스턴스가 20개인 관리형 인스턴스 그룹을 만들어서 VM 10개는 특정 운영 이미지에서 실행되고 나머지는 다른 운영체제 이미지에서 실행되게 하려 할 수 있습니다. 이 기능을 사용하면 서로 다른 두 인스턴스 템플릿 버전을 비교하여 하나를 결정할 수 있습니다.

API에서 다음 URL에 POST 요청을 합니다.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

요청 본문에서 최상위 instanceTemplates 필드를 생략하고 인스턴스 템플릿 2개가 설정된 versions 속성을 포함해야 합니다. versions 객체마다 인스턴스 템플릿을 지정합니다. 그리고 versions 객체 중 하나에만 targetSize를 지정해야 합니다. 예를 들어 다음 요청을 실행하면 VM 인스턴스 중 50%가 example-template 인스턴스 템플릿을 사용하고 나머지 VM 인스턴스는 small-machine-type 템플릿을 사용하는 인스턴스 그룹이 만들어집니다.

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

관리형 인스턴스 그룹 및 IAM

관리형 인스턴스 그룹의 일부로서 Compute Engine에서 수행되는 모든 작업은 프로젝트의 Google API 서비스 계정을 사용하여 이루어집니다. 프로젝트별 서비스 계정의 이메일 주소는 다음과 같습니다.

[PROJECT_ID]@cloudservices.gserviceaccount.com

각 매개변수는 다음과 같습니다.

  • [PROJECT_ID]는 해당하는 프로젝트의 숫자 ID입니다.

Google API 서비스 계정은 기본 Compute Engine 서비스 계정과 다릅니다.

관리형 인스턴스 그룹에 사용되는 서비스 계정에 인스턴스 템플릿을 기반으로 가상 머신 인스턴스를 만들 수 있는 충분한 권한이 있어야 합니다. 특히 인스턴스 그룹에 인스턴스를 만들고 관리하려면 서비스 계정에 compute.instanceAdmin.v1 역할을 부여해야 하며 필요할 경우 serviceAccountUser 역할도 부여해야 합니다. 관리형 인스턴스 그룹에서 서비스 계정으로 실행될 수 있는 인스턴스를 만들 경우에만 serviceAccountUser 역할이 필요합니다. 배포 관리자를 포함한 다른 프로세스에 이 계정이 사용된다는 사실도 기억하세요.

관리형 인스턴스 그룹을 만들거나 인스턴스 템플릿을 업데이트할 때 Compute Engine에서는 Google API 서비스 계정에 대해 다음 사항을 확인합니다.

  • 서비스 계정으로 실행될 수 있는 인스턴스를 만들려는 경우 serviceAccountUser 역할이 부여되었는지 여부
  • 이미지, 디스크, VPC 네트워크, 서브넷 등 인스턴스 템플릿에서 참조되는 모든 리소스에 대한 권한이 있는지 여부

서비스 계정에 대한 자세한 내용은 서비스 계정 개요를 참조하세요.

관리형 인스턴스 그룹의 모든 인스턴스 업데이트

관리형 인스턴스 그룹 업데이트를 참조하세요.

문제해결

관리형 인스턴스 그룹에서 인스턴스 만들기가 계속 실패합니다. 왜 그럴까요?

여러 가지 문제로 인해 인스턴스 그룹에서 인스턴스를 만들거나 다시 만들지 못하게 될 수 있습니다. 일반적으로 발생하는 몇 가지 문제는 다음과 같습니다.

  • 관리형 인스턴스 그룹에서 인스턴스와 부팅 영구 디스크 둘 다를 만들거나 다시 만들려고 시도하지만 영구 디스크가 이미 있습니다. 새 인스턴스가 만들어지면 기본적으로 새 부팅 영구 디스크도 만들어집니다. 이 디스크 이름은 인스턴스 이름을 따라 지정됩니다. 인스턴스 이름이 my-awesome-instance이면 디스크 이름도 my-awesome-instance입니다. 이 이름의 영구 디스크가 이미 있으면 요청이 실패합니다. 기존의 영구 디스크를 삭제하여 이 문제를 해결하세요.

  • 인스턴스 템플릿에서 부팅 영구 디스크의 disks.autoDelete 옵션을 false로 설정하여, 자동 복구와 같은 이유로 인스턴스가 삭제되었을 때 영구 디스크가 삭제되지 않았습니다. 관리형 인스턴스 그룹이 같은 이름의 인스턴스를 다시 만들려고 시도할 때 같은 이름의 영구 디스크가 이미 있어 동일한 문제가 발생했습니다. 기존의 영구 디스크를 삭제하여 발생한 문제를 해결하고, 인스턴스와 함께 부팅 영구 디스크도 삭제하려면 인스턴스 템플릿을 업데이트하여 disks.autoDeletetrue로 설정합니다.

  • 인스턴스 템플릿이 잘못된 경우도 있습니다. 최근에 인스턴스 템플릿을 업데이트한 경우 관리형 인스턴스 그룹에서 인스턴스 만들기에 실패하도록 하는 잘못된 속성이 있을 수 있습니다. 몇 가지 잘못된 속성은 다음과 같습니다.

    • 소스 이미지와 같은 존재하지 않는 리소스를 지정했습니다.
    • 리소스 이름 철자가 틀렸습니다.
    • 부팅 디스크가 아닌 추가 영구 디스크를 읽기-쓰기 모드로 연결하려고 했습니다. 인스턴스 그룹에는 인스턴스가 여러 개 있으므로 그룹의 모든 인스턴스에 공유하려는 추가 디스크를 읽기 전용 모드로만 연결할 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서