사용자 클러스터를 만들 때는 모든 구성이 동일한 노드 그룹인 노드 풀을 하나 이상 구성해야 합니다. 클러스터를 만든 후 새 노드 풀을 추가하고 노드 풀 설정을 업데이트하고 노드 풀을 삭제할 수 있습니다.
노드 풀을 관리할 도구를 선택합니다.
노드 풀을 만들고, 업데이트하고, 삭제하는 방법은 클러스터가 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가 설치된 컴퓨터에서 다음을 수행합니다.
Google 계정으로 로그인합니다.
gcloud auth login
구성요소를 업데이트합니다.
gcloud components update
노드 풀 추가하기
GKE On-Prem API로 클러스터를 관리하는 경우 콘솔 또는 gcloud CLI를 사용하여 노드 풀을 추가할 수 있습니다. 하지만 다음 노드 풀 설정을 구성하려면 관리자 워크스테이션에서 gkectl
을 사용해야 합니다.
- OS 이미지 유형을 위한 Windows
- vSphere Datastore
vSphere 태그 노드 풀의 모든 VM에 태그를 연결하려면 vCenter 사용자 계정에 다음과 같은 vSphere 태그 권한이 있어야 합니다.
- vSphere Tagging.vSphere 태그 할당 또는 할당 해제
- vSphere Tagging.객체에 vSphere 태그 할당 또는 할당 해제 (vSphere 7)
다른 노드 풀을 추가하기 전에 클러스터에 사용 가능한 IP 주소가 충분한지 확인하세요.
gkectl
관리자 워크스테이션에서 다음을 수행합니다.
사용자 클러스터 구성 파일에서
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
다음 명령어를 실행합니다.
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
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.
노드 풀 추가를 클릭합니다.
노드 풀을 구성합니다.
- 노드 풀 이름을 입력합니다.
- 풀에 있는 각 노드의 vCPU 수를 입력합니다. 사용자 클러스터 작업자당 최소 4개입니다.
- 풀의 각 노드에 대한 메모리 크기를 메비바이트(MiB) 단위로 입력합니다(사용자 클러스터 워커 노드당 최소 8,192MiB이며 4의 배수여야 함).
- 노드 필드에 풀의 노드 수를 입력합니다(최솟값 3).
OS 이미지 유형(Ubuntu Containerd, COS)을 선택합니다.
부팅 디스크 크기를 기비바이트(GiB)로 입력합니다(기본값은 40GiB).
노드 풀 메타데이터(선택사항) 섹션에서 Kubernetes 라벨 및 taint를 추가하려면 다음 안내를 따르세요.
- + Kubernetes 라벨 추가를 클릭합니다. 라벨의 키 및 값을 입력합니다. 필요한 경우 반복합니다.
- + taint 추가를 클릭합니다. taint의 키, 값, 효과를 입력합니다. 필요한 경우 반복합니다.
만들기를 클릭합니다.
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)과 함께 사용됩니다. EFFECT에NoSchedule
,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 참조를 확인하세요.
노드 풀 업데이트
복제본 수를 늘리면 Google Distributed Cloud가 사용자 클러스터에 필요한 역할 수를 추가하고 복제본 수를 줄이면 노드가 삭제됩니다. 노드 풀의 복제본 수를 변경해도 워크로드는 중단되지 않습니다. 복제본 수를 늘릴 경우 IP 주소를 사용할 수 있는지 확인합니다.
노드 풀 필드를 업데이트하면 클러스터에서 순차적 업데이트가 트리거됩니다. 순차적 업데이트에서 Google Distributed Cloud는 새 노드를 만든 후 이전 노드를 삭제합니다. 이 프로세스는 모든 이전 노드가 새 노드로 바뀔 때까지 계속됩니다. 이 프로세스는 다운타임을 일으키지 않지만 업데이트 중 사용할 수 있는 추가 IP 주소가 클러스터에 있어야 합니다.
업데이트가 끝나면 노드 풀에 노드가 N개 있다고 가정합니다. 그러면 해당 풀의 노드에 사용할 수 있는 IP 주소가 N+1개 이상 있어야 합니다. 즉, 하나 이상의 풀에 노드를 추가하여 클러스터 크기를 조절할 경우 크기 조절이 끝났을 때 모든 클러스터의 총 노드 수보다 하나 이상 많은 IP 주소가 있어야 합니다. 자세한 내용은 사용 가능한 IP 주소가 충분한지 확인을 참조하세요.
사용자 클러스터에서 노드 풀을 업데이트하려면 다음 안내를 따르세요.
gkectl
사용자 클러스터 구성 파일의
nodePools
섹션에서 변경하려는 필드 값을 수정합니다.클러스터를 업데이트합니다.
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
을 사용합니다.
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭합니다.
수정할 노드 풀의 이름을 클릭합니다.
수정하려는 필드 옆에서
수정을 클릭하고 완료를 클릭합니다.을 클릭하여 이전 페이지로 돌아갑니다.
Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건 및 상태 메시지를 확인합니다.
gcloud CLI
필요한 경우 업데이트할 노드 풀의 이름을 가져오기 위해 노드 풀을 나열합니다.
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
다음 명령어를 실행하여 노드 풀을 업데이트합니다.
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
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭합니다.
보려는 노드 풀 이름을 클릭합니다.
gcloud CLI
다음 명령어를 실행합니다.
gcloud container vmware node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
노드 풀 삭제
노드 풀을 삭제할 수 있지만 사용자 클러스터에 노드 풀이 하나 이상 있어야 합니다. 노드 풀을 삭제하면 해당 노드의 워크로드 실행 여부에 관계없이 풀의 노드가 즉시 삭제됩니다.
사용자 클러스터에서 노드 풀을 삭제하려면 다음 안내를 따르세요.
gkectl
영향을 받는 노드에서 실행 중인 워크로드가 없는지 확인합니다.
사용자 클러스터 구성 파일의
nodePools
섹션에서 정의를 삭제합니다.클러스터를 업데이트합니다.
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
다음을 바꿉니다.
[ADMIN_CLUSTER_KUBECONFIG]
를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.[USER_CLUSTER_CONFIG]
는 사용자 클러스터 구성 파일의 경로입니다.
콘솔
영향을 받는 노드에서 실행 중인 워크로드가 없는지 확인합니다.
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭합니다.
삭제할 노드 풀의 이름을 클릭합니다.
삭제를 클릭합니다.
을 클릭하여 이전 페이지로 돌아갑니다.
Google Cloud console에 클러스터 상태: 진행 중인 변경사항이 표시됩니다. 세부정보 표시를 클릭하여 리소스 상태 조건 및 상태 메시지를 확인합니다.
gcloud CLI
필요한 경우 삭제할 노드 풀의 이름을 가져오기 위해 노드 풀을 나열합니다.
gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
다음 명령어를 실행하여 노드 풀을 삭제합니다.
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…
이후로 더 이상 진행하지 않습니다.사용자 클러스터에서 노드 풀을 만들거나 업데이트하는 데 시간이 걸릴 수 있습니다. 하지만 대기 시간이 매우 길어 문제가 있다고 의심되는 경우에는 다음 명령어를 실행하면 됩니다.
kubectl get nodes
를 실행하여 노드 상태를 가져옵니다.- 사용할 수 없는 노드에는
kubectl describe node NODE_NAME
을 실행하여 세부정보를 가져옵니다.