단독 테넌트 노드로 사용자 라이선스 사용하기

Compute Engine은 물리적 하드웨어 사용을 제한하는 라이선스 요구사항을 지원하기 위해 단독 테넌트 노드를 사용하여 사용자 라이선스 사용(BYOL) 기능을 제공합니다. 구체적으로 말하면, 단독 테넌트 노드를 사용하여 커스텀 이미지를 Compute Engine으로 가져오고 해당 이미지를 사용하여 VM을 시작한 다음 가능할 때마다 동일한 물리적 서버에서 VM을 다시 시작할 수 있도록 인플레이스(In-Place) 다시 시작을 사용 설정합니다. 단독 테넌트 노드를 사용하여 VM을 호스팅하면 물리적 코어 사용을 제한하면서 VM이 전용 하드웨어에서 실행되도록 할 수 있습니다. 또한 Compute Engine은 서버 사용량 보고 기능도 제공하므로 라이선스 사용량에 대한 물리적 하드웨어 정보를 추적할 수 있습니다.

요구사항 및 워크로드 고려 사항을 포함한 이 기능에 대한 개요는 개요 페이지를 참조하세요.

시작하기 전에

지원되는 OS 및 라이선스 요구사항 검토

이 프로세스를 시작하기 전에 OS가 호환되는지, 라이선스 및 정품 인증 섹션을 검토했는지 확인하세요. 라이선스 계약이 이 문서에 설명된 대로 BYOL 환경에서 소프트웨어 사용을 허용하는지 확인해야 합니다. 또한 계약에 따라 BYOL용 게스트 이미지를 준비해야 합니다.

궁금한 점이 있거나 추가 지원이 필요한 경우 라이선스 관련 질문은 라이선스 리셀러에게 문의하고, 이 기능에 대한 질문은 Google Cloud 지원에 문의하시기 바랍니다.

지원되는 리전 검토

이 기능은 특정 리전에서만 사용할 수 있습니다. 전체 목록은 가격 책정 및 가용성을 참조하세요.

워크로드 고려

다른 워크로드보다 이 기능에 더 적합한 특정 워크로드가 있습니다. 일반적인 권장사항은 워크로드 고려 사항을 살펴보세요.

새 프로젝트 및 요청 할당량 만들기

아직 프로젝트가 없으면 새 프로젝트를 만듭니다.

새 프로젝트의 CPU 할당량은 CPU 100개로 제한됩니다. 그러나 이것만으로는 부족할 수 있습니다. 프로젝트에 더 많은 할당량이 필요한 경우 GCP Console의 할당량 페이지를 통해 할당량 조정을 요청할 수 있습니다. 설정에 따라 IP 주소와 같은 다른 리소스의 할당량을 늘려야 할 수도 있습니다.

Cloud Build API 사용 설정

이 기능은 Cloud Build 서비스를 사용하여 Compute Engine 이미지를 가져오거나 만듭니다. 이 기능을 사용하려면 Cloud Build API를 사용 설정해야 합니다.

Cloud Build API 사용 설정

Compute Engine은 Cloud Build 서비스 계정에서 이미지를 Compute Engine으로 가져올 수 있도록 다음 역할을 부여합니다.

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

감사 로깅을 위해 Stackdriver Logging 사용 설정

라이선스에 물리적 서버 사용량 보고가 필요한 경우 단독 테넌트 노드에서 VM을 시작하기 전에 Stackdriver Logging API를 사용 설정합니다. 그러면 BigQuery를 사용하여 서버 사용량 정보를 가져와서 확인할 수 있습니다(적극 권장).

Stackdriver Logging API 사용 설정

로깅을 설정하면 BigQuery를 활용하여 라이선스에 필요한 물리적 코어 수 사용량과 같은 관련 정보를 추적할 수 있습니다. 자세한 내용은 서버 사용량 확인을 참조하세요.

가상 디스크 파일 만들기

이미지를 Compute Engine으로 가져오려면 기존 가상 디스크 파일(VMDK, VHD)이 있어야 합니다. iso, img, DVD, USB 등과 같은 설치 이미지로 운영체제를 VM에 직접 설치할 수 없습니다. 또한 Compute Engine VM의 인플레이스(In-Place) OS 업그레이드를 수행할 수 없습니다.

가상 디스크 파일 생성 단계는 환경에 따라 다릅니다. 운영체제에 해당하는 문서를 참조하세요.

가상 디스크 파일 가져오기

사용자 라이선스로 VM을 시작하려면 사용하려는 OS가 포함된 가상 디스크를 가져옵니다. gcloud 명령줄 도구를 사용하여 파일을 가져옵니다. gcloud 도구는 Cloud Storage 버킷 또는 로컬 워크스테이션에서 VHD 또는 VMDK 가져오기를 지원합니다. 가상 디스크가 로컬 머신에서 호스팅되는 경우 가져오기 프로세스는 먼저 파일을 Cloud Storage 버킷에 업로드한 후 이미지를 Compute Engine으로 가져옵니다.

가상 머신의 디스크를 가져오려고 하기 전에 가상 머신 내부에서 사전 확인 도구를 다운로드하고 실행합니다. 이 사전 확인 도구는 GCP로 마이그레이션할 때 비호환성이 없는지 확인하는 데 도움이 됩니다.

이미지 가져오기 도구에 대한 자세한 설명은 가상 디스크 가져오기를 참조하세요.

준비가 되면 다음 gcloud 명령어를 실행하여 가상 디스크를 가져옵니다.

gcloud compute images import [IMAGE_NAME] \
    --source-file [SOURCE_FILE] \
    --os [OS]

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

  • [IMAGE_NAME]은 이 이미지에 지정할 이름입니다.
  • [SOURCE_FILE]은 로컬에서 호스팅되거나 Cloud Storage에 저장된 가상 디스크 파일입니다. 가상 디스크가 로컬 파일인 경우 절대 또는 상대 경로를 사용할 수 있습니다. 가상 디스크 파일이 이미 Cloud Storage에 저장되어 있는 경우 파일은 가져오기 프로세스에 사용된 프로젝트의 스토리지 버킷에 있어야 하며, 파일 전체 경로를 gs://[BUCKET_NAME]/[OBJECT_NAME] 형식으로 지정해야 합니다.

  • [OS]SOURCE_FILE의 Windows 운영체제입니다. 다음과 같은 Windows OS가 지원됩니다.

    • windows-2008r2-byol
    • windows-2012-byol
    • windows-2012r2-byol
    • windows-2016-byol
    • windows-2019-byol
    • windows-7-byol
    • windows-8-1-x64-byol
    • windows-10-byol

Cloud Storage에 저장된 파일과 Compute Engine의 이미지에는 요금이 부과됩니다. 이미지를 올바르게 가져왔는지, 이미지가 Compute Engine 인스턴스로 올바르게 부팅되는지 확인한 후 Cloud Storage에서 가상 디스크 파일을 삭제할 수 있습니다.

--source-file에 로컬 파일이 지정된 경우 가상 디스크의 크기와 네트워크 연결 속도에 따라 업로드 작업을 실행하는 데 수십 분이 걸릴 수 있습니다.

이미지가 생성되면 IAM 역할 또는 권한을 사용하여 프로젝트 또는 조직 외부에 있는 사용자와 이미지를 공유할 수 있습니다.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member user:[USER_EMAIL] \
    --role roles/compute.imageUser

이 경우 [PROJECT_ID]는 액세스 권한을 부여할 이미지를 소유한 프로젝트입니다.

그러면 사용자가 이미지가 상주하는 프로젝트 ID를 요청에 지정하여 이 이미지에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

gcloud compute instances create my-vm \
    --custom-cpu 4 \
    --custom-memory 8 \
    --image https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[IMAGE_NAME] \
    --zone us-central1-a \
    --node-affinity-file node-affinity-prod.json \
    --restart-on-failure \
    --maintenance-policy terminate

사용자 라이선스로 VM 인스턴스 시작

이미지를 가져온 후에는 가져온 이미지를 사용하여 단독 테넌트 노드에서 VM 인스턴스를 시작하고 restart-node-on-minimal-servers 속성을 지정하여 인플레이스(In-Place) 다시 시작 기능을 사용 설정할 수 있습니다. 이 속성은 유지보수 이벤트가 발생할 경우 가능하면 VM이 동일한 물리적 서버에서 재시작되도록 합니다. 동일한 물리적 서버를 사용할 수 없으면 새로운 물리적 서버가 생성되어 노드 그룹에 추가됩니다. Compute Engine은 새 서버의 서버 ID를 보고합니다.

라이선스 및 제품 이용약관의 특성상 물리적 코어 또는 소켓 사용량과 관련이 없는 BYOL 워크로드의 경우 단독 테넌트 노드를 사용하고 인플레이스(In-Place) 다시 시작 기능을 제외할 수 있습니다. 이렇게 하면 VM 인스턴스가 전용 하드웨어로 연결되지만 사용할 물리적 기본 서버의 수를 최소화하지는 않습니다.

다음 단계에 따라 VM 인스턴스를 시작하세요(자세한 설명은 아래 참조).

  1. Google Cloud Platform Console, gcloud 명령줄 도구 또는 API를 사용하여 노드 템플릿을 만들고 필요한 경우 인플레이스(In-Place) 다시 시작을 사용 설정합니다.

  2. 새 템플릿으로 노드 그룹을 만듭니다.

  3. 마지막으로, 가져온 이미지로 노드 그룹에 VM을 만듭니다.

VM이 노드에 예약되면 다시 시작 및 유지보수 이벤트를 통해 동일한 물리적 어피니티 라벨을 준수합니다. 즉, 기본 물리적 서버는 변경될 수 있지만 라벨 선택기를 사용하여 특정 VM이 동일한 노드에서 상시 사용 설정되고(해당하는 노드 어피니티 사용) 동일한 노드를 공유하지 않도록(노드 안티어피니티) 할 수 있습니다.

편의를 위해 restart-node-on-minimal-servers 옵션으로 구성된 모든 단독 테넌트 노드에 노드 이름 및 노드 그룹 이름과 유사한 추가 어피니티 라벨이 자동으로 추가됩니다. 이 라벨을 어피니티 파일에 포함하여 restart-node-on-minimal-server 기능이 사용 설정된 노드에서만 VM이 시작되도록 할 수 있습니다. 라벨은 다음과 같은 형식입니다.

  • 키: compute.googleapis.com/node-server-binding-type
  • 값: restart-node-on-minimal-server

Console

  1. 최소 서버 다시 시작 옵션을 사용하여 노드 템플릿을 만듭니다.

    1. 노드 템플릿 만들기 페이지로 이동합니다.

      노드 템플릿 만들기 페이지로 이동

    2. 템플릿 이름을 입력합니다.
    3. 노드 그룹을 실행할 리전을 지정합니다.
    4. 노드 그룹에서 사용할 노드 유형을 지정합니다. 또는 노드 그룹을 사용 가능한 모든 노드 유형에서 실행할 수 있도록 제공되는 가장 작은 노드를 지정할 수 있습니다.
    5. 원하는 경우 인스턴스의 노드 어피니티 라벨을 지정합니다. 예를 들어 workload=front-endenvironment=prod 라벨을 지정할 수 있습니다.
    6. 고급 노드 재시작 구성을 확장합니다.
    7. 최소 서버를 선택합니다.
    8. 노드 템플릿을 만듭니다.
  2. 노드 템플릿을 사용하여 노드 그룹을 프로비저닝합니다.

    1. 노드 그룹 만들기 페이지로 이동합니다.

      노드 그룹 만들기 페이지로 이동

    2. 그룹 이름을 입력합니다.
    3. 노드 그룹을 실행할 영역을 지정합니다. 동일한 리전에 노드 템플릿이 있어야 합니다.
    4. 사용할 노드 템플릿을 지정합니다.
    5. 그룹에서 실행할 노드의 수를 지정합니다. 이 수는 나중에 변경할 수 있습니다.
    6. 만들기를 클릭하여 노드 그룹 만들기를 마칩니다.
  3. 노드 그룹 내에서 또는 특정 노드에서 실행되는 인스턴스를 만듭니다. 특정 노드 어피니티 라벨을 사용한 경우 일반적인 과정대로 인스턴스를 만들고 단독 테넌시 설정에서 노드 어피니티를 지정할 수 있습니다. 이 예시에서는 노드 그룹 세부정보 페이지에서 바로 인스턴스를 만듭니다.

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

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

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

    7. 자동 재시작에서 사용(권장)을 선택합니다.

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

gcloud

  1. 노드 템플릿을 만들고 restart-node-on-minimal-servers 플래그를 설정합니다. 원하는 경우 인스턴스의 노드 어피니티 라벨을 선택합니다. 예를 들면 다음과 같습니다.

    gcloud compute sole-tenancy node-templates create my-node-template \
        --node-type n1-node-96-624 \
        --region us-east1 \
        --node-affinity-labels workload=front-end,environment=prod \
        --server-binding restart-node-on-minimal-servers
    
  2. 노드 템플릿을 사용하여 노드 그룹을 프로비저닝합니다. 예를 들어 다음 명령어는 이전 단계에서 만든 노드 템플릿을 사용하여 인스턴스 2개로 구성된 그룹을 만듭니다.

     gcloud compute sole-tenancy node-groups create my-node-group \
         --node-template my-node-template \
         --target-size 2 \
         --zone us-east1-b
    
  3. 노드 그룹의 해당 어피니티 라벨이 포함된 노드 어피니티 파일을 만듭니다. 이렇게 하면 이러한 모든 라벨이 포함된 노드에서만 VM이 생성됩니다. 예를 들면 다음과 같습니다.

     // CREATE AFFINITY LABEL FILE
     cat > node-affinity-prod.json
     [{
       "key" : "workload",
       "operator" : "IN",
       "values" : ["front-end"]
       },
       {
       "key" : "environment",
       "operator" : "IN",
        "values" : ["prod"]
      },
      {
        "key" : "compute.googleapis.com/node-server-binding-type",
        "operator" : "IN",
        "values" : "restart-node-on-minimal-server"
      }]
    
  4. VM 인스턴스를 시작하고 어피니티 라벨 파일을 지정합니다. 예를 들어 다음 요청은 가져온 이미지를 사용하여 CPU 4개, 8GB의 메모리를 사용하는 VM을 us-east1-b 영역에 만듭니다. 또한 --restart-on-failure- 플래그 및 terminate 유지보수 정책을 설정합니다. 이 정책은 현재 사용자 라이선스를 사용하는 VM에 허용되는 유일한 정책입니다.

     gcloud compute instances create my-vm \
         --custom-cpu 4 --custom-memory 8 \
         --image my-imported-image \
         --zone us-east1-b \
         --node-affinity-file node-affinity-prod.json \
         --restart-on-failure --maintenance-policy terminate
    

API

  1. 노드 템플릿을 만들고 RESTART_NODE_ON_MINIMAL_SERVERS 속성을 설정합니다. 인스턴스의 노드 어피니티 라벨도 선택합니다. 예를 들면 다음과 같습니다.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
       "name": "[TEMPLATE_NAME]",
       "nodeType": "[NODE_TYPE]"
       "nodeAffinityLabels": {
          "[KEY]": "[VALUE]"
       },
       "serverBinding":
       {
         "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
       }
    }
    

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

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [TEMPLATE_NAME]은 새 노드 템플릿의 이름입니다.
    • [NODE_TYPE]은 이 템플릿에 사용하려는 노드 유형입니다. 예를 들어 n1-node-96-624 노드 유형을 지정하여 vCPU 96개와 624GB의 메모리를 사용하는 노드를 만들 수 있습니다.
    • [KEY]:[VALUE]는 쉼표로 구분된 어피니티 라벨 목록입니다.
    • [REGION]은 이 템플릿을 사용할 리전입니다.
  2. 노드 템플릿을 만든 후 노드 그룹을 만듭니다. compute.nodeGroups.insert 메서드를 사용합니다.

    POST https://compute.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]은 이 그룹을 만들 때 사용하려는 노드 템플릿의 이름입니다.
  3. 노드 그룹을 만들었으면 compute.instances.insert 메서드를 사용하여 노드 그룹 내에 인스턴스를 만들 수 있습니다. 노드 그룹 이름을 가리키는 nodeAffinities 항목을 지정합니다. 예를 들어 다음과 같이 커스텀 머신 유형으로 인스턴스를 만들 수 있습니다.

    POST https://compute.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-server-binding-type",
        "operator": "IN",
        "values": [
         "restart-node-on-minimal-server"
        ]
       }
      ]
     },
     "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 Engine 문서