단독 테넌트 노드 만들기

단독 테넌트 노드는 특정 프로젝트의 VM 인스턴스만 전담하여 호스팅하는 물리적 서버입니다. 현재 VM 인스턴스가 다른 프로젝트의 VM 인스턴스를 사용하는 물리적 하드웨어를 공유하지 않도록 단독 테넌트 노드에서 VM을 호스팅하세요. 단독 테넌트 노드의 작동 방식에 대해 자세히 알아보려면 단독 테넌트 노드 개요 페이지를 참조하세요.

노드는 생성된 노드 그룹에 속해 있습니다. 하나의 노드 그룹에는 다양한 크기의 여러 인스턴스가 포함되어 있으며, 이러한 인스턴스는 모두 다른 프로젝트와 분리되어 있습니다. VM 인스턴스가 특정 노드 그룹에서 실행되도록 노드 어피니티를 설정할 수 있습니다.

단독 테넌트 노드의 가격 및 할인을 계산하는 방법을 알아보려면 단독 테넌트 노드 가격 책정을 읽어보세요.

시작하기 전에

제한사항

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

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

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

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

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

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

콘솔

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

    필요하다면 노드 그룹 내에 관리형 인스턴스 그룹을 만들 수도 있습니다. compute.instanceTemplates.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": "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입니다.
    • [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]은 이 그룹을 만들 때 사용하려는 인스턴스 템플릿의 이름입니다. 이 템플릿에는 원하는 노드 그룹을 지정하는 노드 어피니티가 있어야 합니다.

단독 테넌트 노드 옵션

다음은 노드 템플릿에 지정할 수 있는 추가 옵션입니다.

최소 서버 다시 시작 옵션

이 옵션을 설정하면 유지보수 이벤트가 발생할 경우 가능하면 이 노드 그룹의 VM이 동일한 물리적 서버에서 다시 시작됩니다. 동일한 물리적 서버를 사용할 수 없으면 새로운 물리적 서버가 생성되어 노드 그룹에 추가됩니다.

이 옵션은 특정 레이블이 있는 노드에서 특정 VM이 만들어지도록 하는 노드 어피니티 라벨과는 다릅니다. 기본 물리적 서버가 노드 그룹의 수명 기간 동안 동일하게 유지되는지 여부에 영향을 미치지는 않습니다.

이 옵션을 지정하려면 다음 안내를 따르세요.

Console

노드 템플릿 만들기 페이지에서 고급 노드 재시작 구성을 확장하고 최소 서버를 선택합니다.

gcloud

노드 템플릿을 만들 때 gcloud 도구를 사용하여 --server-binding restart-node-on-minimal-servers 플래그를 지정합니다.

API

직접 HTTP 요청을 수행할 때는 serverBinding 객체를 노드 템플릿을 만드는 요청의 일부로 type: restart-node-on-minimal-servers 문자열을 함께 제공합니다.

{
  "serverBinding":
    {
      "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
    }
}

노드 어피니티 구성

노드 어피니티 또는 안티어피니티를 설정하면 인스턴스 및 관리형 인스턴스 그룹에서 호스트 시스템으로 사용할 노드를 결정할 수 있습니다. 노드 어피니티를 설정할 때는 단독 테넌트 노드가 호스팅하는 VM을 명시적으로 선택하세요.

기본적으로 각 노드에는 다음과 같은 어피니티 라벨이 할당됩니다.

  • 그룹의 각 노드에는 노드 그룹의 이름과 일치하는 어피니티 라벨이 있습니다.
    • 키: 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 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
    
  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 어피니티가 있는 노드 그룹에서만 실행됩니다.

안티어피니티 라벨 구성

위의 예시에서는 어피니티 라벨 사용법에 관해 알아보았습니다. 안티어피니티 라벨을 사용하면 VM이 특정 라벨을 사용하는 노드를 방지할 수 있습니다. 위에서 만든 프로덕션 VM 인스턴스 외에 개발용 VM 인스턴스도 만든다고 가정해 보겠습니다. 단, 이러한 인스턴스는 프로덕션 인스턴스를 호스팅하는 동일한 노드에서 호스팅해서는 안 됩니다.

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

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "NOT",
    "values" : ["prod"]
    }
    ]
    
  2. 개발 인스턴스의 경우 전체 인스턴스 그룹보다는 테스트를 실행하는 개별 인스턴스를 만듭니다. 이러한 인스턴스를 만들려면 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 문서