단독 테넌트 노드를 사용하여 GKE 워크로드 격리


이 페이지에서는 Google Kubernetes Engine(GKE) Standard 클러스터에서 실행되는 워크로드를 특정 프로젝트의 VM만 실행하는 전용 물리적 서버인 Compute Engine 단독 테넌트 노드를 사용하여 격리하는 방법을 보여줍니다. 단독 테넌트 노드를 사용하면 VM을 다른 프로젝트의 VM과 물리적으로 분리하거나 동일한 호스트 하드웨어에 있는 VM을 그룹화할 수 있습니다.

이 기능은 GKE Autopilot에서 지원되지 않습니다. Autopilot 보안 경계에 대한 자세한 내용은 Autopilot의 보안 경계를 참조하세요.

GKE에서 단독 테넌트 노드를 사용하려면 Compute Engine에 단독 테넌트 노드 그룹을 만들고 이 노드 그룹을 사용하여 GKE 노드 풀을 만듭니다. GKE 클러스터 프로젝트의 단독 테넌트 노드를 사용하거나 조직 내 프로젝트 간 리소스를 사용하는 공유 단독 테넌트 노드를 사용하여 노드 풀을 만들 수 있습니다. 예를 들어 조직에서 단독 테넌트 노드 그룹을 만들 수 있는 소유자 프로젝트와 소유자 프로젝트의 노드 그룹을 사용하는 노드 풀이 있는 클러스터를 갖춘 소비자 프로젝트를 지정할 수 있습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

추가 할당량 요청

단독 테넌트 노드는 용량이 크고(예: vCPU 96개 및 624GB 메모리) 기본 프로젝트 할당량이 너무 낮아 처리할 수 없습니다.

단독 테넌트 노드를 만들려면 할당량 페이지에서 Compute Engine API CPU의 할당량 증가를 요청해야 합니다. 증가 요청에 대한 자세한 내용은 할당량을 참조하세요.

필요한 CPU 수는 다음 사항에 따라 다릅니다.

  • 현재 CPU 할당량 사용량
  • 노드 그룹의 크기
  • 노드 템플릿

단독 테넌트 노드 유형의 코어 수를 검토하고 최소 해당 수만큼 CPU 한도를 요청합니다. 프로젝트가 적절한 용량을 확보하기 위해 여유분으로 10개의 추가 CPU가 있는 것이 좋습니다.

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

단독 테넌트 노드 템플릿은 노드 그룹을 만들 때 모든 노드에 속성을 정의하고 적용하는 리전별 리소스입니다. 자세한 내용은 노드 유형을 참조하세요.

공유 단독 테넌트 노드를 사용하는 경우 클러스터의 소비자 프로젝트가 아닌 소유자 프로젝트에서 노드 그룹에 다음 안내를 완료해야 합니다.

콘솔

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

    단독 테넌트 노드로 이동

  2. 노드 템플릿 만들기를 클릭합니다.

  3. 노드 템플릿의 이름리전을 지정합니다.

  4. 노드 유형을 선택합니다.

  5. 필요한 경우 하나 이상의 노드 어피니티 라벨을 추가합니다.

  6. 만들기를 클릭하여 노드 템플릿을 만듭니다.

gcloud

gcloud compute sole-tenancy node-templates create 명령어를 사용하여 노드 템플릿을 만듭니다.

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type=NODE_TYPE \
    --node-affinity-labels=AFFINITY_LABELS \
    --region=COMPUTE_REGION

다음을 바꿉니다.

  • TEMPLATE_NAME: 새 노드 템플릿의 이름입니다.
  • NODE_TYPE: 이 템플릿을 기반으로 만든 단독 테넌트 노드의 노드 유형입니다. 각 영역에서 사용할 수 있는 노드 유형 목록을 가져오려면 gcloud compute sole-tenancy node-types list 명령어를 사용합니다.
  • AFFINITY_LABELS: 어피니티 라벨 의 키와 값([KEY=VALUE,...])입니다. 어피니티 라벨을 사용하면 노드와 노드 그룹이 논리적으로 그룹화될 수 있으며 나중에 VM을 프로비저닝할 때 VM에 어피니티 라벨을 지정하여 특정 노드 또는 노드 그룹에 VM을 예약할 수 있습니다. 자세한 내용은 노드 어피니티 및 안티어피니티를 참조하세요.
  • COMPUTE_REGION: 노드 템플릿을 만들 리전입니다. 이 템플릿을 사용해 이 리전의 모든 영역에 노드 그룹을 만들 수 있습니다.

출력은 다음과 비슷합니다.

Created [https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/nodeTemplates/template-name].

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

노드 그룹은 동일한 단독 테넌트 노드 템플릿의 특정 영역에 있는 단독 테넌트 노드 집합입니다. 여러 영역에서 사용 가능한 리전 클러스터와 노드 풀의 경우 각 영역에 같은 이름의 노드 그룹을 만들어야 합니다. 이 단계를 완료하기 전에 할당량이 충분한지 확인하세요.

공유 단독 테넌트 노드를 사용하는 경우 클러스터의 소비자 프로젝트가 아닌 소유자 프로젝트에서 노드 그룹에 다음 안내를 완료해야 합니다.

콘솔

단독 테넌트 노드 그룹을 만들려면 다음 안내를 따르세요.

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

    단독 테넌트 노드로 이동

  2. 노드 그룹 만들기를 클릭합니다.

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

  4. 노드 템플릿을 만든 동일한 리전을 선택하고 해당 리전영역을 선택합니다.

  5. 노드 템플릿을 선택합니다.

  6. 필요한 경우 자동 확장 모드를 사용 설정합니다.

  7. 그룹에 원하는 노드 수를 지정합니다.

  8. 필요한 경우 유지보수 정책을 변경합니다.

  9. 필요한 경우 단독 테넌트 노드 그룹을 공유하려면 공유 설정 구성 섹션에서 다음 중 하나를 지정하여 공유 설정을 구성합니다.

    • 이 노드 그룹을 조직 내의 모든 프로젝트와 공유
    • 이 노드 그룹을 조직 내에서 선택한 프로젝트와 공유
  10. 만들기를 클릭하여 노드 그룹을 만듭니다.

gcloud

템플릿에서 노드 그룹을 만듭니다.

gcloud compute sole-tenancy node-groups create GROUP_NAME \
    --zone COMPUTE_ZONE \
    --node-template TEMPLATE_NAME --target-size TARGET_SIZE \
    --share-settings=SHARE_SETTING \
    --share-with=PROJECTS

다음을 바꿉니다.

  • GROUP_NAME: 새 노드 그룹에 사용할 이름입니다.
  • COMPUTE_ZONE: 이 노드 그룹이 위치한 영역입니다. 이 영역은 사용하고 있는 노드 템플릿과 같은 리전에 있어야 합니다.
  • TEMPLATE_NAME: 사용 중인 노드 템플릿의 이름입니다.
  • TARGET_SIZE: 그룹에서 만들 노드 수입니다.
  • SHARE_SETTING: 노드 그룹의 공유 설정입니다. 특정 프로젝트와 공유하려면 projects로 설정하고 전체 조직과 공유하려면 organization으로 설정합니다.
  • PROJECTS: 노드 그룹을 공유할 프로젝트 ID 또는 프로젝트 번호의 목록입니다. SHARE_SETTINGprojects로 설정한 경우에만 필요합니다.

GKE 단독 테넌트 노드 풀 만들기

Compute Engine에 단독 테넌트 노드 그룹을 만들었으므로 이제 단독 테넌트 노드 풀을 만들 수 있습니다.

GKE 클러스터가 이미 있으면 단독 테넌트 노드 풀을 해당 GKE 클러스터에 추가할 수 있습니다. 그렇지 않으면 gcloud container clusters create를 사용하여 클러스터를 만듭니다.

리전 클러스터를 사용하거나 노드 풀이 여러 영역에서 제공되는 경우 각 영역에 같은 이름의 노드 그룹을 만들어야 합니다. 각 영역에서 이름을 다시 사용할 수 없는 경우 영역별로 별도의 노드 풀을 만듭니다.

클러스터 프로젝트에서 단독 테넌트 노드 그룹이 포함된 노드 풀 만들기

클러스터 프로젝트의 노드 그룹을 사용하여 노드 풀을 만들려면 단독 테넌시 노드 그룹의 이름을 전달합니다. 공유 단독 테넌트 노드 그룹 또는 단독 테넌트 노드 템플릿을 생성했을 때 구성한 커스텀 노드 어피니티 라벨을 사용하려는 경우 노드 어피니티 파일을 사용하여 공유 단독 테넌트 노드로 노드 풀 만들기의 안내를 참조하세요.

지정된 노드 그룹을 사용하여 새 노드 풀을 만듭니다.

영역 노드 풀의 경우

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --zone COMPUTE_ZONE --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE

리전 노드 풀의 경우

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --region COMPUTE_REGION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1,COMPUTE_ZONE2

다음을 바꿉니다.

  • NODE_POOL_NAME: 새 노드 풀의 이름입니다.
  • GROUP_NAME: 사용하려는 기존 단독 테넌시 노드 그룹의 이름입니다.
  • CLUSTER_NAME: 노드 풀을 만들려는 클러스터의 이름입니다.
  • COMPUTE_REGION: 클러스터와 동일한 리전입니다.
  • MACHINE_TYPE: 노드 풀 머신 유형입니다.
  • COMPUTE_ZONE1, COMPUTE_ZONE2,[...]: 단독 테넌시 노드 그룹의 영역입니다.

지정할 수 있는 선택적 플래그의 전체 목록은 gcloud container node-pools create 문서를 참조하세요.

노드 어피니티 파일을 사용하여 공유 단독 테넌트 노드로 노드 풀 만들기

공유 단독 테넌트 노드 그룹을 사용하여 노드 풀을 만들려면 노드 어피니티 라벨을 사용해야 합니다. 또한 노드 어피니티를 사용하여 동일한 프로젝트에서 노드 그룹을 선택할 수 있습니다.

라벨을 참조하려면 안내에 따라 --node-group 플래그를 --sole-tenant-node-affinity-file 플래그로 바꿔 노드 풀을 만듭니다. 해당 라벨이 있는 JSON 파일을 전달합니다. 예를 들어 다음 명령어를 참조하세요.

  gcloud container node-pools create sole-tenant-node-pool \
      --sole-tenant-node-affinity-file /path/to/affinity/file --cluster my-cluster \
      --region us-central1 --machine-type n1-standard-4  \
      --node-locations=us-central1-a,us-central1-b,us-central1-c

다음 섹션에서는 단독 테넌트 노드를 사용하는 노드 어피니티 라벨의 사용 사례를 설명합니다.

프로젝트의 노드 그룹 이름 지정

특정 프로젝트 및 노드 그룹 이름의 단독 테넌트 노드 그룹을 사용하려면 노드 어피니티 파일에 이러한 값을 지정합니다. 각 영역의 노드 그룹 이름이 일치해야 하는 멀티 영역 노드 풀을 만드는 경우 이 어피니티를 사용할 수 있습니다. 지정된 소유자 프로젝트의 노드 그룹을 사용하려면 JSON 파일에서 compute-googleapis.com/node-group-name 블록 전체를 생략합니다.

아래 예시를 참조하세요.

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "compute.googleapis.com/node-group-name",
    "operator" : "IN",
    "values" : ["GROUP_NAME"]
  },
]

커스텀 라벨 지정

노드 어피니티 및 안티-어피니티를 사용하여 커스텀 라벨이 있는 노드 그룹을 사용하여 노드 풀을 만들 수도 있습니다. 각 노드 그룹에는 기본 어피니티 라벨이 자동으로 할당됩니다. 이전 예시와 같이 기본 라벨을 참조하거나 노드 템플릿을 만들 때 지정된 커스텀 라벨을 사용할 수 있습니다. 커스텀 라벨을 사용하여 워크로드를 격리하거나 그룹화할 수 있습니다.

아래 예시를 참조하세요.

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
  },
]

제한사항

단독 테넌트 노드로 노드 풀을 만들 때는 단독 테넌트 노드 그룹의 기본 용량을 관리해야 합니다. 다음 기능이 단독 테넌트 노드 그룹과 상호작용하는 방식을 고려합니다.

  • 클러스터 자동 확장을 사용 설정할 수 있지만, 기본 노드 그룹의 용량으로 제한됩니다. Compute Engine에서 노드 그룹 자동 확장 처리를 구성하여 단독 테넌트 노드 그룹의 크기를 자동으로 관리할 수 있습니다.
  • 단독 테넌트 노드를 사용하는 경우 클러스터에 노드 자동 프로비저닝을 사용 설정할 수 없습니다.
  • 모든 노드 업그레이드 전략을 사용할 수 있지만 선택한 업그레이드 전략을 사용하여 노드 풀을 지원할 용량이 충분히 있는지 확인해야 합니다.

다음 단계