노드 풀 만들기 및 관리

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

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

  • 클러스터는 Anthos On-Prem API가 클러스터를 관리하도록 자동으로 구성하는 Google Cloud 콘솔에서 생성되었습니다.

  • gkectl enroll cluster 명령어는 Anthos On-Prem API에서 관리하도록 구성되는 사용자 클러스터에서 실행되었습니다.

Anthos On-Prem API가 사용자 클러스터를 관리하는 경우 Google Cloud 콘솔을 사용하여 노드 풀을 관리할 수 있습니다. 사용자 클러스터가 Anthos On-Prem API로 관리되지 않는 경우에는 관리자 워크스테이션의 명령줄에서 gkectl을 사용하여 노드 풀을 관리합니다.

노드 풀 추가하기

Google Cloud 콘솔에서 클러스터를 만든 경우 Google Cloud 콘솔을 사용하여 노드 풀을 추가할 수 있습니다. 그러나 명령줄을 사용하여 다음 노드 풀 설정을 구성해야 합니다.

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

콘솔

  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, Ubuntu, COS)을 선택합니다.

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

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

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

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

명령줄

  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

노드 풀 업데이트

명령줄을 사용하여 사용자 클러스터 구성 파일의 nodePools 섹션에서 모든 필드를 업데이트할 수 있습니다. 현재까지 Google Cloud 콘솔을 사용하여 업데이트할 수 있는 유일한 노드 풀 필드는 다음과 같습니다.

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

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

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

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

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

콘솔

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

    Anthos 클러스터 페이지로 이동

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

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

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

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

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

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

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

명령줄

  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

변경사항 확인

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

콘솔

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

    Anthos 클러스터 페이지로 이동

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

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

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

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

명령줄

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

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

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

노드 풀 삭제

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

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

콘솔

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

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

    Anthos 클러스터 페이지로 이동

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

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

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

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

  7. 삭제를 클릭합니다.

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

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

명령줄

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

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

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    다음을 바꿉니다.

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

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

문제 해결

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

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

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

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

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

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