노드 풀 만들기 및 관리

사용자 클러스터에서는 클러스터 구성 파일nodePools 섹션을 채워서 모두 동일한 구성을 가진 노드 그룹을 만들 수 있습니다. 그러면 클러스터의 다른 노드에 영향을 주지 않고 노드 풀을 관리할 수 있습니다. 노드 풀에 대해 자세히 알아보기

다른 osImageType을 갖도록 노드 풀을 업데이트할 수도 있습니다.

시작하기 전에

노드 풀을 삭제하면 해당 노드의 워크로드 실행 여부에 관계없이 풀의 노드가 즉시 삭제됩니다.

워크로드를 방해하지 않고 nodePool 섹션의 replicas 필드를 업데이트할 수 있습니다. 그러나 다른 필드를 업데이트하면 풀의 노드가 삭제되고 다시 생성됩니다.

노드 풀의 모든 VM에 태그를 연결하려면 vCenter 사용자 계정에 다음과 같은 vSphere 태그 권한이 있어야 합니다.

  • vSphere Tagging.vSphere 태그 할당 또는 할당 해제
  • vSphere Tagging.객체에 vSphere 태그 할당 또는 할당 해제 (vSphere 7)

nodePool 섹션을 업데이트하면 Anthos clusters on VMware가 새 노드를 만든 후 이전 노드를 삭제합니다. 이때 모든 이전 노드가 새 노드로 대체될 때까지 이 프로세스를 반복합니다. 즉, 이 클러스터는 업데이트 중에 사용할 수 있는 추가 IP 주소가 있어야 합니다.

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

클러스터 구성 파일의 nodePools 섹션 채우기

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

각 노드 풀에 대해 다음 필드를 지정해야 합니다.

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

다음 필드는 선택사항입니다.

  • nodePools[i].labels
  • nodePools[i].taints
  • nodePools[i].bootDiskSizeGB
  • nodePools[i].osImageType
  • nodePools[i].vsphere.datastore
  • nodePools[i].vsphere.tags

새 클러스터에서 노드 풀 만들기

사용자 클러스터 구성 파일에서 nodePools 섹션을 입력한 후 클러스터를 만듭니다.

gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

다음을 바꿉니다.

  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터의 kubeconfig 파일

  • USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일

기존 클러스터의 노드 풀 업데이트

사용자 클러스터 구성 파일에서 nodePools 섹션을 수정한 후 클러스터를 업데이트합니다.

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

변경사항 확인

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

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes --output wide

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

노드 풀 삭제

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

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

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

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config 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

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

다른 osImageType을 사용하도록 노드 풀을 업데이트할 수 있습니다. 다음 예시에 표시된 것처럼 노드 풀에 대해 구성 파일을 업데이트하고 gkectl update cluster를 실행합니다.

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

문제 해결

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

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

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

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

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

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