단독 테넌트 노드 만들기

단독 테넌트 노드를 만들어서 인스턴스를 다른 프로젝트의 인스턴스와 물리적으로 분리할 수 있습니다. 각 노드는 물리적 서버 하나와 연결되어 있고 해당 서버를 실행하는 유일한 노드입니다. 호스트 하드웨어를 다른 프로젝트와 공유하지 않고도 노드 내에서 다양한 크기의 여러 인스턴스를 실행할 수 있습니다. 호스트 VM 인스턴스를 중지하지 않고 노드를 완전히 새로운 호스트 시스템으로 실시간 이전할 수 있습니다.

단독 테넌트 노드의 가격 및 할인을 계산하는 방법은 단독 테넌트 노드 가격을 참조하세요.

단독 테넌트 노드의 혜택, 사용 사례, 기능에 대해 알아보려면 단독 테넌트 노드 개요를 읽어보세요.

시작하기 전에

제한사항

단독 테넌트 노드를 만들고 사용하기 전에 단독 테넌트 노드 개요의 제한 섹션을 검토하세요.

단독 테넌트 노드 생성 및 사용

일반적으로 단독 테넌트 노드에서 인스턴스를 만들려면 다음 과정이 필요합니다.

  1. 노드 유형 또는 vCPU와 메모리 요구사항을 지정하는 노드 템플릿을 만듭니다. 그리고 리전과 노드 어피니티 라벨(선택사항)도 지정합니다.
  2. 이 템플릿을 사용하여 하나 이상의 단독 테넌트 노드로 노드 그룹을 만듭니다. 노드가 더 이상 필요하지 않으면 노드의 수를 0으로 줄일 수 있습니다.
  3. 노드 그룹에 인스턴스를 만듭니다.
    • 사전 정의된 머신 유형 또는 커스텀 머신 유형을 사용하여 노드 그룹에 개별 VM 인스턴스를 만듭니다. 머신 유형에 2개 이상의 vCPU가 있어야 합니다.
    • 인스턴스 템플릿을 사용하여 노드 그룹에 관리형 인스턴스 그룹을 만듭니다. 자동 확장 처리는 노드에 있는 관리형 인스턴스 그룹의 크기를 제어할 수 있지만 노드 그룹의 크기는 제어할 수 없습니다.

노드 그룹 및 인스턴스 만들기

노드 그룹 내 노드의 속성을 정의하는 노드 템플릿을 만듭니다. 템플릿을 만든 후에 이 템플릿을 사용하여 하나 이상의 노드 그룹을 만들 수 있습니다. 그 다음, 노드 그룹에 새 인스턴스를 만듭니다.

콘솔

다음과 같이 Google Cloud Platform 콘솔을 사용하여 노드와 노드 내 인스턴스를 만듭니다.

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

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

  2. 노드 템플릿 만들기를 클릭하여 노드 템플릿 만들기를 시작합니다.
  3. 노드 그룹을 실행할 리전을 지정합니다.
  4. 노드 그룹에서 사용할 노드 유형을 지정합니다. 또는 노드 그룹을 사용 가능한 모든 노드 유형에서 실행할 수 있도록 제공되는 가장 작은 노드를 지정할 수 있습니다.
  5. 원하는 경우 노드 어피니티 라벨을 추가하여 이 노드 그룹에서 자동으로 예약되는 인스턴스를 정의합니다. 어피니티 라벨을 비워 두더라도 나중에 노드 그룹 이름이나 개별 노드 이름으로 노드 그룹의 인스턴스를 예약할 수 있습니다.
  6. 만들기를 클릭하여 노드 템플릿 만들기를 마칩니다.

노드 템플릿을 사용하여 노드 그룹을 만듭니다.

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

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

  2. 노드 그룹 만들기를 클릭하여 노드 그룹 만들기를 시작합니다.
  3. 노드 그룹을 실행할 영역(zone)을 지정합니다. 동일한 리전에 노드 템플릿이 있어야 합니다.
  4. 사용할 노드 템플릿을 지정합니다.
  5. 그룹에서 실행할 노드의 수를 지정합니다. 이 수는 나중에 변경할 수 있습니다.
  6. 만들기를 클릭하여 노드 그룹 만들기를 마칩니다.

노드 그룹 내에서 또는 특정 노드에서 실행되는 인스턴스를 만듭니다. 특정 노드 어피니티 라벨을 사용한 경우 일반적인 과정대로 인스턴스를 만들고 단독 테넌시 설정에서 노드 어피니티를 지정할 수 있습니다. 이 예에서는 노드 그룹 세부정보 페이지에서 바로 인스턴스를 만듭니다.

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

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

  2. 인스턴스를 만들 노드 그룹의 이름을 클릭합니다.
  3. 인스턴스 만들기를 클릭하여 이 노드 그룹 내의 아무 곳에나 인스턴스를 만듭니다. 인스턴스를 그룹 내의 특정 노드에서 실행하려면 이 그룹에서 개별 노드의 이름을 클릭하여 해당 개별 노드에 대한 세부정보를 표시합니다. 그런 다음 인스턴스 만들기를 클릭하여 해당 개별 노드에 인스턴스를 만듭니다.
  4. 인스턴스의 설정을 구성합니다. 노드 그룹 또는 특정 노드를 이미 선택했기 때문에 리전, 영역(zone), 기본 노드 어피니티 라벨은 이미 지정되어 있습니다.
  5. 만들기를 클릭하여 인스턴스 만들기를 마칩니다.

gcloud

gcloud 명령줄 도구를 사용하여 노드와 노드 내 인스턴스를 만듭니다.

  1. compute sole-tenancy node-types list 명령어를 사용하여 어떤 노드 유형을 사용할 수 있는지 확인합니다.

    gcloud compute sole-tenancy node-types list
    

    Compute Engine은 주기적으로 이전 노드 유형을 최신 노드 유형으로 바꿉니다. 노드 유형이 바뀌면 이전 노드 유형을 사용해 노드 그룹을 만들 수 없게 되며, 새 노드 유형을 사용하도록 노드 템플릿을 업그레이드해야 합니다.

  2. compute sole-tenancy node-templates create 명령어를 사용하여 새 노드 템플릿을 만듭니다. 사용 가능한 노드 유형 목록은 시간이 지나면서 바뀌므로, 유연한 노드 유형 요구사항을 사용하도록 노드 템플릿을 구성하세요. 예를 들어 로컬 SSD 용량 없이 사용 가능한 노드 유형에서 노드가 실행되도록 --node-requirements vCPU=any,memory=any,localSSD=0을 지정합니다.

    gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
        --region [REGION] --node-requirements vCPU=any,memory=any,localSSD=0
    

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

    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.
    • [REGION]은 이 템플릿을 사용할 리전입니다.

    또는 템플릿에 사용할 특정 노드 유형을 선택해도 됩니다. 이 템플릿은 덜 유연하지만 vCPU 및 메모리 요구사항을 정확히 충족하는 노드만 만들도록 해줍니다.

     gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
         --node-type [NODE_TYPE] --region [REGION]
    

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

    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.
    • [NODE_TYPE]은 이 템플릿에 사용하려는 노드 유형입니다. 예를 들어 n1-node-96-624 노드 유형을 지정하여 vCPU 96개와 624GB의 메모리를 사용하는 노드를 만들 수 있습니다.
    • [REGION]은 이 템플릿을 사용할 리전입니다.
  3. 노드 템플릿을 만든 후 노드 그룹을 만듭니다. compute sole-tenancy node-groups create 명령어를 사용합니다.

    gcloud compute sole-tenancy node-groups create [GROUP_NAME] --zone [ZONE] \
        --node-template [TEMPLATE_NAME] --target-size [TARGET_SIZE]
    

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

    • [GROUP_NAME]은 새 노드 그룹의 이름입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다. 이 영역은 사용하고 있는 노드 템플릿과 동일한 리전에 있어야 합니다.
    • [TEMPLATE_NAME]은 이 그룹을 만들 때 사용하려는 노드 템플릿의 이름입니다.
    • [TARGET_SIZE]는 그룹에 만들려는 노드의 수입니다.
  4. 노드 그룹을 만든 후에는 compute instances create 명령어를 사용하여 노드 그룹 내에 인스턴스를 생성할 수 있습니다. 노드 그룹 이름을 가리키는 --node-group 플래그를 지정합니다. 예를 들어 다음과 같이 커스텀 머신 유형으로 인스턴스를 만들 수 있습니다.

    gcloud compute instances create [INSTANCE_NAME] --zone [ZONE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

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

    • [INSTANCE_NAME]은 새 인스턴스의 이름입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다.
    • [IMAGE_FAMILY]사용 가능한 이미지 계열 중 하나입니다.
    • [IMAGE_PROJECT]는 이미지 계열이 속한 이미지 프로젝트입니다.
    • [GROUP_NAME]은 이 인스턴스를 배치하려는 대상 노드 그룹의 이름입니다.
    • [VCPUS]는 이 인스턴스와 함께 사용하려는 vCPU의 수입니다.
    • [MEMORY]는 인스턴스의 메모리 용량입니다(256MB 단위로 증가). 예를 들어 5.25GB 또는 5376MB를 지정할 수 있습니다.

    원하는 경우 노드 그룹 내에 관리형 인스턴스 그룹을 생성할 수도 있습니다. instance-templates create 명령어를 사용하여 인스턴스 템플릿을 만들고, 노드 그룹 이름을 가리키는 --node-group 플래그를 포함합니다.

    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]사용 가능한 이미지 계열 중 하나입니다.
    • [IMAGE_PROJECT]는 이미지 계열이 속한 이미지 프로젝트입니다.
    • [GROUP_NAME]은 이 인스턴스를 배치하려는 대상 노드 그룹의 이름입니다.
    • [VCPUS]는 이 인스턴스와 함께 사용하려는 vCPU의 수입니다.
    • [MEMORY]는 인스턴스의 메모리 용량입니다(256MB 단위로 증가). 예를 들어 5.25GB 또는 5376MB를 지정할 수 있습니다.

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

    gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
        --zone [ZONE] --size [SIZE] --template [INSTANCE_TEMPLATE]
    

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

    • [INSTANCE_GROUP_NAME]은 이 인스턴스 그룹의 이름입니다.
    • [SIZE]는 이 인스턴스 그룹에 포함시키려는 VM 인스턴스의 개수입니다. 이 관리형 인스턴스 그룹의 인스턴스를 수용할 충분한 리소스가 노드 그룹에 있어야 합니다.
    • [INSTANCE_TEMPLATE]은 이 그룹을 만들 때 사용하려는 인스턴스 템플릿의 이름입니다. 이 템플릿에는 원하는 노드 그룹을 가리키는 노드 어피니티가 있어야 합니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다.

API

Compute Engine API의 메소드를 사용하여 노드와 노드 내 인스턴스를 만듭니다.

  1. API에서 compute.nodetypes.list 메소드를 사용해 사용 가능한 노드 유형의 목록을 검색하기 위한 GET 요청을 생성합니다.

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

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [ZONE]은 사용 가능한 노드 유형을 검색하려는 영역입니다.
  2. compute.nodetemplates.insert 메소드에 POST 요청을 구성하여 새 노드 템플릿을 만듭니다. 유연성을 극대화하기 위해, cpusmemory 값이 any로 설정된 nodeTypeFlexibility 속성을 지정하여, 로컬 SSD 용량 없이 사용 가능한 노드 유형에서 노드가 실행되도록 합니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeTypeFlexibility": {
      "cpus": "any",
      "memory": "any"
     }
    }
    

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [REGION]은 사용 가능한 노드 유형을 검색하려는 영역입니다.
    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.

    또는 템플릿에 사용할 특정 노드 유형을 선택해도 됩니다. 이 템플릿은 덜 유연하지만 vCPU 및 메모리 요구사항을 정확히 충족하는 노드만 만들도록 해줍니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeType": "[NODE_TYPE]"
    }
    

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.
    • [NODE_TYPE]은 이 템플릿에 사용하려는 노드 유형입니다. 예를 들어 n1-node-96-624 노드 유형을 지정하여 vCPU 96개와 624GB의 메모리를 사용하는 노드를 만들 수 있습니다.
    • [REGION]은 이 템플릿을 사용할 리전입니다.
  3. 노드 템플릿을 만든 후 노드 그룹을 만듭니다. compute.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]"
    }
    

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다. 이 영역은 사용하고 있는 노드 템플릿과 동일한 리전에 있어야 합니다.
    • [TARGET_SIZE]는 그룹에 만들려는 노드의 수입니다.
    • [REGION]은 노드 템플릿이 위치한 리전입니다.
    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.
    • [GROUP_NAME]은 새 노드 그룹의 이름입니다.
    • [TEMPLATE_NAME]은 이 그룹을 만들 때 사용하려는 노드 템플릿의 이름입니다.
  4. 노드 그룹을 만든 후 compute.instances.insert 메소드를 사용하여 노드 그룹 내에 인스턴스를 생성할 수 있습니다. 노드 그룹 이름을 가리키는 nodeAffinities 항목을 지정합니다. 예를 들어 다음과 같이 커스텀 머신 유형으로 인스턴스를 만들 수 있습니다.

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

    {
     "machineType": "/zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
     "name": "[INSTANCE_NAME]",
     "scheduling": {
      "nodeAffinities": [
       {
        "key": "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입니다.
    • [INSTANCE_NAME]은 새 인스턴스의 이름입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다.
    • [REGION]은 노드 템플릿과 하위 네트워크가 위치한 리전입니다.
    • [IMAGE_FAMILY]사용 가능한 이미지 계열 중 하나입니다.
    • [IMAGE_PROJECT]는 이미지 계열이 속한 이미지 프로젝트입니다.
    • [GROUP_NAME]은 이 인스턴스를 배치하려는 대상 노드 그룹의 이름입니다.
    • [VCPUS]는 이 인스턴스와 함께 사용하려는 vCPU의 수입니다.
    • [MEMORY]는 인스턴스의 메모리 용량입니다(MB 단위). 예를 들어 5376MB를 지정할 수 있습니다.
    • [NETWORK]는 인스턴스를 연결하려는 네트워크의 이름입니다.
    • [SUBNETWORK]는 인스턴스를 연결하려는 하위 네트워크의 이름입니다.

    원하는 경우 노드 그룹 내에 관리형 인스턴스 그룹을 생성할 수도 있습니다. compute.instancetempates.insert 메소드를 사용하여 인스턴스 템플릿을 만들고 노드 그룹 이름을 가리키는 nodeAffinities 항목을 지정합니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instance-templates
    
    {
    "name": "[TEMPLATE_NAME]",
    "properties": {
       "machineType": "custom-[VCPUS]-[MEMORY]",
       "name": "[INSTANCE_NAME]",
       "scheduling": {
        "nodeAffinities": [
         {
          "key": "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입니다.
    • [INSTANCE_NAME]은 새 인스턴스의 이름입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다.
    • [REGION]은 노드 템플릿과 하위 네트워크가 위치한 리전입니다.
    • [TEMPLATE_NAME]은 새 인스턴스 템플릿의 이름입니다.
    • [IMAGE_FAMILY]사용 가능한 이미지 계열 중 하나입니다.
    • [IMAGE_PROJECT]는 이미지 계열이 속한 이미지 프로젝트입니다.
    • [GROUP_NAME]은 이 인스턴스를 배치하려는 대상 노드 그룹의 이름입니다.
    • [VCPUS]는 이 인스턴스와 함께 사용하려는 vCPU의 수입니다.
    • [MEMORY]는 인스턴스의 메모리 용량입니다(MB 단위). 예를 들어 5376MB를 지정할 수 있습니다.
    • [NETWORK]는 인스턴스를 연결하려는 네트워크의 이름입니다.
    • [SUBNETWORK]는 인스턴스를 연결하려는 하위 네트워크의 이름입니다.

    compute.instancegroupmanagers.insert 메소드를 사용하여 인스턴스 그룹을 만듭니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers
    
    {
     "baseInstanceName": "default",
     "name": "[INSTANCE_GROUP_NAME]",
     "targetSize": [SIZE],
     "instanceTemplate": "/global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
    

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [ZONE]은 노드 그룹이 위치한 영역입니다.
    • [INSTANCE_GROUP_NAME]은 이 인스턴스 그룹의 이름입니다.
    • [BASE_INSTANCE_NAME]은 관리형 인스턴스 그룹 내 각 인스턴스의 프리픽스 이름입니다.
    • [SIZE]는 이 인스턴스 그룹에 포함시키려는 VM 인스턴스의 개수입니다. 이 관리형 인스턴스 그룹의 인스턴스를 수용할 충분한 리소스가 노드 그룹에 있어야 합니다.
    • [INSTANCE_TEMPLATE]은 이 그룹을 만들 때 사용하려는 인스턴스 템플릿의 이름입니다. 이 템플릿에는 원하는 노드 그룹을 가리키는 노드 어피니티가 있어야 합니다.

노드 어피니티 구성

노드 어피니티는 인스턴스와 관리형 인스턴스 그룹이 호스트 시스템으로 어떤 노드를 사용할지를 결정합니다. 기본적으로, 각 노드에는 다음과 같은 어피니티 라벨이 있습니다.

  • 그룹의 각 노드에는 노드 그룹의 이름과 일치하는 어피니티 라벨이 있습니다.
    • 키: compute.googleapis.com/node-group-name
    • 값: 노드 그룹의 이름.
  • 각 노드에는 노드의 이름과 일치하는 어피니티 라벨이 있습니다. 노드 이름은 자동으로 생성됩니다.
    • 키: compute.googleapis.com/node-name
    • 값: 개별 노드의 이름.

추가 어피니티 또는 어피니티 방지 라벨을 구성하여 인스턴스가 사용자가 원하는 노드 그룹에서만 실행되도록 하거나 동일한 어피니티 유형의 인스턴스하고만 노드를 공유하게 할 수 있습니다. 이렇게 하면 민감한 데이터를 특정 노드 그룹에 함께 보관하여 다른 노드 그룹 및 Compute Engine에서 실행되는 다른 VM 인스턴스와 구분할 수 있습니다.

예를 들어 개발용 노드 그룹을 하나 만들고 프로덕션 작업 부하용 노드 그룹을 별도로 만들려는 경우 다음과 같은 프로세스를 수행할 수 있습니다.

  1. workload=frontend,environment=prodworkload=frontend,environment=dev라는 두 가지 라벨로 노드 템플릿 두 개를 만듭니다. workload 라벨은 이 노드 그룹이 frontend 작업 부하용임을 의미하고, environment 라벨은 prod 환경과 dev 환경을 구분합니다.

    gcloud compute sole-tenancy node-templates create production-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=prod
    
    gcloud compute sole-tenancy node-templates create development-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=dev
    
  2. 프로덕션 템플릿과 개발 템플릿을 사용하여 여러 개의 노드 그룹을 만듭니다. 예를 들어 큰 프로덕션 노드 그룹 한 개와 작은 개발 노드 그룹 여러 개를 만들 수 있습니다. 필요 시, 이러한 그룹을 작업 부하의 규모에 맞게 다양한 영역(zone)과 다양한 대상 크기로 만들 수 있습니다.

    gcloud compute node-groups create production-group \
        --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute node-groups create development-group-east1 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute node-groups create development-group-east2 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
  3. 프로덕션 인스턴스의 경우 node-affinity-prod.json 파일을 만들어서 프로덕션 인스턴스에서 어피니티가 실행되는 방법을 더 명확하게 지시합니다. 예를 들어 workload=frontend 어피니티와 environment=prod 어피니티가 둘 다 있는 노드에서만 인스턴스가 실행되도록 지시하는 파일을 만들 수 있습니다.

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "IN",
    "values" : ["prod"]
    }
    ]
    
  4. node-affinity-prod.json 파일을 사용하여 프로덕션 VM 인스턴스에 원하는 속성을 가진 인스턴스 템플릿을 만듭니다.

    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
    
  5. 프로덕션 노드에서 실행되는 프로덕션 템플릿을 사용하여 인스턴스 그룹을 시작합니다.

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

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

  6. 개발 인스턴스의 경우, node-affinity-dev.json 파일을 만들어서 개발 인스턴스에서 어피니티가 작동하는 방법을 더 명확하게 지시합니다. 예를 들어 인스턴스가 environment=prod가 아니라면 workload=frontend 어피니티가 있는 모든 노드 그룹에서 실행되도록 구성하는 파일을 만들 수 있습니다.

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

    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가 있는 노드 그룹에서만 실행됩니다. 그러나 environment=prod 어피니티로 구성된 노드 그룹에서는 실행되지 않습니다.

자체 어피니티 구성을 만들려면 노드 템플릿을 만들고 자체 어피니티 키와 값으로 노드를 실행합니다. 그 다음, 인스턴스가 실행될 수 있는 노드를 결정하는 자체 affinity.json 파일로 인스턴스를 구성합니다.

다음 단계

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

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

Compute Engine 문서