노드 수를 변경하여 수평으로 또는 노드를 호스팅하는 가상 시스템 클래스를 변경하여 수직으로 TKG 서비스 클러스터를 확장/축소할 수 있습니다. 클러스터 노드에 연결된 볼륨을 확장/축소할 수도 있습니다.

지원되는 수동 확장/축소 작업

다음 표에는 TKG 클러스터에 대해 지원되는 확장/축소 작업이 나열되어 있습니다.
표 1. TKGS 클러스터에 대해 지원되는 확장/축소 작업
노드 수평 확장 수평 축소 수직 확장/축소 볼륨 확장/축소
제어부 아니요 예*
작업자
다음 고려 사항에 유의하십시오.
  • 제어부 노드의 수는 홀수(1 또는 3)여야 합니다. 제어부 확장은 지원되지만 제어부 축소는 지원되지 않습니다. 제어부 확장의 내용을 참조하십시오.
  • 클러스터 노드를 수직으로 확장/축소하는 동안은 사용 가능한 리소스가 부족하여 노드에서 워크로드가 더 이상 실행되지 못할 수 있습니다. 따라서 일반적으로 선호되는 접근 방식은 수평 확장/축소입니다. 작업자 노드 확장의 내용을 참조하십시오.
  • VM 클래스는 변경할 수 없습니다. TKG 클러스터에서 사용되는 VM 클래스를 편집한 후 해당 클러스터를 확장하면, 새 클러스터 노드는 업데이트된 클래스 정의를 사용하지만 기존 클러스터 노드는 초기 클래스 정의를 계속 사용하여 불일치가 발생합니다. VM 클래스 정보의 내용을 참조하십시오.
  • 작업자 노드 볼륨은 프로비저닝 후 변경할 수 있으며, 마찬가지로 제어부 노드도 vSphere 8 U3 이상 및 호환되는 TKr을 사용하는 경우 변경할 수 있습니다. 클러스터 노드 볼륨 확장/축소의 내용을 참조하십시오.

확장/축소 사전 요구 사항: Kubectl 편집 구성

TKG 클러스터를 확장/축소하려면 kubectl edit CLUSTER-KIND/CLUSTER-NAME 명령을 사용하여 클러스터 매니페스트를 업데이트합니다. 매니페스트 변경 내용을 저장하면 클러스터가 변경 내용으로 업데이트됩니다. Kubectl용 텍스트 편집기 구성의 내용을 참조하십시오.

예:
kubectl edit tanzukubernetescluster/tkg-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
변경 내용을 취소하려면 저장하지 않고 편집기를 닫습니다.
kubectl edit tanzukubernetescluster/tkg-cluster-1
Edit cancelled, no changes made.

제어부 확장

제어부 노드 수를 1에서 3으로 늘려서 TKG 클러스터를 확장합니다.
참고: 운영 클러스터에는 3개의 제어부 노드가 필요합니다.
  1. 감독자에 로그인합니다.
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. TKG 클러스터를 실행 중인 vSphere 네임스페이스로 컨텍스트를 전환합니다.
    kubectl config use-context tkg-cluster-ns
  3. vSphere 네임스페이스에서 실행 중인 Kubernetes 클러스터를 나열합니다.

    다음 구문을 사용합니다.

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    예를 들어 v1alpha3 API 클러스터의 경우:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    예를 들어 v1beta1 API 클러스터의 경우:
    kubectl get cluster -n tkg-cluster-ns
  4. 대상 클러스터에서 실행 중인 노드 수를 구합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    TKG 클러스터에는 제어부 노드 1개와 작업자 노드 3개가 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    1               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    v1beta1 API 클러스터의 경우:

    kubectl get cluster tkg-cluster-1
  5. kubectl edit 명령을 사용하여 편집할 클러스터 매니페스트를 로드합니다.
    v1alpha3 API 클러스터의 경우:
    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API 클러스터의 경우:
    kubectl edit cluster/tkg-cluster-1

    KUBE_EDITOR 또는 EDITOR 환경 변수로 정의된 텍스트 편집기에서 클러스터 매니페스트가 열립니다.

  6. 매니페스트의 spec.topology.controlPlane.replicas 섹션에서 제어부 노드 수를 1에서 3으로 늘립니다.
    v1alpha3 API 클러스터의 경우:
    ...
    spec:
      topology:
        controlPlane:
          replicas: 1
    ...
    
    ...
    spec:
      topology:
        controlPlane:
          replicas: 3
    ...
    
    v1beta1 API 클러스터의 경우:
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 1
        variables:
    ...
    
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 3
        variables:
    ...
    
  7. 텍스트 편집기에서 파일을 저장하여 변경 내용을 적용합니다. (취소하려면 저장하지 않고 편집기를 닫습니다.)

    매니페스트 변경 내용을 저장하면 kubectl이 변경 내용을 클러스터에 적용합니다. 백그라운드에서 감독자가상 시스템 서비스는 새 제어부 노드를 프로비저닝합니다.

  8. 새 노드가 추가되었는지 확인합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    확장된 제어부에 이제 3개의 노드가 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    v1beta1 API 클러스터의 경우:

    kubectl get cluster tkg-cluster-1

작업자 노드 확장

작업자 노드 수를 늘려서 TKG 클러스터를 확장할 수 있습니다.

  1. 감독자에 로그인합니다.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG 클러스터를 실행 중인 vSphere 네임스페이스로 컨텍스트를 전환합니다.
    kubectl config use-context tkg-cluster-ns
  3. vSphere 네임스페이스에서 실행 중인 Kubernetes 클러스터를 나열합니다.

    다음 구문을 사용합니다.

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    예를 들어 v1alph3 API 클러스터의 경우:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    예를 들어 v1beta1 API 클러스터의 경우:
    kubectl get cluster -n tkg-cluster-ns
  4. 대상 클러스터에서 실행 중인 노드 수를 구합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    예를 들어 다음 클러스터에는 제어부 노드 3개와 작업자 노드 3개가 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    
    v1beta1 API 클러스터의 경우:
    kubectl get cluster tkg-cluster-1
  5. kubectl edit 명령을 사용하여 편집할 클러스터 매니페스트를 로드합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API 클러스터의 경우:
    kubectl edit cluster/tkg-cluster-1

    KUBE_EDITOR 또는 EDITOR 환경 변수로 정의된 텍스트 편집기에서 클러스터 매니페스트가 열립니다.

  6. 대상 작업자 노드 풀에 대한 spec.topology.nodePools.NAME.replicas 값을 편집하여 작업자 노드 수를 늘립니다.
    v1alpha3 API 클러스터의 경우:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    v1beta1 API 클러스터의 경우:
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 3
    ...
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 4
    ...
  7. 변경 내용을 적용하려면 텍스트 편집기에서 파일을 저장합니다. 변경 내용을 취소하려면 저장하지 않고 편집기를 닫습니다.

    파일을 저장하면 kubectl이 변경 내용을 클러스터에 적용합니다. 백그라운드에서 감독자가상 시스템 서비스는 새 작업자 노드를 프로비저닝합니다.

  8. 새 노드가 추가되었는지 확인합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    확장한 후에는 클러스터에 작업자 노드가 4개 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    v1beta1 API 클러스터의 경우:

    kubectl get cluster tkg-cluster-1

작업자 노드 축소

작업자 노드 수를 줄여서 TKG 클러스터를 축소할 수 있습니다.

  1. 감독자에 로그인합니다.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG 클러스터를 실행 중인 vSphere 네임스페이스로 컨텍스트를 전환합니다.
    kubectl config use-context tkg-cluster-ns
  3. vSphere 네임스페이스에서 실행 중인 Kubernetes 클러스터를 나열합니다.

    다음 구문을 사용합니다.

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    예를 들어 v1alph3 API 클러스터의 경우:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    예를 들어 v1beta1 API 클러스터의 경우:
    kubectl get cluster -n tkg-cluster-ns
  4. 대상 클러스터에서 실행 중인 노드 수를 구합니다.
    kubectl get tanzukubernetescluster tkg-cluster-1
  5. 대상 클러스터에서 실행 중인 노드 수를 구합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    예를 들어 다음 클러스터에는 제어부 노드 3개와 작업자 노드 4개가 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.24.9---vmware.1-tkg.4   5d12h   True
    
    v1beta1 API 클러스터의 경우:
    kubectl get cluster tkg-cluster-1
  6. kubectl edit 명령을 사용하여 편집할 클러스터 매니페스트를 로드합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API 클러스터의 경우:
    kubectl edit cluster/tkg-cluster-1

    KUBE_EDITOR 또는 EDITOR 환경 변수로 정의된 텍스트 편집기에서 클러스터 매니페스트가 열립니다.

  7. 대상 작업자 노드 풀에 대한 spec.topology.nodePools.NAME.replicas 값을 편집하여 작업자 노드 수를 줄입니다.
    v1alpha3 API 클러스터의 경우:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    v1beta1 API 클러스터의 경우:
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 4
    ...
    ...
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      ...
    spec:
      ...
      topology:
        ...
        class: tanzukubernetescluster
        controlPlane:
        ...
        workers:
          machineDeployments:
          - class: node-pool
            metadata: {}
            name: node-pool-1
            replicas: 3
    ...
  8. 변경 내용을 적용하려면 텍스트 편집기에서 파일을 저장합니다. 변경 내용을 취소하려면 저장하지 않고 편집기를 닫습니다.

    파일을 저장하면 kubectl이 변경 내용을 클러스터에 적용합니다. 백그라운드에서 감독자가상 시스템 서비스는 새 작업자 노드를 프로비저닝합니다.

  9. 작업자 노드가 제거되었는지 확인합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl get tanzukubernetescluster tkg-cluster-1
    축소한 후에는 클러스터에 작업자 노드가 3개 있습니다.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                   AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.24.9---vmware.1-tkg.4   5d12h   True
    

    v1beta1 API 클러스터의 경우:

    kubectl get cluster tkg-cluster-1

클러스터를 수직으로 확장/축소

감독자의 TKG는 클러스터 제어부 및 작업자 노드에 대한 수직 확장/축소를 지원합니다. 클러스터 노드에 사용되는 가상 시스템 클래스를 변경하여 TKG 클러스터를 수직으로 확장/축소합니다. 사용하는 VM 클래스는 TKG 클러스터가 프로비저닝된 vSphere 네임스페이스에 바인딩되어야 합니다.

감독자의 TKG는 시스템에 내장된 롤링 업데이트 메커니즘을 통해 수직 확장/축소를 지원합니다. VirtualMachineClass 정의를 변경하면 시스템은 새 클래스를 사용하여 새 노드를 롤아웃하고 이전 노드를 스핀 다운합니다. TKG 서비스 클러스터 업데이트의 내용을 참조하십시오.

  1. 감독자에 로그인합니다.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. TKG 클러스터를 실행 중인 vSphere 네임스페이스로 컨텍스트를 전환합니다.
    kubectl config use-context tkg-cluster-ns
  3. vSphere 네임스페이스에서 실행 중인 Kubernetes 클러스터를 나열합니다.

    다음 구문을 사용합니다.

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    예를 들어 v1alph3 API 클러스터의 경우:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    예를 들어 v1beta1 API 클러스터의 경우:
    kubectl get cluster -n tkg-cluster-ns
  4. 대상 TKG 클러스터에 describe 명령을 실행하고 VM 클래스를 확인합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl describe tanzukubernetescluster tkg-cluster-1

    예를 들어 다음 클러스터는 best-effort-medium VM 클래스를 사용합니다.

    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: best-effort-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: best-effort-medium
          ...
    

    v1beta1 API 클러스터의 경우:

    kubectl describe cluster tkg-cluster-1

    예를 들어 다음 클러스터는 best-effort-medium VM 클래스를 사용합니다.

    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  best-effort-medium
        ...
    참고: v1beta1 API 클러스터의 경우 기본적으로 vmClass는 전역적으로 단일 변수로 설정됩니다. 이 설정을 재정의하고 제어부 및 작업자 노드에 대해 다른 VM 클래스를 사용할 수 있습니다. API 참조에서 vmClass의 내용을 참조하십시오.
  5. 사용 가능한 VM 클래스를 나열하고 설명합니다.
    kubectl get virtualmachineclass
    kubectl describe virtualmachineclass
    참고: VM 클래스는 vSphere 네임스페이스에 바인딩되어야 합니다. TKG 서비스 클러스터에서 VM 클래스 사용의 내용을 참조하십시오.
  6. 대상 클러스터 매니페스트를 편집하기 위해 엽니다.

    v1alpha3 API 클러스터의 경우:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    v1beta1 API 클러스터의 경우:
    kubectl edit cluster/tkg-cluster-1

    KUBE_EDITOR 또는 EDITOR 환경 변수로 정의된 텍스트 편집기에서 클러스터 매니페스트가 열립니다.

  7. VM 클래스를 변경하여 매니페스트를 편집합니다.
    v1alpha3 API 클러스터의 경우, 제어부에 대한 VM 클래스를 guaranteed-medium로 변경하고 작업자 노드에 대한 VM 클래스를 guaranteed-large로 변경합니다.
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-large
          ...
    
    v1beta API 클러스터의 경우 VM 클래스를 guaranteed-large로 변경합니다.
    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  guaranteed-large
        ...
  8. 변경 내용을 적용하려면 텍스트 편집기에서 파일을 저장합니다. 변경 내용을 취소하려면 저장하지 않고 편집기를 닫습니다.

    파일을 저장하면 kubectl이 변경 내용을 클러스터에 적용합니다. 백그라운드에서 감독자의 TKG는 TKG 클러스터의 롤링 업데이트를 수행합니다.

  9. TKG 클러스터가 새 VM 클래스로 업데이트되었는지 확인합니다.

    v1alpha3 API 클러스터의 경우:

    kubectl describe tanzukubernetescluster tkg-cluster-1

    v1beta1 API 클러스터의 경우:

    kubectl describe cluster tkg-cluster-1

클러스터 노드 볼륨 확장/축소

노드에 대한 TKG 클러스터 규격에서 필요에 따라 노드에 대해 하나 이상의 영구 볼륨을 선언할 수 있습니다. 노드 볼륨 선언은 작업자 노드의 컨테이너 런타임 및 kubelet과 같이 변동률이 높은 구성 요소에 유용합니다.

클러스터 생성 후 하나 이상의 노드 볼륨을 추가하거나 변경하려면 다음 고려 사항에 유의하십시오.
볼륨 노드 설명

작업자 노드 볼륨 변경이 허용됩니다.

TKG 클러스터가 프로비저닝된 후 작업자 노드 볼륨을 추가하거나 업데이트할 수 있습니다. 롤링 업데이트를 시작하면 클러스터가 새 볼륨 또는 변경된 볼륨으로 업데이트됩니다.

경고: 새 볼륨 또는 변경된 볼륨으로 작업자 노드를 확장하는 경우 롤링 업데이트 중에 현재 볼륨의 데이터가 삭제됩니다. 다음 설명을 참조하십시오.

TKG 클러스터 노드에 대해 선언된 볼륨은 사용 후 삭제로 처리됩니다. TKG 클러스터는 vSphere 네임스페이스에서 PVC(영구 볼륨 할당)를 사용하여 볼륨 용량이 TKG 클러스터의 스토리지 할당량에서 차감되도록 합니다. TKC 볼륨의 용량을 늘리면 Kubernetes CAPI(Cluster API)가 새 PVC를 사용하여 새 작업자를 롤아웃합니다. 이 경우 TKG는 데이터 마이그레이션을 수행하지 않지만 Kubernetes는 그에 따라 워크로드 포드를 (다시)스케줄링합니다.

vSphere 8 U3 이상을 사용하는 경우 제어부 노드 볼륨 변경이 허용됩니다.

vSphere 8 U3 이상 및 호환되는 Tanzu Kubernetes 릴리스를 사용하는 경우 TKG 서비스 클러스터가 프로비저닝되면 제어부 노드 볼륨을 추가하거나 업데이트할 수 있습니다.

vSphere 8 U3 이상을 사용하지 않는 경우 CAPI(Kubernetes Cluster API)는 spec.toplogy.controlPlane.volumes에 대한 생성 후 변경을 금지합니다.

클러스터 생성 후 제어부 볼륨을 추가하거나 변경하려고 하면 요청이 거부되고 "불변 필드에 대한 업데이트는 허용되지 않습니다."라는 오류 메시지가 표시됩니다.

다음은 선언된 노드 볼륨이 있는 v1alpha3 API를 기반으로 하는 클러스터 규격에서 발췌한 것입니다. 필요에 따라 이 발췌를 가져온 전체 TKG 클러스터 예시(v1alpha3 예시: 기본 스토리지 및 노드 볼륨이 있는 TKC)를 참조하십시오. v1beta1 API 클러스터 예는 v1beta1 예시: 기본 ClusterClass를 기반으로 하는 사용자 지정 클러스터 항목을 참조하십시오.

apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TanzuKubernetesCluster
...
spec:
   topology:
     controlPlane:
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-medium
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
     nodePools:
     - name: worker-nodepool-a1
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-large
       tkr:
         reference:
           name: v1.24.9---vmware.1-tkg.4
       volumes:
       - name: containerd
         mountPath: /var/lib/containerd
         capacity:
           storage: 50Gi
       - name: kubelet
         mountPath: /var/lib/kubelet
         capacity:
           storage: 50Gi
     - name: worker-nodepool-a2
       ...
   settings:
     ...