이 항목에서는 워크로드 클러스터에서 노드 풀을 생성, 업데이트, 삭제하는 방법을 설명합니다. 노드 풀을 사용하면 단일 워크로드 클러스터가 다양한 유형의 노드를 포함하고 관리하여 다양한 애플리케이션의 다양한 요구 사항을 지원할 수 있습니다.
예를 들어 클러스터는 스토리지 용량이 큰 노드를 사용하여 데이터 저장소를 실행하고 더 얇은 노드를 사용하여 애플리케이션 요청을 처리할 수 있습니다.
참고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
이 명령은 클러스터의 모든 노드 풀 목록과 각 노드 풀의 복제본 상태를 반환합니다.
클러스터에서 노드 풀을 생성하려면 다음을 수행합니다.
노드 풀의 구성 파일을 생성합니다. 샘플 구성 파일은 샘플 구성을 참조하십시오.
구성 속성의 전체 목록은 구성 속성을 참조하십시오.
구성 파일에 의해 정의된 노드 풀을 생성합니다.
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
개체 중 첫 번째입니다.다음은 기본 인프라용 예시 구성입니다.
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)를 참조하십시오.
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의 워크로드 클러스터 노드 풀은 독립형 관리 클러스터와 동일한 가용성 영역에 있어야 합니다.
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
다음 표에는 워크로드 클러스터의 노드 풀 구성 파일에서 정의할 수 있는 모든 속성이 나열되어 있습니다.
이름 | 유형 | 클러스터 개체 | 제공자 | 참고 |
---|---|---|---|---|
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 :
|
[]object | 임의 | 모두 | 노드에 사용할 볼륨. |
tkr :
|
개체 | TKC 기반 | 모두 | 노드 풀에 사용할 TKR의 이름. 예: v1.24.10—vmware.2-tkg.2 . |
tkrResolver |
문자열 | 클래스 기반 | 모두 | 클래스 기반 클러스터가 필요합니다. Cluster 리소스의 run.tanzu.vmware.com/resolve-os-image 주석 값입니다. |
nodeDrainTimeout |
metav1.Duration | 임의 | 모두 | 노드 추출 시간 초과. |
vsphere |
개체 | 임의 | 모두 | 구성 속성(vSphere 전용). |
workerClass |
문자열 | 클래스 기반 | 모두 | 클래스 기반 클러스터가 필요합니다. 노드 풀에서 사용할 ClusterClass 에서 workerClass 를 선택합니다. |
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 와 동일합니다. |
노드 풀에 워크로드를 할당하려면 다음을 수행합니다.
nodeSelector
를 노드 풀 구성 파일에서 정의한 labels
값으로 설정합니다. Kubernetes 워크로드 리소스에 대한 자세한 내용은 Kubernetes 설명서의 워크로드를 참조하십시오.kubectl apply -f
명령을 실행하여 구성을 적용합니다.워크로드를 다른 노드 풀에 다시 할당하려면 다음을 수행합니다.
nodeSelector
값을 새 값으로 업데이트합니다.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
는 이 노드 풀에 속하는 노드 수(정수)입니다.노드 풀 구성 파일을 통해 노드 풀에 레이블을 추가하고 노드의 노드 크기를 동시에 지정할 수 있습니다.
업데이트하려는 노드 풀의 구성 파일을 엽니다.
이 노드 풀의 노드 수를 늘리거나 줄이는 경우 replicas
뒤에 숫자를 업데이트합니다.
레이블을 추가하는 경우 아래에 labels
을 입력합니다. 예:
labels:
key1: value1
key2: value2
노드 풀 구성 파일을 저장합니다.
터미널에서 다음을 실행합니다.
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 워크로드 클러스터는 제어부 노드 및 각 노드 풀 내의 Worker 노드를 여러 ESXi 호스트에 분산하는 선호도 방지 규칙에 따라 배포됩니다. 클러스터 생성 중에 선호도 방지 규칙을 비활성화하거나 다시 활성화하려면 다음을 수행합니다.
kubectl
컨텍스트를 관리 클러스터로 설정합니다.
kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
여기서 MGMT-CLUSTER-NAME
은 클러스터의 이름입니다.
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"
]
이전 단계에서 복사한 출력을 사용하여 --feature-gates
값을 변경하고 인수 목록을 개체의 값을 수정하는 kubectl patch
명령에 전달합니다. 예를 들어 NodeAntiAffinity
및 NodeLabeling
기능 게이트를 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"
]}]'