MIG에서 스테이트풀(Stateful) 메타데이터 구성


인스턴스 메타데이터는 메타데이터 서버를 통해 애플리케이션의 속성을 설정하고 애플리케이션과 통신하는 데 유용합니다. 예를 들어 메타데이터를 사용하여 가상 머신(VM) 인스턴스의 ID, 환경 변수, 클러스터 아키텍처 관련 정보 또는 VM이 담당하는 데이터 범위를 구성할 수 있습니다.

관리형 인스턴스 그룹(MIG)에서 스테이트풀(Stateful) 메타데이터를 구성하면 인스턴스별 메타데이터가 관리형 인스턴스 자동 복구, 업데이트, 재생성 이벤트에 보존됩니다.

인스턴스별 구성에서 설정하고 구성을 적용하여 MIG의 VM 인스턴스에 대한 스테이트풀(Stateful) 메타데이터를 개별적으로 구성합니다. 인스턴스 생성 시 인스턴스별 구성을 설정하거나 기존 관리형 인스턴스에 대해 설정할 수 있습니다. 인스턴스별 구성이 적용되면 MIG에서 관리형 인스턴스의 구성에서 보존된 상태(preservedStateFromConfig) 필드에 스테이트풀(Stateful) 메타데이터를 저장합니다.

시작하기 전에

  • 스테이트풀(Stateful) MIG를 사용하는 경우스테이트풀(Stateful) MIG 작동 방식을 검토합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.

      REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참고하세요.

제한사항

스테이트풀(Stateful) 메타데이터를 사용하는 MIG에는 다음과 같은 제한사항이 있습니다.

스테이트풀(Stateful) 구성(스테이트풀(Stateful) MIG)을 사용하는 MIG에는 다음 제한사항이 있습니다.

  • MIG에 스테이트풀(Stateful) 구성이 있는 경우 자동 확장을 사용할 수 없습니다.
  • 자동화된 순차적 업데이트를 사용하려면 RECREATE에 대해 대체 메서드를 설정해야 합니다.
  • 스테이트풀(Stateful) 리전 MIG의 경우 사전 재배포를 중지(재배포 유형을 NONE으로 설정)하여 자동 교차 영역 재배포에 의한 스테이트풀(Stateful) 인스턴스 삭제를 방지해야 합니다.
  • 모든 인스턴스 구성을 사용하여 인스턴스 템플릿 속성을 재정의하는 경우 어떤 인스턴스별 구성에서도 이러한 속성을 지정할 수 없으며 마찬가지로 그룹의 전체 인스턴스 구성에서 이러한 속성을 지정할 수 없습니다.

  • 수동으로 또는 크기 조절을 통해 인스턴스를 영구 삭제하면 MIG가 인스턴스의 스테이트풀(Stateful) 메타데이터를 보존하지 않습니다.

인스턴스 생성 시 스테이트풀(Stateful) 메타데이터 설정

MIG에서 수동으로 인스턴스를 만들 때 스테이트풀(Stateful) 메타데이터를 설정합니다. 이 기능은 독립형 VM의 스테이트풀(Stateful) 애플리케이션을 스테이풀(Stateful) MIG로 마이그레이션하고 스테이트풀(Stateful) 인스턴스를 만들 때 유용합니다.

MIG에서 수동으로 인스턴스를 만들고 스테이트풀(Stateful) 메타데이터를 제공하면 MIG는 다음 작업을 수행합니다.

  1. 제공된 인스턴스 이름을 사용하여 인스턴스 템플릿에서 관리형 인스턴스를 만듭니다.
  2. 제공된 스테이트풀(Stateful) 메타데이터로 인스턴스별 구성을 만들고 인스턴스에서 해당 메타데이터를 설정합니다.
  3. 스테이트풀(Stateful) 메타데이터를 연결된 관리형 인스턴스의 구성(preservedStateFromConfig)에서 보존된 상태로 저장합니다.

gcloud

커스텀 이름으로 관리형 인스턴스를 만들고 해당 VM에 스테이트풀(Stateful) 메타데이터를 설정하려면 --stateful-metadata 플래그와 함께 gcloud compute instance-groups managed create-instance 명령어를 사용합니다.

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

다음을 바꿉니다.

  • NAME: 인스턴스를 만들 MIG의 이름입니다.
  • INSTANCE_NAME: 만들려는 인스턴스의 이름입니다.
  • KEYVALUE: 인스턴스 템플릿에서 정의된 메타데이터 외에 인스턴스에 개별적으로 설정할 스테이트풀(Stateful) 메타데이터 키-값 쌍입니다.
    • 여기서 설정한 키 값이 인스턴스 템플릿에서 충돌하는 키 값보다 우선시됩니다.

예시

노드 클러스터(example-cluster)를 배포해야 하며, 두 가지 모드(active 또는 standby) 중 하나로 작동할 수 있습니다. 메타데이터를 사용하여 클러스터의 각 VM에 대해 모드를 개별적으로 설정합니다(예: mode:active). 또한 basic 또는 elaborate로 설정할 수있는 logging 메타데이터 키를 사용하여 각 노드에 대한 정교한 로깅 방법을 구성합니다. 노드의 애플리케이션은 인스턴스 메타데이터 값을 사용하여 구성됩니다.

정교한 로깅을 사용하여 활성 노드(node-12)를 만들려면 다음 명령어를 실행합니다.

gcloud compute instance-groups managed create-instance example-cluster \
  --instance node-12 \
  --stateful-metadata mode=active,logging=elaborate

이 명령어는 example-cluster MIG에서 VM(node-12)을 만들고 새 인스턴스에 대해 2개의 메타데이터 키-값 쌍(mode:activelogging:elaborate)을 설정합니다.

Terraform

커스텀 이름으로 관리형 인스턴스를 만들고 해당 VM에 스테이트풀(Stateful) 메타데이터를 설정하려면 google_compute_per_instance_config 리소스를 사용합니다.

다음 샘플에서는 영역 MIG를 사용합니다. 아직 영역 MIG가 없는 경우 VM이 단일 영역으로 제한된 영역 MIG를 만듭니다.

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

REST

MIG에서 커스텀 VM 이름으로 하나 이상의 관리형 인스턴스를 만들고 이러한 VM에 스테이트풀(Stateful) 메타데이터를 개별적으로 설정하려면 instanceGroupManagers.createInstances 메서드를 사용합니다. 리전 MIG의 경우 regionInstanceGroupManagers.createInstances 메서드를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY" : "VALUE",
          ...
        }
      }
    },
    ...
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: 인스턴스를 만들 MIG의 이름입니다.
  • INSTANCE_NAME: 만들려는 인스턴스의 이름입니다.
  • KEYVALUE: 인스턴스 템플릿에서 정의된 메타데이터 외에 인스턴스에 개별적으로 설정할 스테이트풀(Stateful) 메타데이터 키-값 쌍입니다.
    • 여기서 설정한 키 값이 인스턴스 템플릿에서 충돌하는 키 값보다 우선시됩니다.

예시

노드 클러스터(example-cluster)를 배포해야 하며, 두 가지 모드(active 또는 standby) 중 하나로 작동할 수 있습니다. 메타데이터를 사용하여 클러스터의 각 VM에 대해 모드를 개별적으로 설정합니다(예: mode:active). 또한 basic 또는 elaborate로 설정할 수있는 logging 메타데이터 키를 사용하여 각 노드에 대한 정교한 로깅 방법을 구성합니다. 노드의 애플리케이션은 인스턴스 메타데이터 값을 사용하여 구성됩니다.

정교한 로깅을 사용하여 활성 노드(node-12)를 만들려면 다음 메서드를 실행합니다.

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances

{
  "instance": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode":"active",
          "logging":"elaborate"
        }
      }
    }
  ]
}

이 메서드는 example-cluster MIG에서 VM(node-12)을 만들고 새 인스턴스에 대해 2개의 메타데이터 키-값 쌍(mode:activelogging:elaborate)을 설정합니다.

기존 VM 인스턴스의 스테이트풀(Stateful) 메타데이터를 개별적으로 설정, 수정, 삭제

연결된 인스턴스별 구성에서 설정하고 인스턴스를 업데이트하여 구성을 적용하면서 MIG의 스테이트풀(Stateful) 메타데이터를 설정, 수정 또는 삭제합니다.

gcloud

MIG에서 VM 인스턴스의 스테이트풀(Stateful) 메타데이터를 개별적으로 구성하려면 연결된 인스턴스별 구성에서 스테이트풀(Stateful) 메타데이터를 설정하거나 삭제합니다. 이와 동시에 구성을 인스턴스에 적용하면 (--update-instance) 인스턴스를 계속 실행할지, 다시 시작할지, 다시 만들지 여부를 선택할 수 있습니다. 구성을 적용하지 않는 경우(--no-update-instance) 인스턴스를 다시 만들거나 업데이트할 때까지 변경 사항이 적용되지 않습니다.

지정된 인스턴스에 대한 인스턴스별 구성이 없는 경우 다음 플래그 중 하나와 함께 gcloud compute instance-groups managed instance-configs create 명령어를 사용합니다.

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

지정된 인스턴스에 대한 인스턴스별 구성이 이미 있는 경우 다음과 같은 gcloud compute instance-groups managed instance-configs update 명령어를 사용합니다.

  • 메타데이터 설정 또는 수정을 위한 --stateful-metadata 플래그
  • 인스턴스별 스테이트풀(Stateful) 메타데이터를 제거하기위한 --remove-stateful-metadata 플래그입니다.
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

다음을 바꿉니다.

  • NAME: 관리형 인스턴스 그룹 이름입니다.
  • INSTANCE_NAME: 스테이트풀(Stateful) 메타데이터를 구성할 인스턴스의 이름입니다.
  • KEY=VALUE: 인스턴스 템플릿에서 정의된 메타데이터 외에 인스턴스에 개별적으로 설정할 스테이트풀(Stateful) 메타데이터 키-값 쌍입니다. 여기서 설정한 키 값이 인스턴스 템플릿에서 충돌하는 키 값보다 우선합니다.
  • KEY: 인스턴스별 구성에서 삭제할 인스턴스별 스테이트풀(Stateful) 메타데이터 키입니다.
    • 인스턴스 템플릿에서 키 값을 정의하지 않으면 변경 사항이 적용될 때 키-값 쌍이 인스턴스에서 완전히 삭제됩니다.
    • 키 값이 인스턴스 템플릿에 의해 정의되는 경우 변경 사항이 적용될 때 인스턴스에서 인스턴스 템플릿 값이 설정됩니다.
  • MINIMAL_ACTION: 인스턴스에 인스턴스별 구성 업데이트를 적용할 때 최소한 지정된 작업은 수행합니다. --update-instance 플래그를 사용할 경우 MINIMAL_ACTION만 설정할 수 있습니다. 값은 다음 중 하나여야 합니다.

    • none: 적용할 작업이 없습니다.
    • refresh: 인스턴스를 중지하지 않고 적용할 수 있는 업데이트를 적용합니다.
    • restart: 인스턴스를 중지했다가 다시 시작합니다.
    • replace: 인스턴스를 다시 만듭니다.

    생략 시 업데이트에 필요한 중단이 가장 적은 작업이 사용됩니다.

예시

active 또는 standby 모드 중 하나로 작동할 수 있는 노드 클러스터(example-cluster)가 있습니다. 메타데이터를 사용하여 클러스터의 각 VM에 대해 모드를 개별적으로 설정합니다(예: mode:active). 또한 basic 또는 elaborate로 설정할 수있는 logging 메타데이터 키를 사용하여 각 노드에 대한 정교한 로깅 방법을 구성합니다. 각 노드의 애플리케이션은 인스턴스 메타데이터 값을 사용합니다.

인스턴스 템플릿은 모든 인스턴스의 기본값으로 사용할 mode:activelogging:basic 메타데이터를 정의합니다. 클러스터의 node-12 VM에 대한 인스턴스별 구성에서 logging:elaborate를 설정했습니다. 이제 이 VM의 node-12를 대기 모드로 전환하고 로깅을 basic으로 전환해보겠습니다.

node-12 인스턴스를 대기로 전환하고 로깅을 베이직으로 전환하려면 다음 명령어를 실행합니다.

gcloud compute instance-groups managed instance-configs update example-cluster \
  --instance node-12 \
  --stateful-metadata mode=standby \
  --remove-stateful-metadata logging

이 명령은 다음을 수행합니다.

  1. example-cluster MIG의 VM(node-12)과 연결된 인스턴스별 구성에서 mode:standby 메타데이터를 설정합니다.
  2. node-12 인스턴스의 인스턴스별 구성에서 logging:elaborate 메타데이터를 삭제합니다.
  3. 인스턴스별 구성 변경 사항을 node-12 VM에 적용합니다.
    • 구성에 따라 mode:standby 메타데이터를 설정합니다.
    • logging 키 값이 더 이상 인스턴스별 구성으로 정의되지 않으므로 인스턴스 템플릿에서 logging:basic 메타데이터를 설정합니다.
  4. --no-update-instance가 생략되므로 기본적으로 변경사항이 VM에 즉시 적용됩니다.
  5. 이 경우 --instance-update-minimal-action 플래그가 생략되고 기본적으로 업데이트용으로 중단이 가장 적은 작업이 선택되므로 업데이트 중에 VM이 계속 실행됩니다(refresh).

REST

MIG에서 기존 VM 인스턴스에 스테이트풀(Stateful) 메타데이터를 개별적으로 구성하려면 연결된 인스턴스별 구성에서 메타데이터를 설정하거나 삭제합니다. 그런 다음 인스턴스를 업데이트하여 구성을 적용합니다.

지정된 인스턴스에 인스턴스별 구성이 아직 없는 경우 스테이트풀(Stateful) 메타데이터와 함께 instanceGroupManagers.updatePerInstanceConfigs 메서드를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

지정된 인스턴스에 대해 인스턴스별 구성이 이미 있으면 instanceGroupManagers.patchPerInstanceConfigs 메서드를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: MIG 이름입니다.
  • INSTANCE_NAME: 스테이트풀(Stateful) 메타데이터를 구성할 VM의 이름입니다.
  • KEYVALUE: 인스턴스 템플릿에서 정의된 메타데이터 외에 인스턴스에 개별적으로 설정할 스테이트풀(Stateful) 메타데이터 키-값 쌍입니다.
    • 인스턴스 템플릿에 이미 존재하는 키에 대해 정의된 스테이트풀(Stateful) 메타데이터 값은 인스턴스 템플릿 값을 재정의합니다.
    • 인스턴스 템플릿의 다른 메타데이터 항목은 영향을 받지 않으며 계속 사용할 수 있습니다.
    • null을 값으로 제공하면 인스턴스별 구성에서 키가 삭제됩니다.
  • FINGERPRINT: (선택사항) 지정된 구성의 지문입니다(이미 있는 경우). 낙관적 잠금에 사용됩니다.

updatePerInstanceConfigspatchPerInstanceConfigs 메서드는 지정된 인스턴스별 구성을 업데이트하지만 연관된 VM 인스턴스에 구성 업데이트를 적용하지 않습니다. 변경사항은 인스턴스를 업데이트하거나 다시 만들 때 VM에 적용됩니다. 변경사항을 VM에 적용하려면 업데이트를 수동으로 적용하거나 사전형 또는 상황별 모드에서 업데이터를 사용합니다.

예시

active 또는 standby 모드 중 하나로 작동할 수 있는 노드 클러스터(example-cluster)가 있습니다. 메타데이터를 사용하여 클러스터의 각 VM에 대해 모드를 개별적으로 설정합니다(예: mode:active). 또한 basic 또는 elaborate로 설정할 수있는 logging 메타데이터 키를 사용하여 각 노드에 대한 정교한 로깅 방법을 구성합니다. 각 노드의 애플리케이션은 인스턴스 메타데이터 값을 사용합니다.

인스턴스 템플릿은 모든 인스턴스의 기본값으로 사용할 mode:activelogging:basic 메타데이터를 정의합니다. 클러스터의 node-12 VM에 대한 인스턴스별 구성에서 logging:elaborate를 설정했습니다. 이제 이 인스턴스의 node-12를 대기 모드로 전환하고 로깅을 basic으로 전환해보겠습니다.

node-12 VM을 대기로 전환하고 로깅을 기본으로 전환하려면 patchPerInstanceConfigs 메서드를 사용하여 연관된 인스턴스별 구성에 패치를 적용합니다.

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode": "standby",
          "logging": null
        }
      }
    }
  ]
}

이 메서드는 다음을 수행합니다.

  1. example-cluster MIG의 VM(node-12)과 연결된 인스턴스별 구성에서 mode:standby 메타데이터를 설정합니다.
  2. 제공된 값이 null이므로 인스턴스별 구성에서 logging:elaborate 메타데이터를 삭제합니다.

구성 업데이트는 아직 node-12 VM 인스턴스에 적용되지 않습니다. 다음에 인스턴스를 다시 만들거나 업데이트할 때 또는 사전형 자동 업데이트를 사용하는 경우 구성 업데이트가 적용됩니다.

인스턴스별 구성 업데이트를 node-12 VM 인스턴스에 적용하려면 인스턴스의 instanceGroupManagers.applyUpdatesToInstances메서드를 호출합니다.

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-12"],
  "minimalAction": "NONE"
}

이 메서드는 업데이트된 인스턴스별 구성을 node-12 VM에 적용합니다.

  1. 인스턴스별 구성에 따라 mode:standby 메타데이터를 설정합니다.
  2. logging 키 값이 더 이상 인스턴스별 구성으로 정의되지 않으므로 인스턴스 템플릿에서 logging:basic 메타데이터를 설정합니다.
  3. minimalActionNONE으로 설정되어 업데이트 중에 VM이 계속 실행되므로, MIG에서 업데이트에 필요한 중단이 가장 적은 작업을 사용할 수 있습니다. 인스턴스 메타데이터를 업데이트하려면 실행 중인 인스턴스를 중단시키지 않는 REFRESH 작업이 필요합니다.

의견

스테이트풀(Stateful) MIG에 대한 사용 사례, 문제 또는 의견을 알고 싶습니다. mig-discuss@google.com으로 저희 팀에 의견을 공유해 주세요.

다음 단계