노드 풀 만들기 및 관리

사용자 클러스터를 만들 때는 모든 구성이 동일한 노드 그룹인 노드 풀을 하나 이상 구성해야 합니다. 클러스터를 만든 후 새 노드 풀을 추가하고 노드 풀 설정을 업데이트하고 노드 풀을 삭제할 수 있습니다.

노드 풀을 관리할 도구를 선택합니다.

노드 풀을 만들고, 업데이트하고, 삭제하는 방법은 클러스터가 GKE On-Prem API에서 관리되는지 여부에 따라 달라집니다. 다음 중 하나가 참인 경우 GKE On-Prem API로 사용자 클러스터를 관리합니다.

  • 클러스터가 Google Cloud 콘솔에서 또는 Google Cloud CLI(gcloud CLI)를 통해 생성되었고 GKE On-Prem API에서 클러스터를 관리하도록 자동으로 구성됨

  • 클러스터는 gkectl을 통해 생성되었지만 GKE On-Prem API에서 관리하도록 구성

GKE On-Prem API에서 사용자 클러스터를 관리하는 경우 콘솔이나 gcloud CLI를 사용해서 노드 풀을 관리할 수 있습니다. GKE On-Prem API에서 사용자 클러스터를 관리하지 않는 경우 관리자 워크스테이션에서 gkectl을 사용하여 노드 풀을 관리합니다.

gcloud CLI를 사용하려면 gcloud CLI가 설치된 컴퓨터에서 다음을 수행합니다.

  1. Google 계정으로 로그인합니다.

    gcloud auth login
    
  2. 구성요소를 업데이트합니다.

    gcloud components update
    

노드 풀 추가하기

GKE On-Prem API로 클러스터를 관리하는 경우 콘솔 또는 gcloud CLI를 사용하여 노드 풀을 추가할 수 있습니다. 하지만 다음 노드 풀 설정을 구성하려면 관리자 워크스테이션에서 gkectl을 사용해야 합니다.

다른 노드 풀을 추가하기 전에 클러스터에 사용 가능한 IP 주소가 충분한지 확인하세요.

gkectl

관리자 워크스테이션에서 다음을 수행합니다.

  1. 사용자 클러스터 구성 파일에서 nodePools 섹션을 채웁니다.

    다음 필드를 지정해야 합니다.

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    다음 필드는 선택사항입니다. nodePools[i].bootDiskSizeGB 또는 nodePools[i].osImageType을 포함하지 않으면 기본값이 사용됩니다.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. 다음 명령어를 실행합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

    • ADMIN_CLUSTER_KUBECONFIG를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

    • USER_CLUSTER_CONFIG을 사용자 클러스터 구성 파일의 경로로 바꿉니다.

구성 예시

다음 구성 예시에서는 속성이 서로 다른 노드 풀 4개가 있습니다.

  • pool-1: 최소 필수 속성만 지정됨
  • pool-2: vsphere.datastore, vsphere.tags 포함
  • pool-3: taints, labels 포함
  • pool-4: osImageType, bootDiskSizeGB 포함
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

Console

  1. Google Cloud 콘솔에서 Anthos 클러스터 페이지로 이동합니다.

    Anthos 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  4. 노드 풀 추가를 클릭합니다.

  5. 노드 풀을 구성합니다.

    1. 노드 풀 이름을 입력합니다.
    2. 풀에 있는 각 노드의 vCPU 수를 입력합니다. 사용자 클러스터 작업자당 최소 4개입니다.
    3. 풀의 각 노드에 대한 메모리 크기를 메비바이트(MiB) 단위로 입력합니다(사용자 클러스터 워커 노드당 최소 8,192MiB이며 4의 배수여야 함).
    4. 노드 필드에 풀의 노드 수를 입력합니다(최솟값 3).
    5. OS 이미지 유형(Ubuntu Containerd, COS)을 선택합니다.

    6. 부팅 디스크 크기를 기비바이트(GiB)로 입력합니다(기본값은 40GiB).

  6. 노드 풀 메타데이터(선택사항) 섹션에서 Kubernetes 라벨taint를 추가하려면 다음 안내를 따르세요.

    1. + Kubernetes 라벨 추가를 클릭합니다. 라벨의 을 입력합니다. 필요한 경우 반복합니다.
    2. + taint 추가를 클릭합니다. taint의 , , 효과를 입력합니다. 필요한 경우 반복합니다.
  7. 만들기를 클릭합니다.

  8. Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건상태 메시지를 확인합니다.

gcloud CLI

다음 명령어를 실행하여 노드 풀을 만듭니다.

gcloud container vmware node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME  \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --image-type=IMAGE_TYPE  \
  --boot-disk-size=BOOT_DISK_SIZE \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES

다음을 바꿉니다.

  • NODE_POOL_NAME: 노드 풀에 대해 선택한 이름입니다. 이름은 다음 조건을 충족해야 합니다.

    • 40자(영문 기준) 이하여야 합니다.
    • 소문자 영숫자 문자 또는 하이픈(-)만 포함해야 합니다.
    • 알파벳 문자로 시작해야 합니다.
    • 영숫자 문자로 끝나야 합니다.
  • USER_CLUSTER_NAME: 노드 풀이 생성될 사용자 클러스터의 이름입니다.

  • FLEET_HOST_PROJECT_ID: 클러스터가 등록된 프로젝트의 ID입니다.

    • LOCATION: 사용자 클러스터와 연결된 Google Cloud 위치입니다.

    • IMAGE_TYPE: 노드 풀의 VM에서 실행할 OS 이미지 유형입니다. ubuntu_containerd 또는 cos 중 하나로 설정합니다.

    • BOOT_DISK_SIZE: 풀에 있는 각 노드의 부팅 디스크 크기(GB)입니다. 최솟값은 40GiB입니다.

    • vCPUs: 노드 풀의 각 노드에 대한 vCPU 수입니다. 최솟값은 4입니다.

    • MEMORY: 풀의 각 노드에 대한 메모리 크기(MiB)입니다. 최솟값은 사용자 클러스터 워커 노드당 8,192MiB이고 값이 4의 배수여야 합니다.

    • NODES: 노드 풀의 노드 수입니다. 최솟값은 3입니다.

    예를 들면 다음과 같습니다.

    gcloud container vmware node-pools create default-pool \
      --cluster=user-cluster-1  \
      --location=us-west1 \
      --image-type=ubuntu_containerd  \
      --boot-disk-size=40 \
      --cpus=8 \
      --memory=8192 \
      --replicas=5
    

    선택적으로 다음을 지정할 수 있습니다.

    • --enable-load-balancer: MetalLB 부하 분산기에만 해당됩니다. 지정하면 풀의 노드에서 metalLB 스피커가 실행됩니다. MetalLB 부하 분산기에 노드 풀을 하나 이상 사용 설정해야 합니다.

    • --image=IMAGE: vCenter의 OS 이미지 이름입니다.

    • --node-labels=KEY=VALUE,...: 풀에서 각 노드에 적용된 쉼표로 구분된 Kubernetes 라벨(키-값 쌍) 목록입니다.

    • --node-taints=KEY=VALUE:EFFECT,... 풀의 각 노드에 적용되는 쉼표로 구분된 Kubernetes taint 목록입니다. Taint는 특정 효과와 연결된 키-값 쌍입니다. Taint는 포드 예약에 대한 톨러레이션(toleration)과 함께 사용됩니다. EFFECTNoSchedule, PreferNoSchedule, NoExecute 중 하나를 지정합니다.

    예를 들면 다음과 같습니다.

    gcloud container vmware node-pools create default-pool \
        --cluster=user-cluster-1  \
        --location=us-west1 \
        --image-type=ubuntu_containerd  \
        --boot-disk-size=40 \
        --cpus=8 \
        --memory=8192 \
        --replicas=5 \
        --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
    

    다른 선택적 플래그에 대한 자세한 내용은 gcloud 참조를 확인하세요.

노드 풀 업데이트

복제본 수를 늘리면 VMware용 GKE가 사용자 클러스터에 필요한 역할 수를 추가하고 복제본 수를 줄이면 노드가 삭제됩니다. 노드 풀의 복제본 수를 변경해도 워크로드는 중단되지 않습니다. 복제본 수를 늘릴 경우 IP 주소를 사용할 수 있는지 확인합니다.

노드 풀 필드를 업데이트하면 클러스터에서 순차적 업데이트가 트리거됩니다. 순차적 업데이트에서 VMware용 GKE는 새 노드를 만든 후 이전 노드를 삭제합니다. 이 프로세스는 모든 이전 노드가 새 노드로 바뀔 때까지 계속됩니다. 이 프로세스는 다운타임을 일으키지 않지만 업데이트 중 사용할 수 있는 추가 IP 주소가 클러스터에 있어야 합니다.

업데이트가 끝나면 노드 풀에 노드가 N개 있다고 가정합니다. 그러면 해당 풀의 노드에 사용할 수 있는 IP 주소가 N+1개 이상 있어야 합니다. 즉, 하나 이상의 풀에 노드를 추가하여 클러스터 크기를 조절할 경우 크기 조절이 끝났을 때 모든 클러스터의 총 노드 수보다 하나 이상 많은 IP 주소가 있어야 합니다. 자세한 내용은 사용 가능한 IP 주소가 충분한지 확인을 참조하세요.

사용자 클러스터에서 노드 풀을 업데이트하려면 다음 안내를 따르세요.

gkectl

  1. 사용자 클러스터 구성 파일의 nodePools 섹션에서 변경하려는 필드 값을 수정합니다.

  2. 클러스터를 업데이트합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

    • ADMIN_CLUSTER_KUBECONFIG를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

    • USER_CLUSTER_CONFIG을 사용자 클러스터 구성 파일의 경로로 바꿉니다.

노드 풀에 사용되는 osImageType 업데이트

다른 osImageType을 사용하도록 노드 풀을 업데이트하려면 명령줄을 사용해야 합니다. 노드 풀에 사용되는 osImageType을 변경하려면 다음 예시에 표시된 것처럼 노드 풀에 대해 구성 파일을 업데이트하고 gkectl update cluster를 실행합니다.

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

콘솔

콘솔에서는 다음 필드만 업데이트할 수 있습니다.

  • 복제본 수
  • 메모리
  • vCPU 수

다른 필드를 업데이트하려면 gcloud CLI 또는 gkectl을 사용합니다.

  1. Google Cloud 콘솔에서 Anthos 클러스터 페이지로 이동합니다.

    Anthos 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  4. 노드 탭을 클릭합니다.

  5. 수정할 노드 풀의 이름을 클릭합니다.

  6. 수정하려는 필드 옆에서 수정을 클릭하고 완료를 클릭합니다.

  7. 을 클릭하여 이전 페이지로 돌아갑니다.

  8. Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건상태 메시지를 확인합니다.

gcloud CLI

  1. 필요한 경우 업데이트할 노드 풀의 이름을 가져오기 위해 노드 풀을 나열합니다.

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. 다음 명령어를 실행하여 노드 풀을 업데이트합니다.

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --ATTRIBUTE_TO_UPDATE \
      ...
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 업데이트할 노드 풀의 이름

    • USER_CLUSTER_NAME: 노드 풀이 포함된 사용자 클러스터의 이름

    • LOCATION: 사용자 클러스터와 연결된 Google Cloud 위치

    • ATTRIBUTE_TO_UPDATE: 노드 풀 속성을 업데이트하는 하나 이상의 플래그. 예를 들어 풀의 vCPU 및 노드 수를 변경하려면 다음 명령어를 실행합니다.

    gcloud container vmware node-pools update default-pool \
        --cluster=user-cluster-1  \
        --project=example-project-12345
        --location=us-west1 \
        --cpus=10 \
        --replicas=6
    

    업데이트할 수 있는 노드 풀 속성에 대한 자세한 내용은 gcloud 참조를 확인하세요.

변경사항 확인

노드 풀이 의도한 대로 생성되었거나 업데이트되었는지 확인하려면 클러스터 노드를 검사합니다.

gkectl

다음 명령어를 실행합니다.

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

변경사항을 되돌려야 한다면 클러스터 구성 파일을 수정하고 gkectl update cluster를 실행합니다.

Console

  1. Google Cloud 콘솔에서 Anthos 클러스터 페이지로 이동합니다.

    Anthos 클러스터로 이동

  2. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  3. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  4. 노드 탭을 클릭합니다.

  5. 보려는 노드 풀 이름을 클릭합니다.

gcloud CLI

다음 명령어를 실행합니다.

gcloud container vmware node-pools describe NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

노드 풀 삭제

노드 풀을 삭제할 수 있지만 사용자 클러스터에 노드 풀이 하나 이상 있어야 합니다. 노드 풀을 삭제하면 해당 노드의 워크로드 실행 여부에 관계없이 풀의 노드가 즉시 삭제됩니다.

사용자 클러스터에서 노드 풀을 삭제하려면 다음 안내를 따르세요.

gkectl

  1. 영향을 받는 노드에서 실행 중인 워크로드가 없는지 확인합니다.

  2. 사용자 클러스터 구성 파일의 nodePools 섹션에서 정의를 삭제합니다.

  3. 클러스터를 업데이트합니다.

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

    • [ADMIN_CLUSTER_KUBECONFIG]를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.

    • [USER_CLUSTER_CONFIG]는 사용자 클러스터 구성 파일의 경로입니다.

콘솔

  1. 영향을 받는 노드에서 실행 중인 워크로드가 없는지 확인합니다.

  2. Google Cloud 콘솔에서 Anthos 클러스터 페이지로 이동합니다.

    Anthos 클러스터로 이동

  3. 사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.

  4. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.

  5. 노드 탭을 클릭합니다.

  6. 삭제할 노드 풀의 이름을 클릭합니다.

  7. 삭제를 클릭합니다.

  8. 을 클릭하여 이전 페이지로 돌아갑니다.

  9. Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건상태 메시지를 확인합니다.

gcloud CLI

  1. 필요한 경우 삭제할 노드 풀의 이름을 가져오기 위해 노드 풀을 나열합니다.

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. 다음 명령어를 실행하여 노드 풀을 삭제합니다.

    gcloud container vmware node-pools delete NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 삭제할 노드 풀의 이름

    • USER_CLUSTER_NAME: 노드 풀이 포함된 사용자 클러스터의 이름

    • LOCATION: 사용자 클러스터와 연결된 Google Cloud 위치

문제 해결

  • 일반적으로 gkectl update cluster 명령어는 실패 시 세부정보를 제공합니다. 명령어가 성공했지만 노드가 표시되지 않으면 클러스터 문제 진단 가이드를 따라 문제를 해결할 수 있습니다.

  • 노드 풀 생성 또는 업데이트 중에 사용 가능한 IP 주소 부족과 같이 클러스터 리소스가 부족하면 발생할 수 있습니다. IP 주소를 사용할 수 있는지 확인하는 방법에 대한 자세한 내용은 사용자 클러스터 크기 조절 주제를 참조하세요.

  • 일반 문제 해결 가이드를 검토할 수도 있습니다.

  • Creating node MachineDeployment(s) in user cluster… 이후로 더 이상 진행하지 않습니다.

    사용자 클러스터에서 노드 풀을 만들거나 업데이트하는 데 시간이 걸릴 수 있습니다. 하지만 대기 시간이 매우 길어 문제가 있다고 의심되는 경우에는 다음 명령어를 실행하면 됩니다.

    1. kubectl get nodes를 실행하여 노드 상태를 가져옵니다.
    2. 사용할 수 없는 노드에는 kubectl describe node NODE_NAME을 실행하여 세부정보를 가져옵니다.