노드 풀은 클러스터 내에서 구성이 모두 동일한 노드 그룹입니다. 클러스터의 모든 노드는 노드 풀에 속해야 합니다. 베어메탈용 GKE 클러스터에는 제어 영역, 부하 분산기, 워커 노드 풀과 같은 3가지 종류의 노드 풀이 있습니다.
이 페이지에서는 워커 노드 풀의 상태를 확인하고 업데이트를 추가하고 워커 노드 풀을 삭제하는 방법을 설명합니다.
노드 풀을 관리할 도구를 선택합니다.
노드 풀 관리 방법은 클러스터 유형과 사용자 클러스터에 따라, GKE On-Prem API에서 클러스터를 관리하는지 여부에 따라 달라집니다. 다음 중 하나가 참이면 GKE On-Prem API에서 사용자 클러스터를 관리합니다.
클러스터가 Google Cloud 콘솔에서 또는 Google Cloud CLI(gcloud CLI)를 통해 생성되었고 GKE On-Prem API에서 클러스터를 관리하도록 자동으로 구성됨
클러스터는
bmctl
을 통해 생성되었지만 GKE On-Prem API에서 관리하도록 구성됨
GKE On-Prem API에서 사용자 클러스터를 관리하는 경우 콘솔이나 gcloud CLI를 사용해서 노드 풀을 관리할 수 있습니다. GKE On-Prem API에서 사용자 클러스터를 관리하지 않는 경우 관리자 워크스테이션에서 kubectl
을 사용하여 노드 풀을 관리합니다. 또한 kubectl
을 사용하여 워커 노드 풀을 포함할 수 있는 모든 클러스터 유형(하이브리드, 독립 실행형, 사용자 클러스터)에 대해 노드 풀을 관리합니다.
gcloud CLI를 사용하려면 gcloud CLI가 설치된 컴퓨터에서 다음을 수행합니다.
Google 계정으로 로그인하십시오.
gcloud auth login
구성요소를 업데이트합니다.
gcloud components update
노드 상태 확인
노드 풀을 추가하거나 삭제하기 전에 노드 및 해당 노드 풀의 상태를 확인하세요.
kubectl
kubectl
을 사용하면 특정 네임스페이스 또는 전체 클러스터에서 노드 상태를 얻을 수 있습니다. 다음 예시는 클러스터 네임스페이스 cluster-abm-cluster
의 노드 풀 상태를 보여줍니다.
kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster
시스템에서 다음과 비슷한 결과를 반환합니다.
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
abm-cluster 3 0 0 0 0
default-pool 2 0 0 0 0
backup-pool 3 0 0 0 0
테이블의 각 열은 노드에 가능한 서로 다른 상태를 나타냅니다. 테이블의 각 행은 각 노드 상태에서 노드 풀당 노드 수입니다.
노드를 추가할 때는 노드가 프로비저닝되는 동안 처음에 Reconciling
상태로 지정됩니다. 노드가 클러스터에 포함된 다음에는 노드 상태가 Ready
로 변경됩니다.
또한 다음 명령어를 실행하여 클러스터에서 노드 상태를 확인할 수도 있습니다.
kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG
Console
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 더보기 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭합니다.
노드 풀 목록이 표시됩니다.
gcloud CLI
클러스터의 노드 풀을 나열합니다.
gcloud container bare-metal node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
다음을 바꿉니다.
USER_CLUSTER_NAME
: 노드 풀이 포함된 사용자 클러스터의 이름입니다.FLEET_HOST_PROJECT_ID
: 클러스터가 생성된 프로젝트의 ID입니다.LOCATION
: 사용자 클러스터와 연결된 Google Cloud 위치입니다.
노드 풀을 기술합니다.
gcloud container bare-metal node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
NODE_POOL_NAME
을 노드 풀의 이름으로 바꿉니다.
클러스터 진단 방법에 대한 자세한 내용은 클러스터 진단을 위한 스냅샷 만들기를 참조하세요.
새 노드 풀 추가
kubectl
클러스터에 노드 풀을 추가할 때 다음 규칙에 유의하세요.
관리자 클러스터에는 부하 분산기 노드 풀과 제어 영역 노드 풀이 포함될 수 있지만 워커 노드 풀이 포함될 수 없습니다. 관리자 클러스터에 워커 노드 풀을 추가하려고 하면 오류가 발생합니다.
클러스터는 단일 제어 영역 노드 풀과 단일 부하 분산기 노드 풀만 포함할 수 있습니다. 클러스터에 제어 영역을 추가하거나 부하 분산 노드 풀을 추가할 수 없습니다.
클러스터에 새 nodepools.baremetal.cluster.gke.io
리소스를 만들어 클러스터에 새 노드 풀을 추가합니다. 다음 예시에서는 'machine-learning-pool'이라는 새 노드 풀이 매니페스트에 추가됩니다. 새 노드 풀은 IP 주소가 10.200.0.7
및 10.200.0.8
인 2개의 노드로 구성됩니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: machine-learning-pool
namespace: cluster-abm-cluster
spec:
clusterName: abm-cluster
nodes:
- address: 10.200.0.7
- address: 10.200.0.8
taints:
- key: TAINT_KEY
value: TAINT_VALUE
effect: NoSchedule
labels:
key1: LABEL_1
key2: LABEL_2
구성을 machine-learning-pool.yaml
이라는 파일에 저장하고 다음 명령어를 사용하여 구성을 클러스터에 적용합니다.
kubectl apply -f machine-learning-pool.yaml
클러스터에 노드 풀을 추가할 때 고려해야 할 사항은 다음과 같습니다.
NodePool.spec.taints
및NodePool.spec.labels
구성이 노드에 맞게 조정됩니다. 노드에 직접 추가된 모든 taint 및 라벨이 삭제됩니다. 제어 영역은 동기화 프로세스 중에 직접 추가한 taint 및 라벨을 삭제하지 않습니다. 이 조정 단계를 무시하려면baremetal.cluster.gke.io/label-taint-no-sync
를 사용해 노드에 주석을 추가하면 됩니다.노드 풀 리소스는 연결된 클러스터와 동일한 네임스페이스에 만들어야 하며 노드 풀 리소스는
spec.clusterName
필드의 클러스터 이름을 참조해야 합니다.
Console
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 더보기 패널에서 세부정보 보기를 클릭합니다.
노드 풀 추가를 클릭합니다.
노드 풀에 이름을 입력합니다.
노드 주소 1 필드에 워커 노드 머신의 IP 주소를 입력합니다.
추가할 워커 노드 머신이 1개 넘게 있으면
주소 추가를 클릭합니다.선택적으로 Kubernetes 라벨 또는 Kubernetes taint를 추가합니다.
만들기를 클릭합니다.
노드 풀의 상태가 노드 탭에 표시됩니다. 업데이트된 상태를 보려면 페이지를 새로고침해야 할 수 있습니다.
gcloud CLI
gcloud container bare-metal node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --node-configs-from-file=NODE_POOL_CONFIG
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀에 대해 선택한 이름입니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
USER_CLUSTER_NAME
: 사용자 클러스터의 이름입니다.FLEET_HOST_PROJECT_ID
: 클러스터가 생성된 프로젝트의 ID입니다.LOCATION
: 클러스터를 만들 때 지정한 Google Cloud 위치입니다.NODE_POOL_CONFIG
: 노드 풀을 설명하는 구성 파일의 경로입니다. 예를 들면 다음과 같습니다.nodeConfigs: - nodeIP: 10.200.0.10 labels: key1: value1 key2: value2 - nodeIP: 10.200.0.11 labels: key3: value3 key4: value4
선택적으로 다음을 지정할 수 있습니다.
--node-labels=KEY=VALUE,...
: 풀에서 각 노드에 적용된 쉼표로 구분된 Kubernetes 라벨(키-값 쌍) 목록입니다.--node-taints=KEY=VALUE:EFFECT,...
Kubernetes taint의 쉼표로 구분된 목록
풀의 각 노드에 적용됩니다. Taint는 특정 효과와 연결된 키-값 쌍입니다. Taint는 포드 예약에 대한 톨러레이션(toleration)과 함께 사용됩니다. EFFECT
에 NoSchedule
, PreferNoSchedule
, NoExecute
중 하나를 지정합니다.
--validate-only
업데이트를 검증하지만 항목을 변경하지 않으려는 경우에 이 플래그를 지정합니다.
노드 풀 업데이트
kubectl
클러스터에서 nodepools.baremetal.cluster.gke.io
리소스를 수정하여 노드 풀을 업데이트합니다. kubectl edit
를 사용하여 리소스를 직접 업데이트하거나 YAML 파일을 업데이트하고 kubectl apply
를 사용할 수 있습니다.
Console
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 더보기 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭합니다.
목록에서 업데이트할 노드 풀을 클릭합니다.
노드 풀 세부정보 페이지에서
수정을 클릭합니다.필요에 따라 설정을 변경하고 저장을 클릭합니다.
gcloud CLI
필요에 따라 업데이트하려는 노드 풀 이름을 가져오기 위해 클러스터의 노드 풀을 나열합니다.
gcloud container bare-metal node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
다음을 바꿉니다.
USER_CLUSTER_NAME
: 노드 풀이 포함된 사용자 클러스터의 이름입니다.FLEET_HOST_PROJECT_ID
: 클러스터가 생성된 프로젝트의 ID입니다.LOCATION
: 사용자 클러스터와 연결된 Google Cloud 위치입니다.
다음 명령어를 실행합니다.
gcloud container bare-metal node-pools update NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --node-configs-from-file=NODE_CONFIG_FILE
다음을 바꿉니다.
NODE_POOL_NAME
을 노드 풀의 이름으로 바꿉니다.NODE_CONFIG_FILE
: 노드 풀을 설명하는 구성 파일의 경로입니다. 예를 들면 다음과 같습니다.
nodeConfigs: - nodeIP: 10.200.0.10 labels: key1: value1 - nodeIP: 10.200.0.11
선택적으로 다음을 지정할 수 있습니다.
--node-labels=KEY=VALUE,...
: 풀에서 각 노드에 적용된 쉼표로 구분된 Kubernetes 라벨(키-값 쌍) 목록입니다.--node-taints=KEY=VALUE:EFFECT,...
풀의 각 노드에 적용되는 쉼표로 구분된 Kubernetes taint 목록입니다. Taint는 특정 효과와 연결된 키-값 쌍입니다. Taint는 포드 예약에 대한 톨러레이션(toleration)과 함께 사용됩니다. EFFECT에NoSchedule
,PreferNoSchedule
,NoExecute
중 하나를 지정합니다.--validate-only
업데이트를 검증하지만 항목을 변경하지 않으려는 경우에 이 플래그를 지정합니다.
예를 들면 다음과 같습니다.
gcloud container bare-metal node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --node-configs-from-file=node-pool-config.yaml \ --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
노드 풀 삭제
kubectl
kubectl delete
을 사용하여 노드 풀을 삭제합니다. 예를 들어 이전 섹션 machine-learning-pool
에서 추가된 노드 풀을 삭제하려면 다음 명령어를 사용합니다.
kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster
제어 영역 노드 풀과 부하 분산기 노드 풀은 클러스터 기능에 중요하므로 클러스터에서 삭제할 수 없습니다.
Console
콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.
사용자 클러스터가 있는 Google Cloud 프로젝트를 선택합니다.
클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 더보기 패널에서 세부정보 보기를 클릭합니다.
노드 탭을 클릭한 후 삭제하려는 노드 풀을 클릭합니다.
삭제를 클릭합니다.
확인 대화상자에서 노드 풀 이름을 입력하고 확인을 클릭합니다.
gcloud CLI
gcloud container bare-metal node-pools delete NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
다음을 바꿉니다.
NODE_POOL_NAME
을 노드 풀의 이름으로 바꿉니다.USER_CLUSTER_NAME
: 노드 풀이 포함된 사용자 클러스터의 이름입니다.FLEET_HOST_PROJECT_ID
: 클러스터가 생성된 프로젝트의 ID입니다.LOCATION
: 사용자 클러스터와 연결된 Google Cloud 위치입니다.
클러스터에서 워커 노드 풀을 삭제하면 포드 중단이 발생할 수 있습니다. PodDisruptionBudget(PDB)이 있는 경우 노드 풀 제거가 차단될 수 있습니다. 포드 중단 정책에 대한 자세한 내용은 포드 중단 예산에 의해 차단된 노드 삭제를 참조하세요.
다음 단계
노드 풀을 만든 후 워크로드 요구사항이 변경되면 워커 노드 풀을 업데이트하여 노드를 추가하거나 삭제할 수 있습니다. 워커 노드 풀에서 노드를 추가하거나 삭제하려면 클러스터에서 노드 추가 또는 삭제를 참조하세요.