단독 테넌트 노드에서 VM 프로비저닝

이 페이지에서는 단독 테넌드 노드에서 VM 인스턴스를 프로비저닝하는 방법을 설명합니다. 단독 테넌트 노드는 특정 프로젝트의 VM만 전담하여 실행하는 물리적 서버입니다. 단독 테넌드 노드에서 VM을 프로비저닝하기 전에 먼저 단독 테넌트 노드의 개요를 읽어보세요.

단독 테넌트 노드에서 VM을 프로비저닝하는 프로세스는 다음과 같습니다.

  1. 노드 속성을 지정하는 단독 테넌트 노드 템플릿 만들기
  2. 템플릿을 기반으로 단독 테넌트 노드 그룹 만들기
  3. 단독 테넌트 노드를 사용할 VM 만들기

시작하기 전에

단독 테넌트 노드 템플릿 만들기

노드 그룹을 만들고 해당 그룹에서 VM을 프로비저닝하려면 먼저 단독 테넌트 노드 템플릿을 만들어야 합니다. 노드 템플릿은 템플릿을 기반으로 만든 노드 그룹에서 각 노드의 속성을 정의하는 리전 리소스입니다.

Console

  1. Google Cloud Console에서 단독 테넌트 노드 페이지로 이동합니다.

    단독 테넌트 노드로 이동

  2. 노드 템플릿을 클릭합니다.

  3. 노드 템플릿 만들기를 클릭하여 노드 템플릿 만들기를 시작합니다.

  4. 노드 템플릿의 이름을 지정합니다.

  5. 리전을 지정합니다. 노드 템플릿을 사용해 이 리전의 모든 영역에 노드 그룹을 만들 수 있습니다.

  6. 이 노드 템플릿을 기반으로 만들 노드 그룹에서 각 단독 테넌트 노드에 노드 유형을 지정합니다.

  7. 노드 어피니티 라벨을 추가합니다. 어피니티 라벨을 사용하면 단독 테넌시를 사용해 VM을 예약할 수 있습니다. 이 템플릿으로 만든 노드 그룹의 노드는 이러한 어피니티 라벨만 사용합니다. 어피티니 라벨은 노드 그룹에 별도로 추가할 수 없습니다. 자세한 내용은 노드 어피니티 및 안티어피니티를 참조하세요.

  8. 만들기를 클릭하여 노드 템플릿 만들기를 마칩니다.

gcloud

  1. compute sole-tenancy node-types list 명령어를 사용하여 각 Google Cloud 영역에서 사용할 수 있는 단독 테넌트 노드 유형 목록을 가져옵니다.

    gcloud compute sole-tenancy node-types list
    
  2. compute sole-tenancy node-templates create 명령어를 사용하여 노드 유형을 지정하고 새 노드 템플릿을 만듭니다.

    gcloud compute sole-tenancy node-templates create template-name \
      --region=region \
      --node-type=node-type \
      --node-affinity-labels=affinity-labels \
      --server-binding=server-binding
    

    다음을 바꿉니다.

    • template-name: 새 노드 템플릿의 이름입니다.
    • region: 이 템플릿을 사용할 리전입니다.

    • node-type: 이 템플릿의 노드 유형입니다. 예를 들어 80개의 vCPU와 624GB의 메모리가 있는 노드를 만들려면 n2-node-80-640 노드 유형을 선택합니다.

    • affinity-labels: 어피니티 라벨의 키와 값입니다. 어피니티 라벨을 사용하면 단독 테넌시를 사용해 VM 인스턴스를 예약할 수 있습니다. 이 템플릿으로 만든 노드 그룹의 노드는 이러한 어피니티 라벨만 사용합니다. 어피티니 라벨은 노드 그룹에 별도로 추가할 수 없습니다. 자세한 내용은 노드 어피니티 라벨을 참조하세요.

    • server-binding: Google Cloud에서 노드를 물리적 서버에 매핑하는 방법을 제어할 수 있습니다. restart-node-on-any-server를 지정하거나 server-binding 플래그를 생략하면 Google Cloud에서 노드 유지보수 이벤트 후 노드로 작동할 물리적 서버를 프로비저닝할 수 있습니다. Google Cloud에서 노드에 동일한 물리적 서버를 사용하도록 하려면 restart-node-on-minimal-servers를 지정합니다. 자세한 내용은 --server-binding을 참조하세요.

API

  1. compute.nodeTypes.list 메서드를 사용하여 노드 유형 목록을 가져옵니다.

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

    다음을 바꿉니다.

    • project-id: 프로젝트 ID입니다.
    • zone: 사용 가능한 노드 유형을 검색할 Google Cloud 영역입니다.
  2. compute.nodeTemplates.insert 메서드를 사용하여 노드 유형을 사용하는 노드 템플릿을 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/nodeTemplates
    
        {
         "name": "template-name",
         "nodeType": "node-type",
         "nodeAffinityLabels": {
             "key": "value",
             ....
         },
         "serverBinding":
         {
             "type": "server-binding"
         }
        }
    

    다음을 바꿉니다.

    • project-id: 프로젝트 ID입니다.
    • region: 노드 템플릿을 만들 Google Cloud 리전입니다. 이 템플릿을 사용해 이 리전의 모든 영역에 노드 그룹을 만들 수 있습니다.
    • template-name: 만들 노드 템플릿의 이름입니다.

    • node-type: 이 템플릿의 노드 유형입니다. 예를 들어 80개의 vCPU와 640GB의 메모리가 있는 노드를 만들려면 n2-node-80-640 노드 유형을 선택합니다.

    • nodeAffinityLabels를 사용하여 노드 어피니티 라벨을 정의하는 keyvalue 쌍을 지정합니다. 어피니티 라벨을 사용하면 단독 테넌시를 사용해 VM 인스턴스를 예약할 수 있습니다. 이 템플릿으로 만든 노드 그룹의 노드는 이러한 어피니티 라벨만 사용합니다. 어피티니 라벨은 노드 그룹에 별도로 추가할 수 없습니다. 자세한 내용은 노드 어피니티 라벨을 참조하세요.

    • server-binding: Google Cloud에서 이 매개변수를 사용하는 물리적 서버에 노드를 매핑하는 방법을 제어할 수 있습니다. restart-node-on-any-server를 지정하거나 serverBinding 매개변수를 생략하면 Google Cloud에서 노드 유지보수 이벤트 후 노드로 작동할 물리적 서버를 프로비저닝할 수 있습니다. Google Cloud에서 노드에 동일한 물리적 서버를 사용하도록 하려면 restart-node-on-minimal-servers를 지정합니다. 자세한 내용은 --server-binding을 참조하세요.

단독 테넌트 노드 그룹 만들기

노드 템플릿을 만든 후 해당 템플릿을 기반으로 노드 그룹을 만듭니다. 노드 그룹을 만들 때는 해당 그룹의 각 노드에 적용할 다음과 같은 값을 지정해야 합니다.

  • 리전: 노드 그룹에 적용할 노드 템플릿이 포함된 리전을 선택합니다.

  • 영역: 노드 그룹을 만들 리전 내 영역을 선택합니다.

  • 노드 템플릿: 노드 그룹을 만들 노드 템플릿을 선택합니다.

  • 노드 수: 노드 그룹 내에 만들 단독 테넌트 노드 수를 지정하고 노드 그룹 자동 확장 처리를 사용하여 노드 그룹의 크기를 관리합니다. 만들게 될 노드 수에 따라 추가 할당량을 요청해야 할 수 있습니다. 예를 들어 크기가 2인 노드 그룹을 만든 다음 노드 유형으로 n2-node-80-640을 선택했다면 vCPU 할당량이 160 이상이어야 합니다.

  • 유지보수 정책: 호스트 유지보수 이벤트 중에 VM의 유지보수 정책을 지정합니다. 호스트의 VM을 새 물리적 서버로 라이브 마이그레이션할지, 노드 그룹에서 사용하는 물리적 서버 풀 내로 라이브 마이그레이션할지, 동일한 물리적 서버에서 종료 후 다시 시작할 지 여부를 선택합니다. 물리적 서버 어피니티 요구사항(예: 물리적 코어당 평가되는 소프트웨어 라이선스 보유 여부)이 없으면 기본 유지보수 정책을 사용합니다.

  • 자동 확장된 노드 그룹: 노드 그룹의 노드 수가 필요에 따라 자동으로 증가 또는 감소되도록 노드 그룹 자동 확장 처리를 사용 설정합니다.

Console

  1. Google Cloud Console에서 단독 테넌트 노드 페이지로 이동합니다.

    단독 테넌트 노드로 이동

  2. 노드 그룹 만들기를 클릭하여 노드 그룹 만들기를 시작합니다.

  3. 노드 그룹의 이름을 지정합니다.

  4. 노드 그룹의 리전을 지정하여 해당 리전에서 사용 가능한 노드 템플릿을 표시합니다.

  5. 노드 그룹을 실행할 리전 내 영역을 지정합니다.

  6. 사용할 노드 템플릿을 지정합니다. 선택한 리전에 노드 템플릿이 있어야 합니다.

  7. 그룹에서 실행할 노드 수를 지정합니다. 이 값을 나중에 수동으로 변경하거나 노드 그룹 자동 확장 처리를 사용 설정할 수 있습니다. 노드 그룹 자동 확장 처리는 현재 베타 버전입니다.

  8. 유지보수 정책을 지정합니다.

    • 기본값: 새 물리적 서버로 VM을 라이브 마이그레이션합니다.
    • 그대로 다시 시작: 동일한 물리적 서버에서 VM을 다시 시작합니다.
    • 노드 그룹 내 마이그레이션: 노드 그룹 내에서 마이그레이션합니다.
  9. 만들기를 클릭하여 노드 그룹 만들기를 마칩니다.

gcloud

다음 명령어를 실행하여 이전에 만든 노드 템플릿을 기반으로 노드 그룹을 만듭니다.

gcloud compute sole-tenancy node-groups create group-name \
  --zone=zone \
  --node-template=template-name \
  --target-size=target-size \
  --maintenance-policy=maintenance-policy \
  --autoscaler-mode=autoscaler-mode \
  --min-nodes=min-nodes \
  --max-nodes=max-nodes

다음을 바꿉니다.

  • group-name: 새 노드 그룹의 이름입니다.
  • zone: 노드 그룹을 만들 영역입니다. 노드 그룹의 기반이 되는 노드 템플릿과 동일한 리전에 있어야 합니다.
  • template-name: 이 그룹을 만드는 데 사용할 노드 템플릿의 이름입니다.
  • target-size: 그룹에서 만들 노드 수입니다.
  • maintenance-policy: 노드 그룹의 유지보수 정책입니다. 다음 중 하나여야 합니다.
    • default: VM이 새 물리적 서버로 라이브 마이그레이션됩니다.
    • migrate-within-node-group: VM이 노드 그룹 내 다른 노드로 라이브 마이그레이션됩니다. 이 정책은 베타 버전이며 gcloud beta compute sole-tenancy node-groups create 명령어를 사용해 지정되어야 합니다.
    • restart-in-place: 유지보수 이벤트 후 VM이 종료된 다음 동일한 물리적 서버에서 다시 시작됩니다.
  • autoscaler-mode: 노드 그룹의 자동 확장 처리 정책입니다. 다음 중 하나여야 합니다.
    • off: 노드 그룹의 자동 확장을 사용 중지합니다.
    • on: 노드 그룹의 자동 확장을 사용 설정합니다.
    • only-scale-out: 자동 수평 확장만 사용 설정합니다.
  • min-nodes: 노드 그룹의 최소 크기입니다. 기본값은 0이며 max- nodes 이하의 정수 값이어야 합니다.
  • max-nodes: 노드 그룹의 최대 크기입니다. 이 값은 100 이하 혹은 min- nodes 이상의 값으로 설정해야 합니다. autoscaler-modeoff로 설정되지 않은 경우 필수입니다.

API

노드 템플릿을 만든 후 노드 그룹을 만듭니다. nodeGroups.insert 메서드를 사용하여 노드 그룹을 만듭니다.

POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/nodeGroups?initialNodeCount=target-size
{ "nodeTemplate": "regions/region/nodeTemplates/template-name", "name": "group-name", "maintenancePolicy": maintenance-policy, "autoscalingPolicy": { "mode": autoscaler-mode, "minNodes": min-nodes, "maxNodes": max-nodes }, }

다음을 바꿉니다.

  • project-id: 프로젝트의 ID입니다.
  • zone: 노드 그룹을 만들 영역입니다. 노드 그룹의 기반이 되는 노드 템플릿과 동일한 리전에 있어야 합니다.
  • target-size: 그룹에서 만들 노드 수입니다.
  • region: 이 노드 그룹의 기반이 되는 노드 템플릿이 있는 리전입니다.
  • template-name: 이 그룹을 만드는 데 사용할 노드 템플릿의 이름입니다.
  • group-name: 새 노드 그룹의 이름입니다.
  • maintenance-policy: 노드 그룹의 유지보수 정책입니다. 다음 중 하나여야 합니다.
    • DEFAULT: VM은 호스트 유지보수 이벤트 중에 기존의 유지보수 동작을 따르며 호스트 유지보수 이벤트 중에 마이그레이션하도록 구성된 VM은 새 호스트로 라이브 마이그레이션됩니다. 호스트 유지보수 이벤트 중에 마이그레이션하도록 설정되지 않은 VM은 종료됩니다.
    • MIGRATE_WITHIN_NODE_GROUP: VM이 노드 그룹 내 다른 노드로 라이브 마이그레이션됩니다. 이 정책은 베타 버전이며 gcloud beta compute sole-tenancy node-groups create 명령어를 사용해 지정되어야 합니다.
    • RESTART_IN_PLACE: 유지보수 이벤트 후 VM이 종료된 다음 동일한 물리적 서버에서 다시 시작됩니다.
  • autoscaler-mode: 노드 그룹의 자동 확장 처리 정책입니다. 다음 중 하나여야 합니다.
    • OFF: 노드 그룹의 자동 확장을 사용 중지합니다.
    • ON: 노드 그룹의 자동 확장을 사용 설정합니다.
    • ONLY_SCALE_OUT: 자동 수평 확장만 사용 설정합니다.
  • max-nodes: 노드 그룹의 최대 크기입니다. 이 값은 100 이하 혹은 min- nodes 이상이어야 합니다. autoscaler-modeoff로 설정되지 않은 경우 지정해야 합니다.
  • min-nodes: 노드 그룹의 최소 크기입니다. 기본값은 0이며 max-nodes 이하의 정수 값이어야 합니다.

단독 테넌트 노드에서 개별 VM 프로비저닝

노드 템플릿을 기반으로 노드 그룹을 만든 후 사전 정의된 머신 유형 또는 vCPU가 2개 이상인 커스텀 머신 유형을 사용하여 단독 테넌트 노드 또는 노드 그룹에서 직접 개별 VM을 프로비저닝합니다. 이 방식으로 VM을 프로비저닝할 때 Compute Engine은 VM을 프로비저닝하는 노드 또는 노드 그룹에 따라 어피니티 라벨을 자동으로 할당합니다.

아래 절차에서는 노드 그룹에서 개별 VM을 프로비저닝하는 방법을 설명합니다.

Console

  • 노드 어피니티 라벨 사용: Cloud Console에서 VM 인스턴스를 만드는 표준 절차를 따라 어피니티 라벨을 사용하여 새 VM 인스턴스를 단독 테넌트 노드와 연결합니다.

  • 또는 노드 그룹 세부정보 페이지에서 VM 인스턴스를 만듭니다.

    1. Google Cloud Console에서 단독 테넌트 노드 페이지로 이동합니다.

      단독 테넌트 노드로 이동

    2. 노드 그룹을 클릭합니다.

    3. VM 인스턴스를 프로비저닝할 노드 그룹의 이름을 클릭합니다.

    4. 인스턴스 만들기를 클릭하여 이 노드 그룹에서 VM 인스턴스를 프로비저닝하고, Compute Engine에서 리전, 영역, 머신 구성, 노드 어피니티 라벨, 호스트 유지보수 시, 자동 다시 시작에 자동 적용한 값을 기록해 두고, 워크로드의 요구사항이 변경되면 그에 따라 해당 값을 수정합니다.

    5. 만들기를 클릭하여 인스턴스 만들기를 마칩니다.

gcloud

다음 명령어를 사용하여 노드 그룹에서 커스텀 머신 유형으로 VM을 프로비저닝합니다.

gcloud compute instances create vm-name \
  --zone=zone \
  --image-family=image-family \
  --image-project=image-project \
  --node-group=group-name \
  --custom-cpu=vcpus \
  --custom-memory=memory \
  --maintenance-policy=maintenance-policy \
  --restart-on-failure

다음을 바꿉니다.

  • vm-name: 새 VM의 이름입니다.
  • zone: 새 VM을 만들 영역입니다.
  • image-family: VM을 만드는 데 사용할 이미지가 포함된 이미지 계열입니다.
  • image-project: 이미지 계열이 속한 이미지 프로젝트입니다.
  • group-name: VM을 프로비저닝할 노드 그룹의 이름입니다.
  • vcpus: 이 VM에서 사용할 vCPU 수입니다.
  • memory: 256MB 단위로 증가하는 메모리 용량입니다. 예를 들어 5.25GB 또는 5,376MB입니다.
  • maintenance-policy: 유지보수 진행 시 이 VM의 동작을 지정합니다. 다음 중 하나로 설정합니다.
    • MIGRATE: VM이 새 호스트로 마이그레이션되었습니다.
    • TERMINATE: VM이 종료되었습니다.
  • --restart-on-failure: VM이 종료된 후 다시 시작할지 여부를 나타내는 매개변수입니다. 사용 중지하려면 --no-restart-on- failure를 사용합니다.

API

다음 instances.insert REST 요청을 사용하여 노드 그룹에서 커스텀 머신 유형으로 VM을 프로비저닝합니다.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances
{ "machineType": "zones/zone/machineTypes/custom-vcpus-memory", "name": "vm-name", "scheduling": { "onHostMaintenance": maintenance-policy, "automaticRestart": restart-on-failure, "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "group-name" ] } ] }, "networkInterfaces": [ { "network": "global/networks/network", "subnetwork": "regions/region/subnetworks/subnetwork" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/image-project/global/images/family/image-family" } } ] }

다음을 바꿉니다.

  • project-id: 프로젝트의 ID입니다.
  • zone: 새 VM을 만들 영역입니다.
  • vcpus: 이 VM에서 사용할 vCPU 수입니다.
  • memory: 256MB 단위로 증가하는 메모리 용량입니다. 예를 들어 5.25GB 또는 5,376MB입니다.
  • vm-name: 새 VM의 이름입니다.
  • maintenance-policy: 유지보수 진행 시 이 VM의 동작을 지정합니다. 다음 중 하나로 설정합니다.
    • MIGRATE: VM이 새 호스트로 마이그레이션되었습니다.
    • TERMINATE: VM이 종료되었습니다.
  • restart-on-failure: VM이 종료된 후 다시 시작할지 여부를 나타내는 매개변수입니다. 기본값은 true입니다.
  • group-name: VM을 프로비저닝할 노드 그룹의 이름입니다.
  • network: 이 VM의 네트워크 URL입니다.
  • region: 이 VM의 서브네트워크가 포함된 리전입니다.
  • subnetwork: 이 VM의 서브네트워크 URL입니다.
  • image-project: 이미지 계열이 속한 이미지 프로젝트입니다.
  • image-family: VM을 만드는 데 사용할 이미지가 포함된 이미지 계열입니다.

단독 테넌트 노드에서 여러 VM 프로비저닝

노드 또는 노드 그룹에서 동시에 같은 VM을 여러 개 프로비저닝하려면 관리형 인스턴스 그룹(MIG)을 사용하고 어피니티 라벨을 사용하여 인스턴스 그룹을 실행할 단독 테넌트 노드 또는 노드 그룹을 지정합니다.

관리형 인스턴스 그룹의 크기를 자동으로 관리하려면 MIG 자동 확장 처리를 사용하고 노드 그룹의 크기를 자동으로 관리하려면 노드 그룹 자동 확장 처리를 사용합니다.

다음 명령어는 커스텀 머신 유형으로 관리형 인스턴스 그룹을 만드는 방법을 보여줍니다.

gcloud

  1. gcloud compute instance-templates create 명령어를 사용하여 노드 그룹 내에 MIG 템플릿을 만듭니다.

    gcloud compute instance-templates create instance-template \
    --image-family=image-family \
    --image-project=image-project \
    --node-group=group-name \
    --custom-cpu=vcpus \
    --custom-memory=memory
    

    다음을 바꿉니다.

    • instance-template: 새 인스턴스 템플릿의 이름입니다.
    • image-family: VM을 만드는 데 사용할 이미지가 포함된 이미지 계열입니다.
    • image-project: 이미지 계열이 속한 이미지 프로젝트입니다.
    • group-name: VM을 프로비저닝할 노드 그룹의 이름입니다.
    • vcpus: 이 VM에서 사용할 vCPU 수입니다.
    • memory: 256MB 단위로 증가하는 메모리 용량입니다. 예를 들어 5.25GB 또는 5,376MB입니다.
  2. gcloud compute instance-groups managed create 명령어를 사용하여 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create instance-group-name --zone zone --size size --template instance-template
    

    다음을 바꿉니다.

    • instance-group-name: 이 인스턴스 그룹의 이름입니다.
    • zone: 관리형 인스턴스 그룹을 만들 영역입니다.
    • size: 이 인스턴스 그룹에 포함할 VM 수입니다. 이 관리형 인스턴스 그룹의 인스턴스를 수용할 충분한 리소스가 노드 그룹에 있어야 합니다.
    • instance-template: 이 그룹을 만드는 데 사용할 인스턴스 템플릿의 이름입니다. 이 템플릿에는 적절한 노드 그룹을 가리키는 노드 어피니티가 있어야 합니다.

API

  1. instanceTemplates.insert REST 요청을 사용하여 노드 그룹 내에 MIG 템플릿을 만듭니다.

    POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instance-templates
    { "name": "template-name", "properties": { "machineType": "custom-vcpus-memory", "scheduling": { "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "group-name" ] } ] }, "networkInterfaces": [ { "network": "global/networks/network", "subnetwork": "regions/region/subnetworks/subnetwork" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/image-project/global/images/family/image-family" } } ] } }

    다음을 바꿉니다.

    • project-id: 프로젝트의 ID입니다.
    • zone: 새 인스턴스 템플릿을 만들 영역입니다.
    • template-name: 새 인스턴스 템플릿의 이름입니다.
    • vcpus: 인스턴스 그룹의 각 VM에 사용할 vCPU 수입니다.
    • memory: 인스턴스 그룹의 각 VM에 지정된 메모리 용량으로 256MB 단위로 증가합니다. 예를 들어 5.25GB 또는 5,376MB입니다.
    • group-name: VM을 프로비저닝할 노드 그룹의 이름입니다.
    • network: 이 VM의 네트워크 URL입니다.
    • region: 이 VM의 서브네트워크가 포함된 리전입니다.
    • subnetwork: 이 VM의 서브네트워크 URL입니다.
    • image-project: 이미지 계열이 속한 이미지 프로젝트입니다.
    • image-family: VM을 만드는 데 사용할 이미지가 포함된 이미지 계열입니다.
  2. instanceGroupManagers.create 명령어를 사용하여 인스턴스 그룹을 만듭니다.

    POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers
    {
     "baseInstanceName": "name-prefix",
     "name": "instance-group-name",
     "targetSize": sizevar>,
     "instanceTemplate": "global/instanceTemplates/instance-template"
    }
    

    다음을 바꿉니다.

    • project-id: 프로젝트의 ID입니다.
    • zone: 관리형 인스턴스 그룹을 만들 영역입니다.
    • name-prefix: 관리형 인스턴스 그룹에 있는 각 인스턴스의 프리픽스 이름입니다.
    • instance-group-name: 이 인스턴스 그룹의 이름입니다.
    • size: 이 인스턴스 그룹에 포함할 VM 수입니다. 이 관리형 인스턴스 그룹의 인스턴스를 수용할 충분한 리소스가 노드 그룹에 있어야 합니다.
    • instance-template: 이 그룹을 만드는 데 사용할 인스턴스 템플릿의 이름입니다. 이 템플릿에는 적절한 노드 그룹을 가리키는 노드 어피니티가 있어야 합니다.

인스턴스 어피니티 예시

노드 어피니티 라벨을 사용하면 노드 그룹을 논리적으로 그룹화하고 특정 노드 그룹 집합에서 VM을 예약할 수 있습니다. 또한 노드 어피니티 라벨을 사용하면 여러 영역의 노드 그룹에서 VM을 예약하고 해당 노드 그룹을 논리적 그룹에 유지할 수 있습니다. 아래 절차에서는 어피니티 라벨을 사용하여 VM을 특정 노드 그룹과 연결하는 방법의 예시를 보여줍니다.

gcloud

  1. 프로덕션 워크로드에 어피니티 라벨 집합을 사용하여 노드 템플릿을 만듭니다.

    gcloud compute sole-tenancy node-templates create production-template --node-type=n2-node-80-640 --node-affinity-labels workload=frontend,environment=prod
    
  2. 개발 워크로드에 어피니티 라벨 집합을 사용하여 다른 노드 템플릿을 만듭니다.

    gcloud compute sole-tenancy node-templates create development-template --node-type=n2-node-80-640 --node-affinity-labels workload=frontend,environment=dev
    
  3. 프로덕션 템플릿과 개발 템플릿을 사용하여 여러 개의 노드 그룹을 만듭니다. 예를 들어 큰 프로덕션 노드 그룹 1개와 작은 개발 노드 그룹 여러 개를 만들 수 있습니다. 원하는 경우 이러한 그룹을 워크로드의 규모에 맞게 다양한 영역과 다양한 대상 크기로 만들 수 있습니다.

    gcloud compute sole-tenancy node-groups create production-group --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute sole-tenancy node-groups create development-group-east1 --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute sole-tenancy node-groups create development-group-east2 --node-template development-template --target-size 1 --zones us-east1-d
    
  4. 프로덕션 VM의 경우 node-affinity-prod.json 파일을 만들어 프로덕션 VM의 어피니티를 지정합니다. 예를 들어 workload=frontend 어피니티와 environment=prod 어피니티가 모두 있는 노드에서만 VM이 실행되도록 지시하는 파일을 만들 수 있습니다.

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "IN",
        "values" : ["prod"]
      }
    ]
    
  5. node-affinity-prod.json 파일을 사용하여 프로덕션 VM에 필요한 속성으로 MIG 템플릿을 만듭니다.

    gcloud compute instance-templates create production-template --image-family production-images --image-project my-project --node-affinity-file node-affinity-prod.json --custom-cpu 3 --custom-memory 4096
    
  6. 프로덕션 노드에서 실행되는 MIG 프로덕션 템플릿을 사용하여 인스턴스 그룹을 시작합니다.

    gcloud compute instance-groups managed create production-group --zone us-west1-b --size 4 --template production-template
    

    이제 그룹 내의 VM이 시작되고 workload=frontend 어피니티와 environment=prod 어피니티가 있는 노드 그룹에서만 실행됩니다.

인스턴스 안티어피니티 예시

안티어피니티 라벨을 사용하면 VM이 노드에서 프로비저닝되지 않도록 할 수 있습니다. 예를 들어 개발 용도로 VM을 만들되 프로덕션 VM을 호스팅하는 동일한 노드에서 Compute Engine이 해당 VM을 예약하지 않도록 할 수 있습니다. 아래 절차에서는 어피니티 라벨을 사용하여 VM이 특정 노드 그룹과 연결되지 않도록 하는 방법의 예시입니다.

gcloud

  1. 개발 인스턴스의 경우 node-affinity-dev.json 파일을 만들어 개발 VM의 어피니티를 지정합니다. 예를 들어 VM이 environment=prod가 아니라면 workload=frontend 어피니티가 있는 모든 노드 그룹에서 VM이 실행되도록 구성하는 파일을 만들 수 있습니다.

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "NOT",
        "values" : ["prod"]
      }
    ]
    
  2. 개발 인스턴스의 경우 전체 인스턴스 그룹이 아니라 테스트 목적의 개별 VM을 만들 수 있습니다. 이러한 VM을 만들려면 node-affinity-dev.json 파일을 사용합니다. 예를 들어 development-image-1이라는 특정 개발 이미지를 테스트하려면 다음 명령어를 사용하여 VM을 만들고 해당 어피니티를 구성합니다.

    gcloud compute instances create dev-1 --image development-image-1 --image-project my-project --node-affinity-file node-affinity-dev.json --custom-cpu 3 --custom-memory 4096 --zone us-east1-d
    

    이 인스턴스는 workload=frontend가 있는 노드 그룹에서만 시작되고 실행됩니다. 그러나 이 VM은 environment=prod affinity 어피니티로 구성된 노드 그룹에서는 실행되지 않습니다.

노드 템플릿 삭제

템플릿을 사용하여 모든 노드 그룹을 삭제한 후에 노드 템플릿을 삭제할 수 있습니다.

Console

  1. Google Cloud Console에서 단독 테넌트 노드 페이지로 이동합니다.

    단독 테넌트 노드 페이지로 이동

  2. 노드 템플릿을 클릭합니다.

  3. 사용하지 않은 노드 템플릿의 이름을 선택합니다.

  4. 삭제를 클릭합니다.

gcloud

compute sole-tenancy node-templates delete 명령어를 사용하여 사용하지 않은 노드 템플릿을 삭제합니다.

gcloud compute sole-tenancy node-templates delete template-name \
    --region=region

다음을 바꿉니다.

  • template-name: 삭제할 노드 템플릿의 이름
  • region: 노드 템플릿의 리전

API

compute.nodeTemplates.delete 메서드를 사용하여 사용하지 않은 노드 템플릿을 삭제합니다.

 DELETE https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/nodeTemplates/template-name
 

다음을 바꿉니다.

  • project-id: 프로젝트 ID
  • region: 노드 템플릿이 포함된 Google Cloud 리전
  • template-name: 삭제할 노드 템플릿의 이름

노드 그룹 삭제

노드에서 실행 중인 VM 인스턴스가 없으면 노드 그룹을 삭제할 수 있습니다.

Console

  1. 단독 테넌트 노드 페이지로 이동합니다.

    단독 테넌트 노드 페이지로 이동

  2. 삭제할 노드 그룹의 이름을 클릭합니다.

  3. 노드 그룹의 각 노드에서 노드 이름을 클릭합니다. 노드에서 실행 중인 VM 인스턴스가 없는지 확인합니다.

  4. 노드 세부정보 페이지에서 개별 VM 인스턴스를 삭제하거나 개별 VM 인스턴스를 삭제하는 표준 절차를 따라 삭제할 수 있습니다. 관리형 인스턴스 그룹의 인스턴스를 삭제하려면 관리형 인스턴스 그룹을 삭제해야 합니다.

  5. 노드 그룹의 모든 노드에서 실행 중인 VM 인스턴스를 모두 삭제한 후 단독 테넌트 노드 페이지로 돌아갑니다.

    단독 테넌트 노드 페이지로 이동

  6. 노드 그룹을 클릭합니다.

  7. 삭제할 노드 그룹의 이름을 선택합니다.

  8. 삭제를 클릭합니다.

gcloud

  1. compute sole-tenancy node-groups list-nodes 명령어를 사용하여 노드 그룹의 노드에서 실행 중인 VM 인스턴스를 나열합니다.

    gcloud compute sole-tenancy node-groups list-nodes group-name \
     --zone=zone
    

    다음을 바꿉니다.

    • group-name: 노드 그룹의 이름
    • zone: 노드 그룹의 영역
  2. 노드 그룹에서 실행 중인 VM 인스턴스가 있으면 필요에 따라 개별 VM 인스턴스를 삭제하는 표준 절차를 따르거나 관리 형 인스턴스 그룹을 삭제하는 표준 절차를 따르세요.

  3. 노드 그룹의 모든 노드에서 실행 중인 VM 인스턴스를 모두 삭제한 후compute sole-tenancy node-groups delete 명령어를 사용하여 노드 그룹을 삭제합니다.

    gcloud compute sole-tenancy node-groups delete group-name \
     --zone=zone
    

    다음을 바꿉니다.

    • group-name: 노드 그룹의 이름
    • zone: 노드 그룹의 영역

다음 단계