클러스터의 노드 풀 관리

노드 풀은 클러스터 내에서 구성이 모두 동일한 노드 그룹입니다. 클러스터의 모든 노드는 노드 풀에 속해야 합니다. 베어메탈용 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가 설치된 컴퓨터에서 다음을 수행합니다.

  1. Google 계정으로 로그인하십시오.

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

    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

콘솔

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

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

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

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

    노드 풀 목록이 표시됩니다.

노드 목록 스크린샷

gcloud CLI

  1. 클러스터의 노드 풀을 나열합니다.

    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 위치입니다.

  2. 노드 풀을 기술합니다.

    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.710.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.taintsNodePool.spec.labels 구성이 노드에 맞게 조정됩니다. 노드에 직접 추가된 모든 taint 및 라벨이 삭제됩니다. 제어 영역은 동기화 프로세스 중에 직접 추가한 taint 및 라벨을 삭제하지 않습니다. 이 조정 단계를 무시하려면 baremetal.cluster.gke.io/label-taint-no-sync를 사용해 노드에 주석을 추가하면 됩니다.

  • 노드 풀 리소스는 연결된 클러스터와 동일한 네임스페이스에 만들어야 하며 노드 풀 리소스는 spec.clusterName 필드의 클러스터 이름을 참조해야 합니다.

콘솔

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

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

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

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

  5. 노드 풀에 이름을 입력합니다.

  6. 노드 주소 1 필드에 워커 노드 머신의 IP 주소를 입력합니다.

    추가할 워커 노드 머신이 1개 넘게 있으면 주소 추가를 클릭합니다.

  7. 선택적으로 Kubernetes 라벨 또는 Kubernetes taint를 추가합니다.

  8. 만들기를 클릭합니다.

노드 풀의 상태가 노드 탭에 표시됩니다. 업데이트된 상태를 보려면 페이지를 새로고침해야 할 수 있습니다.

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)과 함께 사용됩니다. EFFECTNoSchedule, PreferNoSchedule, NoExecute 중 하나를 지정합니다.

  • --validate-only 업데이트를 검증하지만 항목을 변경하지 않으려는 경우에 이 플래그를 지정합니다.

노드 풀 업데이트

kubectl

클러스터에서 nodepools.baremetal.cluster.gke.io 리소스를 수정하여 노드 풀을 업데이트합니다. kubectl edit를 사용하여 리소스를 직접 업데이트하거나 YAML 파일을 업데이트하고 kubectl apply를 사용할 수 있습니다.

콘솔

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

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

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

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

  5. 목록에서 업데이트할 노드 풀을 클릭합니다.

  6. 노드 풀 세부정보 페이지에서 수정을 클릭합니다.

  7. 필요에 따라 설정을 변경하고 저장을 클릭합니다.

gcloud CLI

  1. 필요에 따라 업데이트하려는 노드 풀 이름을 가져오기 위해 클러스터의 노드 풀을 나열합니다.

    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 위치입니다.

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

    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)과 함께 사용됩니다. EFFECTNoSchedule, 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

제어 영역 노드 풀과 부하 분산기 노드 풀은 클러스터 기능에 중요하므로 클러스터에서 삭제할 수 없습니다.

콘솔

  1. 콘솔에서 Google Kubernetes Engine 클러스터 개요 페이지로 이동합니다.

    GKE 클러스터로 이동

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

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

  4. 노드 탭을 클릭한 후 삭제하려는 노드 풀을 클릭합니다.

  5. 삭제를 클릭합니다.

  6. 확인 대화상자에서 노드 풀 이름을 입력하고 확인을 클릭합니다.

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)이 있는 경우 노드 풀 제거가 차단될 수 있습니다. 포드 중단 정책에 대한 자세한 내용은 포드 중단 예산에 의해 차단된 노드 삭제를 참조하세요.

다음 단계

노드 풀을 만든 후 워크로드 요구사항이 변경되면 워커 노드 풀을 업데이트하여 노드를 추가하거나 삭제할 수 있습니다. 워커 노드 풀에서 노드를 추가하거나 삭제하려면 클러스터에서 노드 추가 또는 삭제를 참조하세요.