서로 다른 VM 유형의 노드 풀 관리

이 항목에서는 워크로드 클러스터에서 노드 풀을 생성, 업데이트, 삭제하는 방법을 설명합니다. 노드 풀을 사용하면 단일 워크로드 클러스터가 다양한 유형의 노드를 포함하고 관리하여 다양한 애플리케이션의 다양한 요구 사항을 지원할 수 있습니다.

예를 들어 클러스터는 스토리지 용량이 큰 노드를 사용하여 데이터 저장소를 실행하고 더 얇은 노드를 사용하여 애플리케이션 요청을 처리할 수 있습니다.

참고

노드 풀은 단일 노드 클러스터를 생성할 수 없습니다.
vSphere with Tanzu에서 생성한 워크로드 클러스터에 노드 풀을 생성하고 사용하려면 vSphere v7.0 U3 이상을 실행해야 합니다.
vSphere with Tanzu를 사용하는 경우 vSphere with Tanzu 클러스터는 v1alpha2 API를 사용하여 node-pool 명령을 성공적으로 실행해야 합니다. 자세한 내용은 vSphere with Tanzu 설명서를 참조하십시오.

노드 풀 정보

노드 풀은 워크로드 클러스터에서 사용하는 Worker 노드 집합의 속성을 정의합니다.

일부 노드 풀 속성은 기본 인프라에서 사용할 수 있는 VM 옵션에 따라 달라지지만 모든 클라우드 인프라의 모든 노드 풀은 다음 속성을 공유합니다.

  • name: 업데이트 및 삭제와 같은 작업에 사용되는 노드 풀의 고유 식별자입니다.
  • replicas: 풀의 노드 수이며 모두 동일한 속성을 공유합니다.
  • labels: 풀의 노드에 워크로드를 일치시킬 수 있도록 노드에서 메타데이터로 설정된 키/값 쌍입니다. 자세한 내용 및 예시 레이블은 Kubernetes 설명서에서 레이블 및 선택기를 참조하십시오.

vSphere 워크로드 클러스터의 경우 기본적으로 독립형 관리 클러스터는 선호도 방지 규칙에 따라 노드 풀 작업자 및 제어부 노드를 다른 ESXi 호스트에 배포합니다. 노드 배치에 대한 선호도 방지 규칙을 비활성화하려면 선호도 방지 규칙 비활성화를 참조하십시오.

모든 워크로드 클러스터는 첫 번째 원래 노드 풀로 생성되었습니다. 클러스터에 대한 추가 노드 풀을 만들 때 아래에 설명된 대로 첫 번째 노드 풀은 새 노드 풀 정의에 설정되지 않은 속성에 대한 기본값을 제공합니다.

노드 풀 나열

클러스터에서 현재 사용할 수 있는 노드 풀을 검사하려면 다음을 실행합니다.

tanzu cluster node-pool list CLUSTER-NAME

이 명령은 클러스터의 모든 노드 풀 목록과 각 노드 풀의 복제본 상태를 반환합니다.

노드 풀 생성

클러스터에서 노드 풀을 생성하려면 다음을 수행합니다.

  1. 노드 풀의 구성 파일을 생성합니다. 샘플 구성 파일은 샘플 구성을 참조하십시오.

    구성 속성의 전체 목록은 구성 속성을 참조하십시오.

  2. 구성 파일에 의해 정의된 노드 풀을 생성합니다.

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    옵션:

    • --namespace는 클러스터의 네임스페이스를 지정합니다. 기본값은 default입니다.
    • (레거시 클러스터) --base-machine-deployment는 새로운 노드 풀을 생성하는 기본 MachineDeployment 개체를 지정합니다.
      • 이 값은 MachineDeployment에 있는 tanzu cluster get 출력에 나열된 Details 식별자로 설정합니다.
      • 기본값은 내부적으로 workerMDs[0]으로 표시되는 Worker 노드 MachineDeployment 개체 중 첫 번째입니다.

샘플 구성

다음은 기본 인프라용 예시 구성입니다.

vSphere 구성
필수 name, replicas, labels 속성 외에도 vSphere의 노드 풀에 대한 구성 파일에는 vSphere에서 VM 구성과 관련된 선택적 속성을 정의하기 위해 vsphere 블록이 포함될 수 있습니다.

vSphere 클러스터의 노드 풀 정의 예:

    name: tkg-wc-oidc-md-1
    replicas: 4
    labels:
      key1: value1
      key2: value2
    vsphere:
      memoryMiB: 8192
      diskGiB: 64
      numCPUs: 4
      datacenter: dc0
      datastore: iscsi-ds-0
      storagePolicyName: name
      folder: vmFolder
      resourcePool: rp-1
      vcIP: 10.0.0.1
      template: templateName
      cloneMode: clone-mode
      network: network-name

vsphere 블록에 설정되지 않은 모든 값은 클러스터의 첫 번째 노드 풀에 있는 값에서 상속됩니다

vcIP 값의 경우 워크로드 클러스터 노드 풀이 클러스터의 제어부와 동일한 vCenter에서 실행되어야 합니다.

vSphere with Tanzu Supervisor에 의해 배포된 클러스터의 경우 storageClass, tkr, vmClass를 정의합니다. 이러한 속성에 대한 자세한 내용은 vSphere with Tanzu 설명서의 TanzuKubernetesCluster v1alpha3 API - 주석을 참조하십시오.

기본적으로 vSphere 워크로드 클러스터는 제어부 노드 및 각 노드 풀 내의 Worker 노드를 여러 ESXi 호스트에 분산하는 선호도 방지 규칙에 따라 배포됩니다. 선호도 방지 규칙을 비활성화하거나 재활성화하려면 선호도 방지 규칙 비활성화(vSphere)를 참조하십시오.

AWS 구성
필수 name, replicas, labels 속성 외에도 AWS의 노드 풀용 구성 파일은 다음과 같은 선택적 속성을 지원합니다.
  • az: 가용성 영역
  • nodeMachineType: 인스턴스 유형

이러한 설정은 생략될 수 있으며, 이 경우 해당 값은 클러스터의 첫 번째 노드 풀에서 상속됩니다.

AWS 클러스터의 노드 풀 정의 예:

name: tkg-aws-wc-np-1
replicas: 2
az: us-west-2b
nodeMachineType: t3.large
labels:
  key1: value1
  key2: value2
참고

AWS의 워크로드 클러스터 노드 풀은 독립형 관리 클러스터와 동일한 가용성 영역에 있어야 합니다.

Azure 구성
위의 필수 name, replicas, labels 속성 외에도 Microsoft Azure의 노드 풀용 구성 파일은 다음과 같은 선택적 속성을 지원합니다.
  • az: 가용성 영역
  • nodeMachineType: 인스턴스 유형

설정을 생략하면 해당 값은 클러스터의 첫 번째 노드 풀에서 상속됩니다.

Azure 클러스터의 노드 풀 정의 예:

name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
  key1: value1
  key2: value2

구성 속성

다음 표에는 워크로드 클러스터의 노드 풀 구성 파일에서 정의할 수 있는 모든 속성이 나열되어 있습니다.

참고

기존 노드 풀의 labels, az, nodeMachineType 또는 vSphere 속성을 추가하거나 변경할 수 없습니다. 이러한 속성을 변경하려면 원하는 속성을 사용하여 클러스터에 새 노드 풀을 생성하고, 워크로드를 새 노드 풀로 마이그레이션하고, 원래 노드 풀을 삭제해야 합니다.

이름 유형 클러스터 개체 제공자 참고
name 문자열 임의 모두 생성하거나 업데이트할 노드 풀의 이름.
replicas 정수 임의 모두 노드 풀의 노드 수.
az 문자열 임의 AWS 또는 Azure의 TKG 노드를 배치할 AZ.
nodeMachineType 문자열 임의 AWS 또는 Azure의 TKG AWS 및 Azure 노드의 instanceType 또는 vmSize.
labels Map[string]string 임의 모두 kubeletExtraArgs(‐‐node-labels)를 사용하여 노드에 설정할 레이블.
vmClass 문자열 임의 모두 Kubernetes vmClass의 이름. TKC 클러스터에 정의된 vmClass와 일치합니다. 이 클래스는 노드에서 사용할 수 있는 CPU 및 메모리를 설정합니다. 사용 가능한 VM 클래스를 나열하려면 kubectl describe virtualmachineclasses를 실행합니다.
storageClass 문자열 임의 모두 노드 풀에 사용할 Kubernetes StorageClass 이름. 이 클래스는 노드의 루트 파일 시스템을 저장하는 디스크에 적용됩니다. 사용 가능한 스토리지 클래스를 나열하려면 kubectl describe storageclasses를 실행합니다.
volumes:
  • name, 문자열
  • mountPath, 문자열
  • capacity, corev1.ResourceList
  • storageClass, 문자열
[]object 임의 모두 노드에 사용할 볼륨.
tkr:
  • reference, 문자열
개체 TKC 기반 모두 노드 풀에 사용할 TKR의 이름. 예: v1.26.8---vmware.2-tkg.2.
tkrResolver 문자열 클래스 기반 모두 클래스 기반 클러스터가 필요합니다. Cluster 리소스의 run.tanzu.vmware.com/resolve-os-image 주석 값입니다.
nodeDrainTimeout metav1.Duration 임의 모두 노드 추출 시간 초과.
vsphere 개체 임의 모두 [구성 속성(vSphere만 해당)](#vsphere-properties)을 참조하십시오.
workerClass 문자열 클래스 기반 모두 클래스 기반 클러스터가 필요합니다. 노드 풀에서 사용할 클러스터의 ClusterClass에서 workerClass.

구성 속성(vSphere 전용)

VSPHERE_* 구성 변수에 대한 자세한 내용은 구성 파일 변수 참조vSphere를 참조하십시오.

이름 유형 관리 클러스터 유형 참고
cloneMode 문자열 독립형 VSPHERE_CLONE_MODE와 동일합니다.
datacenter 문자열 독립형 VSPHERE_DATACENTER와 동일합니다.
datastore 문자열 독립형 VSPHERE_DATASTORE와 동일합니다.
storagePolicyName 문자열 독립형 VSPHERE_STORAGE_POLICY_NAME와 동일합니다.
taints []corev1.Taint Supervisor 노드에 적용할 Taint.
folder 문자열 독립형 VSPHERE_FOLDER와 동일합니다.
network 문자열 독립형 VSPHERE_NETWORK와 동일합니다.
nameservers []문자열 독립형 VSPHERE_WORKER_NAMESERVERS와 동일합니다.
tkgIPFamily 문자열 독립형 TKG_IP_FAMILY와 동일합니다.
resourcePool 문자열 독립형 VSPHERE_RESOURCE_POOL와 동일합니다.
vcIP 문자열 독립형 VSPHERE_SERVER와 동일합니다.
template 문자열 독립형 VSPHERE_TEMPLATE와 동일합니다.
memoryMiB 정수 독립형 VSPHERE_WORKER_MEM_MIB와 동일합니다.
diskGiB 정수 독립형 VSPHERE_WORKER_DISK_GIB와 동일합니다.
numCPUs 정수 독립형 VSPHERE_WORKER_NUM_CPUS와 동일합니다.

노드 풀에 워크로드 할당

노드 풀에 워크로드를 할당하려면 다음을 수행합니다.

  1. 포드를 관리하는 Kubernetes 워크로드 리소스 또는 리소스에서 nodeSelector를 노드 풀 구성 파일에서 정의한 labels 값으로 설정합니다. Kubernetes 워크로드 리소스에 대한 자세한 내용은 Kubernetes 설명서의 워크로드를 참조하십시오.
  2. kubectl apply -f 명령을 실행하여 구성을 적용합니다.

워크로드를 다른 노드 풀에 다시 할당하려면 다음을 수행합니다.

  1. 포드를 관리하는 Kubernetes 워크로드 리소스 또는 리소스에서 nodeSelector 값을 새 값으로 업데이트합니다.
  2. kubectl apply -f 명령을 실행하여 구성 업데이트를 적용합니다.

노드 풀 업데이트

노드 풀의 노드 수만 변경해야 하는 경우 노드만 조정에서 Tanzu CLI 명령을 사용합니다. 레이블을 추가하려면 레이블 추가 및 노드 조정에 있는 절차를 따릅니다.

주의

이러한 절차를 통해 노드 풀의 기존 레이블, 가용성 영역, 노드 인스턴스 유형(AWS 또는 Azure의 경우) 또는 가상 머신 속성(vSphere의 경우)을 변경하지 마십시오. 이로 인해 실행 워크로드에 심각한 부정적인 영향을 미칠 수 있습니다. 이러한 속성을 변경하려면 이러한 속성을 사용하여 새 노드 풀을 생성하고 원래 노드 풀을 삭제하기 전에 워크로드를 새 노드 풀로 재할당합니다. 지침은 위의 노드 풀에 워크로드 할당을 참조하십시오.

노드만 조정

노드 풀의 노드 수를 변경하려면 다음을 실행합니다.

tanzu cluster scale CLUSTER-NAME -p NODE-POOL-NAME -w NODE-COUNT

형식 설명:

  • CLUSTER-NAME은 워크로드 클러스터의 이름입니다.
  • NODE-POOL-NAME은 노드 풀의 이름입니다.
  • NODE-COUNT는 이 노드 풀에 속하는 노드 수(정수)입니다.

레이블 추가 및 노드 조정

노드 풀 구성 파일을 통해 노드 풀에 레이블을 추가하고 노드의 노드 크기를 동시에 지정할 수 있습니다.

  1. 업데이트하려는 노드 풀의 구성 파일을 엽니다.

  2. 이 노드 풀의 노드 수를 늘리거나 줄이는 경우 replicas 뒤에 숫자를 업데이트합니다.

  3. 레이블을 추가하는 경우 아래에 labels을 입력합니다. 예:

    labels:
      key1: value1
      key2: value2
    
  4. 노드 풀 구성 파일을 저장합니다.

  5. 터미널에서 다음을 실행합니다.

    tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
    

    명령의 CLUSTER-NAME과 구성 파일의 name이 클러스터의 노드 풀과 일치하는 경우, 이 명령은 새 노드 풀을 만드는 대신 기존 노드 풀을 업데이트합니다.

노드 풀 삭제

노드 풀을 삭제하려면 다음을 실행합니다.

tanzu cluster node-pool delete CLUSTER-NAME -n NODE-POOL-NAME

여기서 CLUSTER-NAME은 워크로드 클러스터의 이름이고 NODE-POOL-NAME은 노드 풀의 이름입니다.

필요한 경우 --namespace를 사용하여 클러스터의 네임스페이스를 지정합니다. 기본값은 default입니다.

주의

이 작업을 하기 전에 이러한 노드의 워크로드를 다른 노드 풀로 재할당합니다. tanzu cluster node-pool delete는 워크로드를 삭제하기 전에 노드에서 마이그레이션하지 않습니다. 지침은 위의 노드 풀에 워크로드 할당을 참조하십시오.

선호도 방지 규칙 비활성화(vsphere)

기본적으로 vSphere 워크로드 클러스터는 제어부 노드 및 각 노드 풀 내의 Worker 노드를 여러 ESXi 호스트에 분산하는 선호도 방지 규칙에 따라 배포됩니다. 클러스터 생성 중에 선호도 방지 규칙을 비활성화하거나 다시 활성화하려면 다음을 수행합니다.

  1. kubectl 컨텍스트를 관리 클러스터로 설정합니다.

    kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
    

    여기서 MGMT-CLUSTER-NAME은 클러스터의 이름입니다.

  2. CAPV 컨트롤러에서 kubectl get deployment를 실행하여 manager 컨테이너의 args 값을 수집합니다. 예를 들면 다음과 같습니다.

    kubectl get deployment -n capv-system capv-controller-manager -o=json | jq '.spec.template.spec.containers[] | select(.name=="manager") | .args'
    [
      "--leader-elect",
      "--logtostderr",
      "--v=4",
      "--feature-gates=NodeAntiAffinity=true,NodeLabeling=true"
    ]
    
  3. 이전 단계에서 복사한 출력을 사용하여 --feature-gates 값을 변경하고 인수 목록을 개체의 값을 수정하는 kubectl patch 명령에 전달합니다. 예를 들어 NodeAntiAffinityNodeLabeling 기능 게이트를 false로 설정하여 노드 선호도 방지 규칙을 비활성화합니다.

    kubectl patch deployment -n capv-system capv-controller-manager --type=json -p '[{"op":"replace", "path":"/spec/template/spec/containers/0/args", "value": [
    "--leader-elect",
    "--logtostderr",
    "--v=4",
    "--feature-gates=NodeAntiAffinity=false,NodeLabeling=false"
    ]}]'
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon