MIG에서 스테이트풀(Stateful) 영구 디스크 구성

영구 디스크를 스테이트풀(Stateful)로 구성하면 디스크 상태를 보존하면서 VM 인스턴스 자동 복구와 관리형 업데이트의 이점을 누릴 수 있습니다.

관리형 인스턴스 그룹(MIG)의 스테이트풀(Stateful) 정책에 디스크의 기기 이름을 추가하면 관리형 인스턴스 그룹(MIG)의 모든 인스턴스에서 인스턴스 템플릿에 정의된 디스크를 스테이트풀(Stateful)로 구성할 수 있습니다.

인스턴스별 구성을 설정하여 MIPS의 인스턴스에 대한 스테이트풀(Stateful) 영구 디스크를 개별적으로 구성할 수도 있습니다. 이러한 디스크는 인스턴스 템플릿에서 정의할 필요가 없습니다.

시작하기 전에

제한사항

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

  • 스테이트풀(Stateful) MIG에는 자동 확장을 사용할 수 없습니다.
  • 스테이트풀(Stateful) 디스크 또는 스테이트풀(Stateful) 메타데이터를 구성하는 경우 proactive 순차적 업데이트를 사용할 수 없습니다.
    • 대신 특정 인스턴스를 업데이트하여 업데이트를 제어하고 중단을 제한할 수 있습니다.
    • 커스텀 인스턴스 이름을 사용하고 스테이트풀(Stateful) 디스크 또는 메타데이터를 구성하지 않는 경우 사전 업데이트를 사용할 수 있지만 인스턴스 이름을 보존하려면 교체 메서드RECREATE로 설정해야 합니다.
  • 수동으로 또는 크기 조절을 통해 인스턴스를 영구 삭제하면 MIG가 인스턴스의 스테이트풀(Stateful) 메타데이터를 보존하지 않습니다.
  • 스테이트풀(Stateful) 리전 MIG의 경우 사전 재배포를 중지(재배포 유형을 NONE으로 설정)하여 자동 교차 영역 재배포에 의한 스테이트풀(Stateful) 인스턴스 삭제를 방지해야 합니다.

스테이트풀(Stateful) 영구 디스크를 사용하는 경우

스테이트풀(Stateful) 영구 디스크를 사용하여 디스크의 데이터를 보존하면서 VM 자동 복구제어 업데이트의 이점을 활용합니다. 자세한 내용은 스테이트풀(Stateful) MIG의 사용 사례를 참조하세요.

스테이트풀(Stateful) 디스크를 구성하면 VM 인스턴스 자동 복구, 업데이트, 재생성 동안 이러한 디스크가 보존됩니다. 하지만 스테이트풀(Stateful) 디스크를 원본 이미지에서 재생성하거나 새 이미지로 업데이트할 수도 없습니다.

부팅 디스크를 스테이트리스(Stateless)로 유지하는 것이 좋습니다.

부팅 디스크를 스테이트리스(Stateless)로 유지하면 다음과 같은 이점이 있습니다.

  • 손상된 부팅 디스크를 원본 이미지에서 다시 만들어 복구할 수 있습니다. 자동 복구는 이러한 복구를 자동으로 수행합니다.
  • 부팅 디스크를 새 버전 및 보안 패치가 적용된 최신 이미지로 업데이트할 수 있습니다.

자세한 내용은 자동 복구업데이트가 보존 상태를 처리하는 방법을 참조하세요.

MIG의 모든 VM에 스테이트풀(Stateful) 영구 디스크 구성

MIG의 스테이트풀(Stateful) 정책에 디스크의 기기 이름을 추가하여 인스턴스 템플릿에 정의된 모든 디스크를 스테이트풀(Stateful)로 구성합니다. MIG는 기존 및 향후 모든 VM 인스턴스에서 해당 기기 이름을 갖는 디스크를 스테이트풀(Stateful)로 취급합니다.

gcloud 도구 또는 Compute Engine API를 사용하여 다음을 수행합니다.

  • MIG 생성 시 스테이트풀(Stateful) 디스크를 구성합니다.
  • 기존 MIG에 있는 디스크의 스테이트풀(Stateful) 구성을 설정하거나 업데이트합니다.
  • MIG에서 스테이트풀(Stateful) 디스크를 제거합니다.

MIG 생성 시 스테이트풀(Stateful) 디스크 구성

gcloud

MIG 생성 시 인스턴스 템플릿에서 어느 디스크가 스테이트풀(Stateful)이어야 하는지 지정하려면 gcloud compute instance-groups managed create 명령어--stateful-disk 플래그를 사용합니다.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

다음을 바꿉니다.

  • INSTANCE_GROUP_NAME: 만들려는 관리형 인스턴스 그룹의 이름입니다.
  • INSTANCE_TEMPLATE: 인스턴스를 만들 때 사용할 인스턴스 템플릿의 이름입니다.
  • SIZE: 이 그룹에 필요한 초기 VM 수입니다.
  • DEVICE_NAME: 인스턴스 템플릿에 지정된 디스크의 기기 이름입니다.
  • DELETE_RULE: VM이 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. 대신 VM이 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: VM 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 관리형 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 디스크를 삭제합니다.

    삭제 규칙의 값에 관계없이 스테이트풀(Stateful) 디스크는 VM 자동 복구, 업데이트, 재생성 작업 시 항상 보존됩니다.

예시

각각 운영체제 및 데이터베이스 바이너리가 포함된 스테이트리스(Stateless) 부팅 디스크와 스테이트풀(Stateful) 데이터 디스크가 있는 12개의 샤드를 포함한 데이터베이스를 배포하려고 합니다. 다음 단계를 따르세요.

  1. OS와 데이터베이스가 미리 설치된 img-example-db-v01 이미지에 기반한 스테이트리스(Stateless) 부팅 디스크와 스테이트풀(Stateful) 데이터 디스크로 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create example-database-template-v01 \
        --image img-example-db-v01 \
        --create-disk device-name=data-disk,mode=rw,image=empty10GBext4
    

    --create-disk 플래그는 다음을 수행하도록 MIG에 지시합니다.

    1. 미리 준비된 빈 ext4 이미지에서 각 VM 인스턴스를 위한 새 10GB 디스크를 만듭니다.
    2. 기기 이름 data-disk를 사용하여 디스크를 VM에 읽기/쓰기 모드로 연결합니다.
  2. 인스턴스 템플릿에서 MIG를 만들고 데이터 디스크를 스테이트풀(Stateful)로 정의합니다.

    gcloud compute instance-groups managed create example-database-group \
      --template example-database-template-v01 \
      --base-instance-name shard \
      --size 12 \
      --stateful-disk device-name=data-disk,auto-delete=on-permanent-instance-deletion
    

    기기 이름 data-disk는 인스턴스 템플릿에서 가져옵니다. 데이터 디스크는 (수동 인스턴스 삭제 또는 그룹 크기 수동 축소로 인해) VM이 영구적으로 삭제될 때 VM 인스턴스와 함께 삭제되도록 구성됩니다. 데이터 디스크는 자동 복구, 업데이트, VM 재생성 시 보존됩니다.

  3. 데이터 디스크가 스테이트풀(Stateful) 정책에서 구성되어 있는지 확인합니다.

    gcloud compute instance-groups managed describe example-database-group
    
    
    baseInstanceName: shard
    ...
    name: example-database-group
    ...
    statefulPolicy:
      preservedState:
        disks:
          data-disk:
            autoDelete: ON_PERMANENT_INSTANCE_DELETION
    ...
    

    스테이트풀(Stateful) 정책에서 기기 이름이 data-disk인 디스크를 스테이트풀(Stateful)로 선언하고 영구 VM 삭제 시 이러한 디스크를 삭제하는 규칙이 적용된 것을 볼 수 있습니다.

API

MIG 생성 시 인스턴스 템플릿에서 어느 디스크가 스테이트풀(Stateful)이어야 하는지 지정하려면 instanceGroupManagers.insert 메서드 요청 본문의 statefulPolicy 필드에 해당 디스크를 포함합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers

{
  "name": "NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

다음을 바꿉니다.

  • PROJECT: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: 만들려는 MIG의 이름입니다.
  • TEMPLATE: 인스턴스를 만들 때 사용할 인스턴스 템플릿의 이름입니다.
  • SIZE: 이 그룹에 필요한 초기 인스턴스 수입니다.
  • DEVICE_NAME: 인스턴스 템플릿에 지정된 디스크의 기기 이름입니다.
  • DELETE_RULE: VM 인스턴스가 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. VM이 삭제될 때 디스크를 분리합니다.
    • on_permanent_instance_deletion: VM이 인스턴스 그룹에서 영구적으로 삭제될 때(예: 관리형 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

예시

각각 운영체제 및 데이터베이스 바이너리가 포함된 스테이트리스(Stateless) 부팅 디스크와 스테이트풀(Stateful) 데이터 디스크가 있는 12개의 샤드를 포함한 데이터베이스를 배포하려고 합니다. 다음 단계를 따르세요.

  1. instanceTemplates.insert 메서드를 사용하여 OS와 데이터베이스가 미리 설치된 img-example-db-v01 이미지에 기반한 스테이트리스(Stateless) 부팅 디스크와 스테이트풀(Stateful) 데이터 디스크로 인스턴스 템플릿을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates
    
    {
      "name": "example-database-template-v01",
      "properties": {
        "machineType":"e2-standard-2",
        "disks": [
          {
            "boot": true,
            "deviceName": "boot-disk",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/mg-example-db-v01"
            }
          },
          {
            "deviceName": "data-disk",
            "mode": "READ_WRITE",
            "initializeParams": {
              "sourceImage": "projects/example-project/global/images/empty10GBext4"
            }
          }
        ],
        "networkInterfaces": [
          {
            "network": "global/networks/default"
          }
        ]
      }
    }
    

    인스턴스 템플릿의 데이터 디스크는 기기 이름이 data-disk이며, 미리 준비된 비어 있는 ext4 이미지에서 생성되고 읽기/쓰기 모드로 연결되도록 구성됩니다.

  2. instanceGroupManagers.insert 메서드를 사용하여 인스턴스 템플릿에서 MIG를 만들고 데이터 디스크를 스테이트풀(Stateful)로 정의합니다.

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      "versions": [
        {
          "instanceTemplate": "global/instanceTemplates/example-database-template-v01"
        }
      ],
      "targetSize": 12,
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
    }
    

    MIG는 각각 다음 속성을 가진 디스크가 있는 12개의 인스턴스를 만듭니다.

    • 인스턴스 템플릿에서 가져온 기기 이름 data-disk
    • (수동 인스턴스 삭제 또는 그룹 크기 수동 축소로 인해) VM이 삭제될 때 데이터 디스크를 삭제하는 삭제 규칙
    • 자동 복구, 업데이트, 인스턴스 재생성 시 데이터 디스크가 보존되도록 하는 각 관리형 인스턴스 정책(preservedStateFromPolicy)의 보존 상태 항목
  3. instanceGroupManagers.get 메서드를 사용하여 데이터 디스크가 새 instanceGroupManagers 리소스의 스테이트풀(Stateful) 정책에 구성되어 있는지 확인합니다.

    GET https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    
    {
      "name": "example-database-group",
      "baseInstanceName": "shard",
      ...
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
          }
        }
      }
      ...
    }
    

    스테이트풀(Stateful) 정책에서 기기 이름이 data-disk인 디스크를 스테이트풀(Stateful)로 선언하고 영구 인스턴스 삭제 시 이러한 디스크를 삭제하는 규칙이 적용된 것을 볼 수 있습니다.

기존 MIG에 있는 디스크의 스테이트풀(Stateful) 구성 설정 및 업데이트

스테이트리스(Stateless) MIG(스테이트풀(Stateful) 구성이 전혀 없는 MIG)에서 스테이트풀(Stateful) 애플리케이션을 실행하는 경우 이 MIG의 모든 인스턴스에서 인스턴스 템플릿에 정의된 기존 디스크를 스테이트풀(Stateful)로 구성할 수 있습니다. 이렇게 하면 인스턴스 재생성, 자동 복구, 업데이트를 비롯해 필요한 경우 삭제 작업 시 디스크를 보존할 수 있습니다.

다음 작업을 수행할 수 있습니다.

  • 인스턴스 템플릿에 정의된 디스크를 기존 MIG의 스테이트풀(Stateful) 정책에 추가하여 스테이트풀(Stateful)로 선언합니다. 이렇게 하면 MIG의 모든 기존 및 향후 인스턴스에서 지정된 기기 이름을 가진 디스크가 스테이트풀(Stateful)로 표시됩니다.
  • 스테이트풀(Stateful) 정책을 업데이트하여 디스크의 스테이트풀(Stateful) 구성을 변경합니다.

MIG는 스테이트풀(Stateful) 정책의 업데이트된 구성을 모든 인스턴스에 비동기식으로 자동 적용합니다. 스테이트풀(Stateful) 정책의 디스크 구성을 업데이트해도 실행 중인 VM은 중단되지 않습니다. 자세한 내용은 스테이트풀(Stateful) 정책 업데이트 적용을 참조하세요.

리전 MIG의 경우 스테이트풀(Stateful) 디스크를 구성하기 전에 사전 교차 영역 인스턴스 재배포를 사용 중지해야 합니다. 자세한 내용은 리전 그룹이 보존 상태를 처리하는 방법을 참조하세요.

gcloud

인스턴스 템플릿에서 스테이트풀(Stateful)이어야 하는 디스크를 지정하거나 기존 MIG의 스테이트풀(Stateful) 디스크 구성을 업데이트하려면 하나 이상의 --stateful-disk 플래그와 함께 gcloud compute instance-groups managed update 명령어를 사용합니다.

gcloud compute instance-groups managed update NAME \
  --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

다음을 바꿉니다.

  • NAME: 업데이트할 관리형 인스턴스 그룹의 이름입니다.
  • DEVICE_NAME: 인스턴스 템플릿에 지정된 디스크의 기기 이름입니다.
  • DELETE_RULE: VM 인스턴스가 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. VM이 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 관리형 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

지정된 기기 이름이 스테이트풀(Stateful) 정책에서 이미 구성된 경우 이 명령어는 구성을 업데이트합니다.

예시

example-database- group이라는 MIG에서 여러 샤드가 있는 데이터베이스를 실행합니다. MIG의 각 VM은 인스턴스 템플릿이 정의한 기기 이름이 data-disk인 추가 디스크에 샤드를 저장합니다. MIG에는 스테이트풀(Stateful) 구성이 없으며, 인스턴스 재생성, 자동 복구, 업데이트 시 데이터 디스크를 보존하려고 합니다. 또한 VM이 삭제될 때 데이터 디스크를 삭제에서 보호하려고 합니다.

  1. 다음 명령어로 MIG를 업데이트하여 데이터 디스크를 스테이트풀(Stateful)로 정의합니다.

    gcloud compute instance-groups managed update example-database-group \
      --stateful-disk device-name=data-disk,auto-delete=never
    

    그 결과 MIG는 스테이트풀(Stateful) 정책 구성 업데이트를 모든 인스턴스의 데이터 디스크에 비동기식으로 자동 적용합니다. 이제 데이터 디스크는 자동 복구, 업데이트, 인스턴스 재생성 시 보존되며, auto-delete 규칙이 never로 설정되어 있으므로 인스턴스 삭제 시 데이터 디스크가 분리됩니다.

  2. gcloud compute instance-groups managed describe example-database-group 명령어를 실행하여 스테이트풀(Stateful) 정책에 데이터 디스크가 구성되어 있는지 확인합니다.

API

인스턴스 템플릿에서 스테이트풀(Stateful)이어야 하는 디스크를 지정하거나 기존 MIG의 스테이트풀(Stateful) 디스크 구성을 업데이트하려면 instanceGroupManagers.patch 메서드를 사용하여 MIG의 스테이트풀(Stateful) 정책에서 디스크를 구성합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

다음을 바꿉니다.

  • PROJECT: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: 업데이트할 MIG의 이름입니다.
  • DEVICE_NAME: 인스턴스 템플릿에 지정되어 스테이트풀(Stateful) 구성을 업데이트하려는 디스크의 기기 이름입니다.
  • DELETE_RULE: VM 인스턴스가 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. VM이 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

지정된 기기 이름이 스테이트풀(Stateful) 정책에서 이미 구성된 경우 patch 메서드가 구성을 업데이트합니다.

예시

example-database- group이라는 MIG에서 여러 샤드가 있는 데이터베이스를 실행합니다. MIG의 각 VM은 인스턴스 템플릿이 정의한 기기 이름이 data-disk인 추가 디스크에 샤드를 저장합니다. MIG에는 스테이트풀(Stateful) 구성이 없으며, 인스턴스 재생성, 자동 복구, 업데이트 시 데이터 디스크를 보존하려고 합니다. 또한 VM이 삭제될 때 데이터 디스크를 삭제에서 보호하려고 합니다.

  1. MIG를 패치하여 데이터 디스크를 스테이트풀(Stateful)로 정의합니다.

    PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-group
    
    {
      "statefulPolicy": {
        "preservedState": {
          "disks": {
            "data-disk": {"autoDelete": "NEVER" }
          }
        }
      }
    }
    

    MIG는 이 스테이트풀(Stateful) 구성을 모든 인스턴스의 데이터 디스크에 비동기식으로 자동 적용합니다. 데이터 디스크는 자동 복구, 업데이트, 인스턴스 재생성 시 보존됩니다. autoDelete 규칙이 NEVER로 설정되어 있으므로 데이터 디스크는 인스턴스 삭제 시 분리됩니다.

  2. instanceGroupManagers.get 메서드가 반환하는 instanceGroupManagers 리소스를 보고 스테이트풀(Stateful) 정책에서 데이터 디스크가 구성되었는지 확인합니다.

이전 스테이트풀(Stateful) 영구 디스크를 스테이트리스(Stateless)로 선언

스테이트리스(Stateless) 디스크로 취급되도록 스테이트풀(Stateful) 디스크를 구성해야 하는 경우가 있습니다. 예를 들면 다음과 같습니다.

  • 디스크에서 상태를 이동하도록 앱을 다시 구성하는 경우
  • 디스크를 실수로 스테이트풀(Stateful)로 구성해서 되돌리려는 경우

특정 기기 이름이 있는 모든 디스크를 스테이트리스(Stateless)로 선언하려면 gcloud 도구 또는 Compute Engine API를 사용하여 스테이트풀(Stateful) 정책에서 디스크 구성을 삭제합니다.

MIG는 스테이트풀(Stateful) 정책 변경 사항을 모든 인스턴스에 비동기식으로 자동 적용합니다. 스테이트풀(Stateful) 정책의 디스크 구성을 업데이트해도 실행 중인 VM 인스턴스는 중단되지 않습니다.

자세한 내용은 스테이트풀(Stateful) 정책 업데이트 적용을 참조하세요.

gcloud

MIG의 스테이트풀(Stateful) 정책에서 스테이트리스(Stateless)로 만들 디스크를 지정하려면 gcloud compute instance-groups managed update 명령어--remove-stateful-disks 플래그를 사용합니다.

gcloud compute instance-groups managed update NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...]

다음을 바꿉니다.

  • NAME: 업데이트할 MIG의 이름입니다.
  • DEVICE_NAME: 스테이트풀(Stateful) 정책에서 삭제하고 스테이트리스(Stateless)로 취급할 디스크의 기기 이름입니다. 목록에 하나 이상의 기기 이름을 제공할 수 있습니다.

예시

example-legacy-group이라는 MIG에서 여러 노드가 있는 레거시 애플리케이션을 실행합니다. MIG의 각 VM은 MIG의 스테이트풀(Stateful) 정책에서 스테이트풀(Stateful)로 구성하고 기기 이름이 boot-disk인 부팅 디스크에 애플리케이션 데이터를 저장합니다. 애플리케이션 데이터를 추가 디스크로 이동했고 이제 새로운 이미지로 쉽게 업데이트할 수 있도록 부팅 디스크를 스테이트리스(Stateless)로 만들려고 합니다.

부팅 디스크의 스테이트풀(Stateful) 구성을 삭제하려면 관리형 인스턴스 그룹을 업데이트합니다.

gcloud compute instance-groups managed update example-legacy-group \
  --remove-stateful-disks boot-disk

MIG는 그룹에 있는 모든 인스턴스의 부팅 디스크에서 기기 이름 boot-disk의 스테이트풀(Stateful) 구성을 비동기식으로 자동 삭제합니다. 부팅 디스크는 인스턴스에 계속 연결되어 있지만 더 이상 스테이트풀(Stateful)이 아닙니다. 인스턴스를 다시 만들거나 업데이트하거나 인스턴스가 자동 복구되면 MIG는 인스턴스 템플릿에 지정된 이미지에서 부팅 디스크를 다시 만듭니다.

API

MIG의 스테이트풀(Stateful) 정책에서 스테이트리스(Stateless)로 만들 디스크를 지정하려면 instanceGroupManagers.patch 메서드를 사용하여 MIG의 스테이트풀(Stateful) 정책에서 각 디스크의 구성을 삭제합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/NAME

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": null,
        ...
      }
    }
  }
}

다음을 바꿉니다.

  • PROJECT: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: 업데이트할 MIG의 이름입니다.
  • DEVICE_NAME: 스테이트풀(Stateful) 정책에서 삭제할 디스크의 기기 이름입니다. null 값을 제공하면 해당 디스크의 스테이트풀(Stateful) 구성이 삭제됩니다. 삭제할 기기 이름을 하나 이상 제공할 수 있습니다.

예시

example-legacy-group이라는 MIG에서 여러 노드가 있는 레거시 애플리케이션을 실행합니다. MIG의 각 VM은 MIG의 스테이트풀(Stateful) 정책에서 스테이트풀(Stateful)로 구성하고 기기 이름이 boot-disk인 부팅 디스크에 애플리케이션 데이터를 저장합니다. 애플리케이션 데이터를 추가 디스크로 이동했고 이제 새로운 이미지로 쉽게 업데이트할 수 있도록 부팅 디스크를 스테이트리스(Stateless)로 만들려고 합니다.

부팅 디스크의 스테이트풀(Stateful) 구성을 삭제하려면 관리형 인스턴스 그룹을 패치합니다.

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group

{
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "boot-disk": null
      }
    }
  }
}

MIG는 그룹에 있는 모든 인스턴스의 부팅 디스크에서 기기 이름 boot-disk의 스테이트풀(Stateful) 구성을 비동기식으로 자동 삭제합니다. 부팅 디스크는 인스턴스에 계속 연결되어 있지만 더 이상 스테이트풀(Stateful)이 아닙니다. 인스턴스를 다시 만들거나 업데이트하거나 인스턴스가 자동 복구되면 MIG는 인스턴스 템플릿에 지정된 이미지에서 부팅 디스크를 다시 만듭니다.

MIG에서 스테이트풀(Stateful) 디스크 삭제

예를 들어 애플리케이션을 다시 설계하고 해당 디스크에서 상태를 이동한 경우 MIG의 인스턴스에서 스테이트풀(Stateful) 디스크를 완전히 삭제해야 할 수 있습니다.

MIG는 스테이트풀(Stateful) 디스크 삭제를 허용하지 않으므로 다음 단계를 수행해야 합니다.

  1. 스테이트풀(Stateful) 정책에서 디스크의 스테이트풀(Stateful) 구성을 삭제합니다. 이렇게 하면 지정된 기기 이름의 디스크가 스테이트리스(Stateless)가 됩니다.
  2. 디스크를 계속 유지하려면 VM에서 디스크를 분리합니다.
  3. 디스크를 더 이상 지정된 기기 이름으로 정의하지 않는 새 인스턴스 템플릿을 롤아웃합니다.

MIG의 VM에 개별적으로 스테이트풀(Stateful) 영구 디스크 구성

MIG에 있는 특정 VM의 인스턴스별 구성에 디스크의 기기 이름을 추가하여 해당 VM에 스테이트풀(Stateful) 영구 디스크를 구성합니다. 효과적으로 인스턴스별 구성을 적용하도록 VM을 업데이트합니다.

MIG의 특정 VM에 스테이트풀(Stateful) 영구 디스크를 개별적으로 구성하면 다음을 수행해야 하는 경우에 유용합니다.

  • 자동 복구 및 간편한 업데이트를 활용하기 위해 독립형 VM에서 스테이트풀(Stateful) MIG로 기존 워크로드를 마이그레이션(기존 디스크 가져오기)
  • VM에 개별적으로 구성된 디스크의 백업 복원
  • 데이터의 테스트, 디버깅 또는 복사를 위해 추가 스테이트풀(Stateful) 디스크를 특정 VM에 임시로 연결합니다.

MIG의 새 VM에 기존 스테이트풀(Stateful) 디스크 추가

MIG에서 수동으로 만든 새 인스턴스에 기존의 스테이트풀(Stateful) 디스크를 추가할 수 있습니다. 이렇게 하면 스테이트풀(Stateful) 애플리케이션을 기존 독립형 VM에서 스테이트풀(Stateful) MIG로 마이그레이션하는 작업 등에 유용합니다.

  1. 모든 VM 인스턴스에 공통 구성으로 인스턴스 템플릿을 만듭니다.
  2. 독립형 인스턴스에서 데이터 디스크를 분리하고 이러한 인스턴스를 삭제합니다. 보존해야 하는 상태가 포함된 부팅 디스크를 분리할 수도 있습니다.
  3. 앞에서 만든 인스턴스 템플릿을 사용하여 빈 MIG를 만듭니다.
  4. MIG에서 적절한 이름과 이전 단계의 연결된 디스크를 사용하여 인스턴스를 만듭니다. MIG는 다음 작업으로 요청에 응답합니다.

    1. 제공된 인스턴스 이름을 사용하여 인스턴스 템플릿에서 VM을 만듭니다.
      • 리전 MIG는 디스크가 있는 영역과 동일한 영역에 VM을 만듭니다. 디스크가 리전 디스크인 경우 리전 MIG는 디스크의 복제본 영역에 VM을 만듭니다.
    2. 디스크에 제공된 스테이트풀(Stateful) 구성을 사용하여 인스턴스별 구성을 만듭니다.
    3. 디스크를 새 인스턴스에 연결합니다.

gcloud 도구 또는 API를 사용하여 MIG에 특정 인스턴스를 수동으로 만들 때 기존 스테이트풀(Stateful) 디스크를 추가합니다. MIG는 VM 생성 즉시 구성을 적용합니다.

gcloud

커스텀 이름으로 VM을 만들고 해당 VM에 하나 이상의 기존 스테이트풀(Stateful) 디스크를 연결하려면 gcloud compute instance-groups managed create-instance 명령어를 하나 이상의 --stateful-disk 플래그와 함께 사용합니다.

gcloud compute instance-groups managed create-instance NAME \
  --instance VM_NAME \
  [--zone ZONE | --region REGION] \
  --stateful-disk device-name=DEVICE_NAME,source=DISK[,mode=MODE][,auto-delete=DELETE_RULE]

다음을 바꿉니다.

  • NAME: 인스턴스를 만들어야 하는 MIG의 이름입니다.
  • VM_NAME: 만들려는 새 인스턴스의 이름입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
  • REGION: MIG가 위치한 리전입니다(리전 MIG에 적용).
  • DEVICE_NAME: 디스크를 연결할 때 사용할 기기 이름입니다.
  • DISK: 지정된 DEVICE_NAME 아래에 영역 디스크는 projects/project-id/zones/zone/disks/disk-name 형식, 리전 디스크는 projects/project-id/regions/region/disks/disk-name 형식으로 연결할 기존 영구 디스크의 URI입니다.
  • MODE: 디스크의 모드를 지정합니다. 지원되는 옵션은 다음과 같습니다.
    • ro: 읽기 전용
    • rw: (기본값) 읽기/쓰기
  • DELETE_RULE: VM 인스턴스가 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. 대신 VM이 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

    삭제 규칙의 값에 관계없이 스테이트풀(Stateful) 디스크는 인스턴스 자동 복구, 업데이트, 재생성 작업 시 항상 보존됩니다.

예시

현재 db-instance라는 독립형 VM에서 실행 중이고 db-data-disk-1이라는 디스크에 데이터를 저장하는 데이터베이스 서버에 자동 복구를 사용하려고 합니다.

자동 복구를 사용하여 스테이트풀(Stateful) MIG를 만들고, MIG 내에 유사한 VM을 만들고, 기존 데이터 디스크 db-data-disk-1을 새 인스턴스에 스테이트풀(Stateful) 디스크로 연결합니다.

  1. 유지보수 기간 동안 VM db-instance를 중지합니다.
  2. db-instance 구성을 사용하여 db-template이라는 인스턴스 템플릿을 만듭니다.
  3. db-instance에서 db-data-disk-1을 분리하고 db-instance를 삭제합니다.
  4. db-template에서 빈 MIG example-database-mig를 만들고 자동 복구를 구성합니다.
  5. 원래의 db-instance 이름으로 관리형 인스턴스를 만들고 db-data-disk-1을 스테이트풀(Stateful) 디스크로 연결합니다.

    gcloud compute instance-groups managed create-instance example-database-mig \
      --instance db-instance \
      --zone us-east1-c \
      --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/db-data-disk-1,auto-delete=never
    

    이 명령어는 MIG에 인스턴스 db-instance를 만들고 db-data-disk-1 스테이트풀(Stateful) 디스크로 해당 인스턴스별 구성을 만들며 data-disk를 기기 이름으로 사용하여 디스크를 새 VM에 연결합니다.

API

MIG에 하나 이상의 인스턴스를 만들고, 커스텀 VM 이름을 설정하고, 이러한 인스턴스에 하나 이상의 기존 스테이트풀(Stateful) 디스크를 연결하려면 instanceGroupManagers.createInstances 메서드를 사용합니다.

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

{
  "instances": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      }
    },
    ...
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: 인스턴스를 만들려는 MIG의 이름입니다.
  • VM_NAME: 만들려는 인스턴스의 이름입니다.
  • DEVICE_NAME: 디스크를 연결할 때 사용할 기기 이름입니다.
  • DISK: 지정된 DEVICE_NAME 아래에 영역 디스크는 projects/project-id/zones/zone/disks/disk-name 형식, 리전 디스크는 projects/project-id/regions/region/disks/disk-name 형식으로 연결할 기존 영구 디스크의 URI입니다.
  • MODE: 디스크의 모드를 지정합니다. 지원되는 옵션은 다음과 같습니다.
    • READ_ONLY: 읽기 전용
    • READ_WRITE: (기본값) 읽기/쓰기
  • DELETE_RULE: VM이 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. 대신 VM이 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

    삭제 규칙의 값에 관계없이 스테이트풀(Stateful) 디스크는 인스턴스 자동 복구, 업데이트, 재생성 작업 시 항상 보존됩니다.

예시

현재 db-instance라는 독립형 VM에서 실행 중이고 db-data-disk-1이라는 디스크에 데이터를 저장하는 데이터베이스 서버에 자동 복구를 사용하려고 합니다.

자동 복구를 사용하여 스테이트풀(Stateful) MIG를 만들고 MIG 내에 유사한 인스턴스를 만들며 기존 데이터 디스크 db-data-disk-1을 새 VM에 스테이트풀(Stateful) 디스크로 연결합니다.

  1. 유지보수 기간 동안 VM db-instance를 중지합니다.
  2. db-instance 구성을 사용하여 db-template이라는 인스턴스 템플릿을 만듭니다.
  3. db-instance에서 db-data-disk-1을 분리하고 db-instance를 삭제합니다.
  4. db-template에서 빈 MIG example-database-mig를 만들고 자동 복구를 구성합니다.
  5. 원래의 db-instance 이름으로 인스턴스를 만들고 db-data-disk-1을 스테이트풀(Stateful) 디스크로 연결합니다.

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/createInstances
    
    {
      "instances": [
        {
          "name": "db-instance",
          "preservedState" : {
            "disks": {
              "data-disk" : {
                "source": "projects/example-project/zones/us-east1-c/disks/db-data-disk-1",
                "mode": "READ_WRITE",
                "autoDelete": "never"
              }
            }
          }
        }
      ]
    }
    

    이 메서드는 MIG에 인스턴스 db-instance를 만들고 db-data-disk-1 스테이트풀(Stateful) 디스크로 해당 인스턴스별 구성을 만들며 data-disk를 기기 이름으로 사용하여 디스크를 새 인스턴스에 연결합니다.

MIG의 VM에 개별적으로 스테이트풀(Stateful) 디스크 추가, 선언, 교체

연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 추가하거나 업데이트하여 관리형 인스턴스의 스테이트풀(Stateful) 디스크를 개별적으로 구성합니다. 그런 다음 인스턴스를 업데이트하여 VM에 인스턴스별 구성을 적용합니다.

스테이트풀(Stateful) 디스크를 개별적으로 구성하는 것은 다음 작업에 유용합니다.

  • MIG 외부의 스테이트풀(Stateful) 디스크를 해당 MIG의 VM에 추가
  • MIG의 VM에서 이전의 스테이트리스(Stateless) 디스크를 스테이트풀(Stateful)로 선언
  • 스테이트풀(Stateful) 디스크를 MIG의 VM에 대한 다른 디스크로 교체

MIG 외부의 스테이트풀(Stateful) 디스크를 해당 MIG의 VM에 추가. 연결된 인스턴스별 구성에 디스크의 스테이트풀(Stateful) 구성을 추가하여 MIG 외부의 디스크를 관리형 인스턴스에 연결할 수 있습니다. 구성을 적용하면 MIG가 자동으로 디스크를 인스턴스에 연결하고 스테이트풀(Stateful)로 취급합니다.

이전의 스테이트리스(Stateless) 영구 디스크를 스테이트풀(Stateful)로 선언. 현재 VM에 연결된 이전의 스테이트리스(Stateless) 디스크의 스테이트풀(Stateful) 구성(기기 이름 및 URI 포함)을 연결된 인스턴스별 구성에 추가하여 이 디스크를 스테이트풀(Stateful)로 선언할 수 있습니다. 구성을 적용하면 MIG가 디스크를 스테이트풀(Stateful)로 보존하기 시작합니다.

스테이트풀(Stateful) 디스크를 다른 디스크로 교체. 예를 들어 복구된 백업에 액세스해야 하는 경우 스테이트풀(Stateful) 디스크를 다른 스테이트풀(Stateful) 디스크로 교체하면 유용할 수 있습니다. 인스턴스별 구성에서 동일한 기기 이름을 유지하면서 디스크의 URI를 업데이트하면 스테이트풀(Stateful) 디스크를 다른 스테이트풀(Stateful) 디스크로 교체할 수 있습니다. 업데이트된 인스턴스별 구성을 적용하면 MIG는 이전 디스크를 분리하고 동일한 기기 이름을 사용하여 새 디스크를 연결합니다. 업데이트를 적용할 때 인스턴스를 계속 실행할지, 다시 시작할지, 다시 만들지 선택합니다. 부팅 디스크를 바꾸려면 최소한 VM을 다시 시작해야 합니다.

gcloud

MIG의 VM에 스테이트풀(Stateful) 디스크를 개별적으로 구성하려면 연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 추가하거나 업데이트하고, 인스턴스를 업데이트하여 새 구성을 적용합니다.

인스턴스에 대한 인스턴스별 구성이 아직 없다면 하나 이상의 --stateful-disk 플래그와 함께 gcloud compute instance-groups managed instance-configs create 명령어를 사용합니다.

gcloud compute instance-groups managed instance-configs create NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

인스턴스에 대한 인스턴스별 구성이 이미 있다면 하나 이상의 --stateful-disk 플래그와 함께 gcloud compute instance-groups managed instance-configs update 명령어를 사용합니다.

--update-instance 플래그(기본값)는 변경 사항을 즉시 인스턴스에 적용합니다. --no-update-instance를 사용하는 경우 변경 사항이 적용되지 않고 다음에 인스턴스를 다시 만들거나 업데이트할 때 적용됩니다.

gcloud compute instance-groups managed instance-configs update NAME \
--instance VM_NAME \
--stateful-disk device-name=DEVICE_NAME[,source=DISK][,mode=MODE][,auto-delete=DELETE_RULE] \
[--no-update-instance | --update-instance] \
[--instance-update-minimal-action MINIMAL_ACTION]

다음을 바꿉니다.

  • NAME: 관리형 인스턴스 그룹의 이름입니다.
  • VM_NAME: 스테이트풀(Stateful) 디스크를 구성할 VM 인스턴스의 이름입니다.
  • DEVICE_NAME: 디스크를 연결하는 데 사용되는 기기 이름입니다.
  • DISK: 지정된 DEVICE_NAME 아래에 영역 디스크는 projects/project-id/zones/zone/disks/disk-name 형식, 리전 디스크는 projects/project-id/regions/region/disks/disk-name 형식으로 연결할 기존 영구 디스크의 URI입니다.

    기기가 인스턴스의 인스턴스별 구성에서 이미 정의된 경우 source=DISK 하위 플래그는 선택사항입니다. 그렇지 않으면 필수사항입니다.

    생략해도 현재 구성된 디스크 URI는 변경되지 않습니다.

  • MODE: 디스크의 모드를 지정합니다. source도 지정해야 mode를 지정할 수 있습니다. 지원되는 옵션은 다음과 같습니다.

    • ro: 읽기 전용
    • rw: (기본값) 읽기/쓰기.

    생략하면 새 스테이트풀(Stateful) 디스크 구성에 기본값이 설정됩니다. 값은 기존 구성에서 변경되지 않습니다.

  • DELETE_RULE: VM이 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. 대신 인스턴스가 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

    생략하면 새 스테이트풀(Stateful) 디스크 구성에 기본값이 설정됩니다. 값은 기존 구성에서 변경되지 않습니다.

    삭제 규칙의 값에 관계없이 스테이트풀(Stateful) 디스크는 인스턴스 자동 복구, 업데이트, 재생성 작업 시 항상 보존됩니다.

  • MINIMAL_ACTION: 인스턴스에 인스턴스별 구성 업데이트를 적용할 때 최소한 지정된 작업은 수행합니다. --update-instance 플래그와 함께 사용해야 합니다. 값은 다음 중 하나여야 합니다.

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

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

예시

현재 연결된 스테이트풀(Stateful) 디스크 data-disk-1의 데이터가 손상되어 최신 백업에서 복원하려고 합니다. 스테이트풀(Stateful) MIG example-database-mig가 관리하는 db-instance-1 인스턴스의 손상된 디스크를 교체하기 위해 스냅샷에서 data-disk-2 디스크를 만들었습니다. 원본 디스크 data-disk-1은 디스크를 삭제하지 않는 자동 삭제 규칙과 함께 data-disk 기기 이름으로 연결되어 있습니다.

data-disk-1data-disk-2로 바꾸려면 다음 명령어를 실행합니다.

gcloud compute instance-groups managed instance-configs update example-database-mig \
  --instance db-instance-1 \
  --stateful-disk device-name=data-disk,source=projects/example-project/zones/us-east1-c/disks/data-disk-2 \
  --update-instance \
  --instance-update-minimal-action restart

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

  1. db-instance-1의 인스턴스별 구성을 업데이트합니다.
    1. 기기 이름이 data-disk인 디스크의 소스를 data-disk-1(이전 구성)에서 data-disk-2(새 구성)로 업데이트합니다.
    2. --stateful-disk 플래그에 auto-delete 매개변수가 생략되었고 기본적으로 삭제 규칙이 never이므로 디스크를 삭제하지 않는 자동 삭제 규칙을 유지합니다.
  2. --update-instance 플래그가 포함되어 있으므로 인스턴스별 구성 업데이트를 db-instance-1 VM에 즉시 적용합니다. MIG는 data-disk-1을 분리하고 동일한 기기 이름 data-diskdata-disk-2를 연결합니다.
  3. 최소 작업이 restart로 설정되어 있으므로 MIG는 데이터베이스 애플리케이션이 새 디스크를 사용하는 데 도움이 되도록 db-instance-1 인스턴스를 다시 시작하여 VM을 업데이트합니다.

API

MIG의 VM에 스테이트풀(Stateful) 디스크를 개별적으로 구성하려면 연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 추가하거나 업데이트합니다. 그런 다음 인스턴스를 업데이트하여 구성을 적용합니다.

지정된 VM에 인스턴스별 구성이 아직 없다면 하나 이상의 디스크에 스테이트풀(Stateful) 구성으로 instanceGroupManagers.updatePerInstanceConfigs 메서드를 사용합니다.

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

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

지정된 VM에 인스턴스별 구성이 이미 있다면 하나 이상의 디스크에 스테이트풀(Stateful) 구성으로 instanceGroupManagers.patchPerInstanceConfigs 메서드를 사용합니다.

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

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : {
            "source": "DISK",
            "mode": "MODE",
            "autoDelete": "DELETE_RULE"
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: MIG 이름입니다.
  • VM_NAME: 스테이트풀(Stateful) 디스크를 구성할 VM의 이름입니다.
  • DEVICE_NAME: 디스크를 연결하는 데 사용되는 기기 이름입니다.
  • DISK: 지정된 DEVICE_NAME 아래에 영역 디스크는 projects/project-id/zones/zone/disks/disk-name 형식, 리전 디스크는 projects/project-id/regions/region/disks/disk-name 형식으로 연결할 기존 영구 디스크의 URI입니다.

    기기가 인스턴스의 인스턴스별 구성에서 이미 정의된 경우 "source": "DISK" 필드는 선택사항입니다. 그렇지 않으면 필수사항입니다.

    source 필드가 생략되면 현재 구성된 디스크 URI는 변경되지 않습니다.

  • MODE: (선택사항) 디스크의 모드를 지정합니다. modesource가 제공된 경우에만 지정할 수 있습니다. 지원되는 옵션은 다음과 같습니다.

    • READ_ONLY: 읽기 전용
    • READ_WRITE: (기본값) 읽기/쓰기.

    생략하면 새 스테이트풀(Stateful) 디스크 구성에 기본값이 설정됩니다. 값은 기존 구성에서 변경되지 않습니다.

  • DELETE_RULE: (선택사항) VM이 삭제될 때 스테이트풀(Stateful) 디스크에 수행해야 하는 작업을 규정하는 값입니다. 사용 가능한 옵션은 다음과 같습니다.

    • never: (기본값) 절대 디스크를 삭제하지 않습니다. 대신 인스턴스가 삭제될 때 디스크를 분리합니다.
    • on-permanent-instance-deletion: 인스턴스가 인스턴스 그룹에서 영구적으로 삭제될 때(예: 인스턴스가 수동으로 삭제될 때 또는 그룹 크기를 줄일 때) 스테이트풀(Stateful) 디스크를 삭제합니다.

    autoDelete 필드를 생략하면 새 스테이트풀(Stateful) 디스크 구성에 기본값이 설정됩니다. 값은 기존 구성에서 변경되지 않습니다.

    삭제 규칙의 값에 관계없이 스테이트풀(Stateful) 디스크는 인스턴스 자동 복구, 업데이트, 재생성 작업 시 항상 보존됩니다.

  • FINGERPRINT: (선택사항) 지정된 구성의 지문입니다(이미 있는 경우). 낙관적 잠금에 사용됩니다. 최신 지문을 보려면 get() 요청을 수행하여 리소스를 검색합니다.

updatePerInstanceConfigspatchPerInstanceConfigs 메서드는 지정된 인스턴스별 구성을 업데이트하지만 연결된 관리형 VM에 구성 업데이트를 적용하지 않습니다. 변경 사항은 MIG에게 인스턴스를 다시 만들거나 업데이트하도록 지시할 때 인스턴스에 적용됩니다. 업데이트를 수동으로 적용하여 변경 사항을 인스턴스에 적용합니다.

예시

현재 연결된 스테이트풀(Stateful) 디스크 data-disk-1의 데이터가 손상되어 최신 백업에서 복원하려고 합니다. 스테이트풀(Stateful) MIG example-database-mig가 관리하는 db-instance-1 인스턴스의 손상된 디스크를 교체하기 위해 스냅샷에서 data-disk-2 디스크를 만들었습니다. 원본 디스크 data-disk-1은 디스크를 삭제하지 않는 자동 삭제 규칙과 함께 data-disk 기기 이름으로 연결되어 있습니다.

db-instance-1의 인스턴스별 구성을 새 디스크로 업데이트하려면 patchPerInstanceConfigs 메서드를 호출합니다.

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

{
  "perInstanceConfigs": [
    {
      "name": "db-instance-1",
      "preservedState" : {
        "disks": {
          "data-disk" : {
            "source": "projects/example-project/zones/us-east1-c/disks/data-disk-2"
          }
        }
      }
    }
  ]
}

이 메서드는 db-instance-1의 인스턴스별 구성을 패치합니다.

  1. 기기 이름이 data-disk인 디스크의 sourcedata-disk-1(이전 구성)에서 data-disk-2(새 구성)로 업데이트합니다.
  2. 요청에서 매개변수가 생략되므로 modeautoDelete 매개변수는 변경되지 않습니다.

구성 업데이트는 아직 db-instance-1 VM에 적용되지 않습니다. MIG는 인스턴스를 다시 만들거나 업데이트할 때 구성 업데이트를 적용합니다.

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

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-database-mig/applyUpdatesToInstances
{
  "instances": ["/zones/us-east1-c/instances/db-instance-1"],
  "minimalAction": "RESTART"
}

이 메서드는 관리형 인스턴스의 보존 상태를 업데이트하여 data-disk-1을 분리하고 동일한 기기 이름 data-disk 으로 data-disk-2를 연결합니다. minimalActionRESTART로 설정되어 있으므로 이 메서드는 db-instance-1 VM을 다시 시작합니다. 그러면 데이터베이스 애플리케이션이 새 디스크 사용을 시작할 수 있습니다.

개별 VM에서 스테이트풀(Stateful) 디스크를 분리하거나 스테이트리스(Stateless)로 선언

개별 VM에서 스테이트풀(Stateful) 디스크를 분리하거나 스테이트리스(Stateless) 디스크로 취급되도록 구성해야 하는 경우가 있습니다. 예를 들면 다음과 같습니다.

  • 디스크에서 상태를 이동하도록 앱을 다시 구성하는 경우
  • 디스크를 실수로 스테이트풀(Stateful)로 구성해서 되돌리려는 경우.

연결된 인스턴스별 구성에서 디스크의 스테이트풀(Stateful) 구성을 삭제하거나 전체 인스턴스별 구성을 삭제하여 개별 VM에서 스테이트풀(Stateful) 디스크를 분리하거나 스테이트리스(Stateless)로 만듭니다. 변경 사항을 적용하면 다음 작업이 수행됩니다.

  • 디스크가 인스턴스 템플릿에 정의되어 있지 않으면 MIG가 디스크를 분리합니다.
    • 인스턴스별 구성에서 디스크 구성을 삭제해도 MIG는 디스크 구성의 자동 삭제 규칙에 관계없이 해당 디스크를 삭제하지 않습니다.
  • 인스턴스 템플릿에 의해 디스크가 정의되면 MIG는 디스크를 스테이트리스(Stateless)로 취급합니다. 즉, MIG는 이후 인스턴스 재생성, 업데이트 또는 자동 복구 이벤트 시 인스턴스 템플릿의 소스에서 디스크를 다시 만듭니다.

인스턴스별 구성에서 디스크 구성을 삭제하면 명시적으로 선택하지 않는 한 실행 중인 VM 인스턴스가 다시 시작되지 않습니다.

자세한 내용은 인스턴스별 구성 업데이트 적용을 참조하세요.

gcloud

MIG의 VM에서 스테이트풀(Stateful) 디스크를 분리하거나 개별적으로 스테이트리스(Stateless)로 선언하려면 연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 삭제하거나 다른 상태를 포함하지 않은 경우 전체 인스턴스별 구성을 삭제합니다. 인스턴스를 업데이트하여 구성을 적용합니다.

연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 삭제하려면 --remove-stateful-disks 플래그와 함께 gcloud compute instance-groups managed instance-configs update 명령어를 사용합니다. --update-instance 플래그(기본값)는 변경 사항을 즉시 인스턴스에 적용합니다. --no-update-instance를 사용하는 경우 변경 사항이 적용되지 않고 다음에 인스턴스를 다시 만들거나 업데이트할 때 적용됩니다.

gcloud compute instance-groups managed instance-configs update NAME \
  --instance VM_NAME \
  --remove-stateful-disks DEVICE_NAME[,DEVICE_NAME,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

다음을 바꿉니다.

  • NAME: MIG 이름입니다.
  • VM_NAME: 스테이트풀(Stateful) 구성을 삭제할 VM의 이름입니다.
  • DEVICE_NAME: 디스크를 연결하는 데 사용되는 기기 이름입니다.
  • MINIMAL_ACTION: 인스턴스별 구성으로 VM을 업데이트할 때 최소한 지정된 작업을 수행합니다. --update-instance와 함께 사용해야 합니다. 값은 다음 중 하나여야 합니다.

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

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

예시

example-legacy-group이라는 MIG에서 기존 애플리케이션을 실행합니다. MIG의 각 VM은 기기 이름이 boot-disk인 부팅 디스크에 애플리케이션 데이터를 저장합니다. 인스턴스별 구성을 사용하여 각 부팅 디스크를 스테이트풀(Stateful)로 구성했습니다. 이제 애플리케이션 데이터를 추가 디스크로 이동했고, 새 이미지로 쉽게 업데이트할 수 있도록 각 VM의 부팅 디스크를 스테이트리스(Stateless)로 만들려고 합니다.

각 인스턴스(예: node-1)마다 다음 명령어를 실행합니다.

gcloud compute instance-groups managed instance-configs update example-legacy-group \
  --instance node-1 \
  --remove-stateful-disks boot-disk \
  --update-instance

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

  1. 기기 이름이 boot-disk인 디스크의 구성을 node-1의 인스턴스별 구성에서 삭제합니다.
  2. --update-instance 플래그가 포함되어 있으므로 인스턴스별 구성 업데이트를 node-1 VM에 즉시 적용합니다. MIG는 관리형 인스턴스의 preservedStateFromConfig에서 부팅 디스크를 삭제하고 이 부팅 디스크를 스테이트리스(Stateless)로 취급합니다. 즉, MIG는 이후 인스턴스 재생성, 업데이트 또는 자동 복구 이벤트 시 인스턴스 템플릿의 부팅 이미지에서 디스크를 다시 만듭니다.

API

MIG의 VM에서 스테이트풀(Stateful) 디스크를 분리하거나 개별적으로 스테이트리스(Stateless)로 선언하려면 연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 삭제하거나 다른 상태를 포함하지 않은 경우 전체 인스턴스별 구성을 삭제합니다. 그런 다음 인스턴스를 업데이트하여 구성을 적용합니다.

연결된 인스턴스별 구성에서 스테이트풀(Stateful) 디스크 구성을 삭제하려면 instanceGroupManagers.patchPerInstanceConfigs 메서드를 사용합니다.

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

{
  "perInstanceConfigs": [
    {
      "name": "VM_NAME",
      "preservedState" : {
        "disks": {
          "DEVICE_NAME" : null
          },
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID입니다.
  • ZONE: MIG가 위치한 영역입니다(영역 MIG에 적용).
    • 리전 MIG의 경우 zones/ZONEregions/REGION으로 바꾸고 MIG의 리전을 지정합니다.
  • NAME: MIG 이름입니다.
  • VM_NAME: 스테이트풀(Stateful) 구성을 삭제할 VM의 이름입니다.
  • DEVICE_NAME: 디스크를 연결하는 데 사용되는 기기 이름입니다.
  • FINGERPRINT: 지정된 구성의 지문입니다(이미 있는 경우). 낙관적 잠금에 사용됩니다. 최신 지문을 보려면 get() 요청을 수행하여 리소스를 검색합니다.

patchPerInstanceConfigs 메서드는 지정된 인스턴스별 구성을 패치하지만 연결된 VM에 변경사항을 적용하지 않습니다. 변경사항은 인스턴스를 다시 만들거나 업데이트할 때 VM에 적용됩니다. VM에 수동으로 변경 사항을 적용합니다.

예시

example-legacy-group이라는 MIG에서 기존 애플리케이션을 실행합니다. MIG의 각 VM은 기기 이름이 boot-disk인 부팅 디스크에 애플리케이션 데이터를 저장합니다. 독립형 VM을 MIG로 마이그레이션할 때 MIG의 인스턴스별 구성에서 부팅 디스크를 스테이트풀(Stateful)로 구성했습니다. 애플리케이션 데이터를 추가 디스크로 이동했고 이제 새로운 이미지로 쉽게 업데이트할 수 있도록 각 VM의 부팅 디스크를 스테이트리스(Stateless)로 만들려고 합니다.

  1. 인스턴스(예: 부팅 디스크의 값이 nullnode-1 인스턴스)에 대해 patchPerInstanceConfigs 메서드를 호출합니다.

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/patchPerInstanceConfigs
    
    {
      "perInstanceConfigs": [
        {
          "name": "node-1",
          "preservedState" : {
            "disks": {
              "boot-disk" : null
            }
          }
        }
      ]
    }
    

    이 메서드는 기기 이름이 boot- disk인 디스크의 구성을 node-1의 인스턴스별 구성에서 삭제합니다. 구성 업데이트는 아직 node-1 VM 인스턴스에 적용되지 않습니다. 구성 업데이트는 다음 인스턴스 재생성 또는 업데이트 시 적용됩니다.

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

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-legacy-group/applyUpdatesToInstances
    {
      "instances": ["/zones/us-east1-c/instances/node-1"]
    }
    

    MIG는 node-1 인스턴스의 preservedStateFromConfig에서 부팅 디스크를 삭제하고 디스크를 스테이트리스(Stateless)로 취급합니다. 즉, MIG는 이후 인스턴스 재생성, 업데이트 또는 자동 복구 이벤트 시 인스턴스 템플릿의 부팅 이미지에서 디스크를 다시 만듭니다.

의견

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

다음 단계