비관리형 VM 그룹화


비관리형 인스턴스 그룹은 단일 프로젝트, 영역, VPC 네트워크, 서브넷에 상주하는 가상 머신(VM) 인스턴스의 모음입니다. 비관리형 인스턴스 그룹은 개별 구성 설정 또는 조정이 필요한 VM을 그룹화하는 데 유용합니다. 부하 분산기의 백엔드 서비스에서 비관리형 인스턴스 그룹을 사용할 수 있습니다.

일관된 구성 설정이 필요한 VM의 경우 인스턴스 템플릿을 기반으로 하는 관리형 인스턴스 그룹 (MIG)을 사용할 수 있습니다. 가능하면 비관리형 인스턴스 그룹 대신 관리형 인스턴스 그룹을 사용하는 것이 좋습니다. 관리형 인스턴스 그룹을 만들려면 MIG 만들기를 참조하세요.

두 인스턴스 그룹 유형 중 하나를 Google Cloud 부하 분산기에 백엔드로 추가할 수 있습니다. 자세한 내용은 Cloud Load Balancing 개요를 참조하세요. Cloud Load Balancing에서 지원하는 인스턴스 그룹당 VM 수는 인스턴스 그룹당 VM 수를 참조하세요.

인스턴스 그룹에 대한 자세한 내용은 인스턴스 그룹 개요를 참조하세요.

시작하기 전에

  • 관리형 인스턴스 그룹과 비관리형 인스턴스 그룹의 차이점에 대해 읽어 보세요.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    REST

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

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

비관리형 인스턴스 그룹 작업

그룹 만들기

비관리형 인스턴스 그룹은 관리형 인스턴스 그룹과 달리 공통의 인스턴스 템플릿을 공유하지 않는 개별 VM을 모아둔 것에 불과합니다. 그룹을 만들고 개별 VM을 그룹에 추가하면 됩니다.

콘솔

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

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

  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 새 비관리형 인스턴스 그룹을 클릭합니다.
  4. 비관리형 인스턴스 그룹 이름을 입력합니다.
  5. 위치에서 리전과 영역을 선택합니다.
  6. 네트워크서브네트워크를 선택합니다.
  7. VM 인스턴스에서 이 그룹에 추가할 VM을 선택합니다.
  8. 만들기를 클릭합니다.

gcloud

새로운 비관리형 인스턴스 그룹을 만들려면 instance-group unmanaged create 명령어를 사용합니다.

gcloud compute instance-groups unmanaged create instance-group-name \
    --zone=zone

다음을 바꿉니다.

  • instance-group-name: 만들려는 그룹의 이름입니다.
  • zone: 그룹을 만들려는 영역입니다.

REST

REST로 비관리형 인스턴스 그룹을 만들려면 instanceGroups.insert 메서드를 사용하여 POST 요청을 보냅니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

{
   "name": "instance-group-name"
}

다음을 바꿉니다.

  • instance-group-name: 만들려는 그룹의 이름입니다.
  • zone: 그룹을 만들려는 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.

Google Cloud CLI 또는 REST를 사용하여 새로운 비관리형 인스턴스 그룹을 만들 때 VM은 그룹에 자동으로 추가되지 않습니다. 수동으로 VM을 비관리형 인스턴스 그룹에 추가하는 것은 가능합니다.

그룹 나열 및 설명

기존 비관리형 인스턴스 그룹의 목록을 가져옵니다.

콘솔

Google Cloud 콘솔의 인스턴스 그룹 페이지에는 기존의 비관리형 인스턴스 그룹과 관리형 인스턴스 그룹이 나열됩니다.

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

gcloud

Google Cloud CLI를 사용하여 프로젝트의 모든 비관리형 인스턴스 그룹을 나열하려면 instance-group unmanaged list를 사용하세요.

gcloud compute instance-groups unmanaged list

특정 비관리형 인스턴스 그룹에 대한 정보를 확인하려면 instance-group unmanaged describe 명령어를 사용합니다.

gcloud compute instance-groups unmanaged describe instance-group-name \
   --zone=zone

다음을 바꿉니다.

  • instance-group-name: 정보를 확인할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.

REST

REST를 사용하여 인스턴스 그룹을 나열하려면 instanceGroups.list 메서드를 사용하여 GET 요청을 보냅니다.

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

API를 사용하여 특정 비관리형 인스턴스 그룹에 대한 정보를 가져오려면 instanceGroups.get 메서드를 사용하여 GET 요청을 보냅니다.

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

다음을 바꿉니다.

  • instance-group-name: 정보를 확인할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.

그룹 삭제

관리형 인스턴스 그룹과 달리 비관리형 인스턴스 그룹은 삭제해도 그룹 내 VM은 삭제되지 않습니다. 비관리형 인스턴스 그룹을 삭제하면 VM의 논리적 그룹 분류만 삭제됩니다.

Google Cloud 부하 분산기의 백엔드인 인스턴스 그룹을 삭제할 수 없습니다. 먼저 백엔드 서비스에서 백엔드를 삭제해야 합니다.

콘솔

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

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

  2. 목록에서 비관리형 인스턴스 그룹을 1개 이상 선택합니다.
  3. 삭제를 클릭하여 그룹을 삭제합니다. 그룹은 삭제되지만 그룹 내 VM은 삭제되지 않습니다.

gcloud

비관리형 인스턴스 그룹을 삭제하려면 instance-groups unmanaged delete 명령어를 사용합니다.

gcloud compute instance-groups unmanaged delete instance-group-name \
    --zone=zone

다음을 바꿉니다.

  • instance-group-name: 삭제할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.

REST

REST를 사용하여 비관리형 인스턴스 그룹을 삭제하려면 instanceGroups.delete 메서드를 사용하여 DELETE 요청을 보냅니다.

DELETE https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

다음을 바꿉니다.

  • instance-group-name: 삭제할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.

그룹 구성원

VM 추가

비관리형 인스턴스 그룹을 만든 후에는 VM을 그룹에 추가할 수 있습니다. 그러나 각 VM의 첫 번째 또는 유일한 네트워크 인터페이스(nic0)가 동일한 VPC 네트워크에 연결된 경우에만 VM을 그룹화할 수 있습니다. 비관리형 인스턴스 그룹에 추가할 수 있는 최대 VM 수는 2,000개입니다. 그룹에 VM을 2,000개 넘게 추가하려면 지원팀에 문의하세요.

콘솔

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

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

  2. 목록의 이름 열에서 VM을 추가할 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성과 이미 그룹에 속해 있는 VM의 목록이 나와 있는 페이지가 열립니다.
  3. 수정을 클릭하여 이 비관리형 인스턴스 그룹을 수정합니다.
  4. VM 인스턴스에서 그룹에 추가할 기존 VM을 1개 이상 선택합니다. 기존 VM과 동일한 영역, VPC 네트워크, 서브넷에 있는 VM만 선택할 수 있습니다.
  5. 저장을 클릭하여 새 VM을 그룹에 추가합니다.

gcloud

인스턴스를 비관리형 인스턴스 그룹에 추가하려면 instance-groups unmanaged add-instances 명령어를 사용합니다.

gcloud compute instance-groups unmanaged add-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

다음을 바꿉니다.

  • instance-group-name: VM을 추가할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • list-of-VM-names: 동일한 영역, VPC 네트워크, 서브넷에 있는 VM의 쉼표로 구분된 목록입니다.

REST

VM을 비관리형 인스턴스 그룹에 추가하려면 instanceGroups.addInstances 메서드를 사용하여 POST 요청을 보냅니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/addInstances

   {
      "instances": [
         {
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
         ....
         }
      ]
   }

다음을 바꿉니다.

  • instance-group-name: VM을 추가할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.
  • instance-1-nameinstance-2-name: 그룹에 추가하려는 동일한 영역, VPC 네트워크, 서브넷에 있는 VM의 이름입니다.

VM 나열

비관리형 인스턴스 그룹에서 구성원 VM 목록을 검색할 수 있습니다.

콘솔

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

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

  2. 목록의 이름 열에서 보려는 비관리형 인스턴스 그룹의 이름을 클릭합니다. 그룹에 포함된 인스턴스의 목록이 있는 페이지가 나타납니다.

gcloud

비관리형 인스턴스 그룹의 VM을 나열하려면 instance-group unmanaged list-instances 명령어를 사용합니다.

gcloud compute instance-groups unmanaged list-instances instance-group-name \
   --zone=zone

다음을 바꿉니다.

  • instance-group-name: 구성원을 나열할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.

REST

비관리형 인스턴스 그룹의 VM을 나열하려면 instanceGroups.listInstances 메서드를 사용하여 POST 요청을 보냅니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/listInstances

다음을 바꿉니다.

  • instance-group-name: 구성원을 나열할 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.

VM 삭제

비관리형 인스턴스 그룹에서 VM을 삭제할 수 있습니다. 인스턴스 그룹에서 VM을 삭제해도 VM 자체는 삭제되지 않습니다.

콘솔

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

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

  2. 목록의 이름 열에서 VM을 삭제할 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성과 그룹에 포함된 VM의 목록이 나와 있는 페이지가 열립니다.
  3. 그룹에서 삭제할 VM을 목록에서 1개 이상 선택합니다.
  4. 그룹에서 삭제를 클릭합니다. 비관리형 인스턴스 그룹에서 삭제한 VM은 중지 또는 삭제되지 않는 한 계속 존재하며 실행됩니다.

gcloud

비관리형 인스턴스 그룹에서 VM을 삭제하려면 instance-groups unmanaged remove-instances 명령어를 사용합니다.

gcloud compute instance-groups unmanaged remove-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

다음을 바꿉니다.

  • instance-group-name: 제거할 인스턴스가 포함된 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • list-of-VM-names: 그룹에서 삭제할 VM의 쉼표로 구분된 목록입니다.

REST

비관리형 인스턴스 그룹에서 VM을 삭제하려면 instanceGroups.removeInstances 메서드를 사용하여 POST 요청을 보냅니다. 다음과 같이 VM 여러 개를 동시에 삭제할 수 있습니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances
{
    "instances": [
        {
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
        ....
        }
    ]
}

다음을 바꿉니다.

  • instance-group-name: 제거할 인스턴스가 포함된 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • project-id: 그룹이 포함된 프로젝트의 ID입니다.
  • instance-1-nameinstance-2-name: 그룹에서 연결을 해제하려는 VM의 이름입니다.

이름이 지정된 포트 작업

이름이 지정된 포트는 포트 이름과 포트 번호를 나타내는 키-값 쌍입니다. 포트 이름은 서비스 또는 애플리케이션의 이름을 나타냅니다. 포트 번호는 서비스 또는 애플리케이션이 실행되는 포트를 나타냅니다.

Cloud Load Balancing에서는 이름이 지정된 포트를 사용합니다. 프록시 역할을 수행하는 부하 분산기는 백엔드 서비스 구성에서 이름이 지정된 단일 포트를 구독합니다. 포트 이름은 각 인스턴스 그룹 백엔드의 이름이 지정된 포트 매핑에 따라 포트 번호로 변환됩니다.

예를 들어 백엔드 서비스가 http-port라는 포트를 구독할 수 있습니다. 백엔드 인스턴스 그룹에는 http-port:80이라는 포트가 있을 수 있습니다. 백엔드 인스턴스 그룹은 프로토콜(예: TCP)을 사용하여 포트 80에서 그룹의 VM으로 트래픽을 보내도록 부하 분산기에 지시합니다. 프로토콜은 부하 분산기의 백엔드 서비스에서 정의됩니다.

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

이름이 지정된 포트의 여러 포트 번호

각 서비스 이름에 여러 포트를 할당할 수 있습니다. 각 포트에 여러 서비스 이름을 할당할 수도 있습니다.

다음 사항에 유의하세요.

  • 포트 이름이 동일한 모든 포트 간에 트래픽이 분산됩니다.
  • 지정된 백엔드 서비스는 한 번에 이름이 지정된 포트 한 개로만 트래픽을 전달할 수 있습니다.
  • 이름이 지정된 포트에 여러 포트 번호를 사용하는 경우 포트는 모두 동일한 애플리케이션에 대한 것이어야 합니다.

    예를 들어 http:80,http:8080은 유효하지만 포트 80은 일반적으로 TLS를 지원하지 않으므로 http:80,http:443은 작동하지 않습니다.

인스턴스 그룹 하나에 이름이 지정된 포트를 여러 개 할당할 수 있습니다. 예를 들어 이름이 지정된 포트 http-port를 구독하고 백엔드 인스턴스 그룹이 2개 있는 예시 백엔드 서비스를 살펴보겠습니다.

  • 이름이 지정된 포트가 http-port:80instance-group-a
  • 이름이 지정된 포트가 http-port:79instance-group-b

이 백엔드 서비스는 instance-group-a에서 VM의 트래픽을 포트 80으로 보내고, instance-group-b에서 VM의 트래픽을 포트 79로 보냅니다.

여러 부하 분산기의 경우 여러 백엔드 서비스에 동일한 인스턴스 그룹을 추가하고 인스턴스 그룹이 각 부하 분산기에서 다른 포트를 제공하는 경우 이름이 지정된 단일 포트에 모든 포트 번호를 추가하지 마세요. 대신 고유한 이름이 지정된 포트를 만들어 각 백엔드 서비스가 제공할 포트 집합에 매핑합니다.

예를 들어 각각 자체 부하 분산기가 있는 3개의 애플리케이션이 있다고 가정합니다. 애플리케이션마다 자체 포트 번호(app1: 81, app2: 82, app3: 83)가 있습니다. 3개의 백엔드 서비스가 모두 공통 인스턴스 그룹을 사용하고 있다고 가정하고 이 인스턴스 그룹에 이름이 지정된 포트를 [app1:81, app2:82, app3:83]으로 할당합니다.

이름이 지정된 포트 및 상태 점검

외부 애플리케이션 부하 분산기 또는 내부 애플리케이션 부하 분산기에서 작동하도록 백엔드 서비스에 포트 번호가 여러 개 있는 이름이 지정된 포트의 경우 상태 점검에 특정 포트 번호 대신 --use-serving-port 플래그가 있어야 합니다. Google Cloud Console에서는 이 옵션을 사용할 수 없습니다. --use-serving-port를 설정하려면 Google Cloud CLI 또는 API를 사용해야 합니다.

예를 들어 인스턴스 그룹이 하나인 동일한 백엔드 서비스의 3개의 다른 포트(81, 82, 83)에서 트래픽을 부하 분산하는 애플리케이션이 있다고 가정해 보겠습니다. 이 인스턴스 그룹의 포트를 [app:81, 82, 83]으로 할당할 수 있습니다. 이 시나리오의 상태 점검에는 --use-serving-port 플래그가 있어야 합니다.

자세한 내용은 부하 분산 상태 점검 문서를 참조하세요.

이름이 지정된 포트 및 방화벽 규칙

이름이 지정된 포트는 Google Cloud 방화벽 규칙을 만들거나 수정하지 않습니다. 백엔드 VM에 트래픽을 허용하려면 여전히 필요한 방화벽 규칙을 만들어야 합니다.

이름이 지정된 포트 및 백엔드 서비스

인스턴스 그룹 구성 외에 백엔드 서비스도 구성해야 합니다. 예를 들어 이름이 my-service-name이고 포트 8888인 인스턴스 그룹에 이름이 지정된 포트를 설정했다고 가정해 보겠습니다.

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

그런 다음 백엔드 서비스의 --port-namemy-service-name으로 설정된 백엔드 서비스 구성의 이름이 지정된 포트를 참조해야 합니다.

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

이름이 지정된 포트 만들기

콘솔

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

    인스턴스 그룹으로 이동

  2. 목록의 이름 열에서 이름이 지정된 포트를 지정할 인스턴스 그룹의 이름을 클릭합니다. 인스턴스 그룹 속성이 있는 페이지가 열립니다.
  3. 수정을 클릭하여 이 비관리형 인스턴스 그룹을 수정합니다.
  4. 포트 매핑 섹션에서 포트 추가를 클릭하고 포트 이름 및 번호를 입력합니다. 필요에 따라 이름이 지정된 다른 포트를 추가 또는 삭제합니다.
  5. 저장을 클릭하여 비관리형 인스턴스 그룹의 이름이 지정된 포트 목록을 업데이트합니다.

gcloud

비관리형 인스턴스 그룹에 이름이 지정된 포트를 추가하려면 instance-groups unmanaged set-named-ports 명령어를 사용합니다.

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=port-name:port-number,...

비관리형 인스턴스 그룹의 이름이 지정된 포트를 나열하려면 instance-groups unmanaged get-named-ports 명령어를 사용합니다.

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

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

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

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

각 서비스 이름에 여러 포트를 할당하거나 각 서비스에 여러 이름을 할당하려면 이름이나 포트마다 항목을 2개 이상 만듭니다. 예를 들어 포트 10, 20, 80이 동일한 애플리케이션에 사용되는 경우 이러한 모든 포트에 name1을 할당할 수 있습니다. 또한 두 개의 이름 name2name3를 포트 8080에 할당할 수 있습니다. 마지막으로 다음 예시와 같이 포트 9000name4에 할당할 수 있습니다.

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

Google Cloud CLI를 사용하여 비관리형 인스턴스 그룹에서 이름이 지정된 모든 포트를 삭제하려면 비어 있는 이름이 지정된 포트 목록과 함께 instance-groups unmanaged set-named-ports를 사용합니다.

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=""

위의 모든 예시에서 다음을 바꿉니다(있는 경우).

  • instance-group-name: 인스턴스 그룹의 이름입니다.
  • zone: 그룹의 영역입니다.
  • port-nameport-number: 포트 이름과 번호는 선택한 이름과 포트 번호 간의 매핑을 나타냅니다. 여러 매핑을 쉼표로 구분하여 지정할 수 있습니다. 예를 들어 port-one:80,port-two:8080은 이름이 지정된 포트의 유효한 목록입니다.

REST

  1. 인스턴스 그룹을 설명하고 fingerprint를 기록합니다.

  2. 이름이 지정된 포트를 추가하려면 instanceGroups.setNamedPorts 메서드를 사용하여 POST 요청을 보냅니다. 이름이 지정된 모든 포트를 삭제하려면 namedPorts를 비어 있는 목록으로 설정합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts
    
    {
        "fingerprint": "fingerprint",
        "namedPorts": [
            {
            "name": "port-name",
            "port": port-number
            },
            {
            "name": "port-name",
            "port": port-number
            },
            ....
        ]
    }
    

    다음을 바꿉니다.

    • instance-group-name: 인스턴스 그룹의 이름입니다.
    • zone: 그룹의 영역입니다.
    • project-id: 그룹이 포함된 프로젝트의 ID입니다.
    • port-nameport-number: 포트 이름과 번호는 선택한 이름과 포트 번호 간의 매핑을 나타냅니다.
    • fingerprint: 이전 단계의 지문입니다.

다음 단계