Você pode dimensionar um cluster TKG horizontalmente alterando o número de nós ou verticalmente alterando a classe de máquina virtual que hospeda os nós. Você também pode dimensionar volumes persistentes. Algumas limitações podem ser aplicadas.

Operações de dimensionamento compatíveis

A tabela lista as operações de dimensionamento compatíveis com clusters TKG 2.
Tabela 1. Operações de dimensionamento compatíveis com clusters TKG 2
Redimensionamento horizontal Redimensionamento horizontal Escala vertical Escala de Volume
Plano de Controle Sim Não Sim Não
Trabalhador Sim Sim Sim Sim
Tenha em mente as seguintes considerações:
  • O número de nós do plano de controle deve ser ímpar, 1 ou 3. Não há suporte para dimensionamento no plano de controle.
  • Ao dimensionar verticalmente um nó de cluster, as cargas de trabalho podem não ser mais capazes de ser executadas no nó por falta de recursos disponíveis. Por esse motivo, o dimensionamento horizontal pode ser a abordagem preferida.
  • As classes de VM não são imutáveis. Se você dimensionar horizontalmente um cluster TKG após editar uma classe de VM usada por esse cluster, os novos nós de cluster usarão a definição de classe atualizada, mas os nós de cluster existentes continuarão a usar a definição de classe inicial, resultando em uma incompatibilidade.
  • Os volumes do nó do trabalhador podem ser alterados após o provisionamento; os volumes de nó do plano de controle não podem.

Pré-requisito de dimensionamento: configurar a edição Kubectl

Para dimensionar um cluster TKG, atualize o manifesto do cluster usando o comando kubectl edit CLUSTER-KIND/CLUSTER-NAME. Quando você salva as alterações do manifesto, o cluster é atualizado com as alterações. Consulte Configurar um editor de texto para Kubectl.

Por exemplo:
kubectl edit tanzukubernetescluster/tkg-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
Para cancelar as alterações, feche o editor sem salvar.
kubectl edit tanzukubernetescluster/tkg-cluster-1
Edit cancelled, no changes made.

Dimensionar horizontalmente o plano de controle

Dimensione horizontalmente um cluster do TKG 2 aumentando o número de nós do plano de controle de 1 para 3.
  1. Faça login em Supervisor.
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. Alterne o contexto para o vSphere Namespace em que o cluster TKG está em execução.
    kubectl config use-context tkg-cluster-ns
  3. Liste os clusters Kubernetes em execução no vSphere Namespace.
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por exemplo:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. Obtenha o número de nós em execução no cluster de destino.
    kubectl get tanzukubernetescluster tkg-cluster-1
    Por exemplo, o cluster TKG tem 1 nós do plano de controle e 3 nós do trabalhador.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster-1    1               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. Carregue o manifesto do cluster para edição usando o comando kubectl edit.
    kubectl edit tanzukubernetescluster/tkg-cluster-1

    O manifesto do cluster é aberto no editor de texto definido por suas variáveis de ambiente KUBE_EDITOR ou EDITOR.

  6. Aumente o número de nós do plano de controle de 1 para 3 na seção spec.topology.controlPlane.replicas do manifesto.
    Por exemplo:
    ...
    spec:
      topology:
        controlPlane:
          replicas: 1
    ...
    
    ...
    spec:
      topology:
        controlPlane:
          replicas: 3
    ...
    
  7. Para aplicar as alterações, salve o arquivo no editor de texto. Para cancelar, feche o editor sem salvar.

    Quando você salva as alterações do manifesto, kubectl aplica as alterações ao cluster. Em segundo plano, o Virtual Machine Service em Supervisor provisiona o novo nó do trabalhador.

  8. Verifique se os novos nós foram adicionados.
    kubectl get tanzukubernetescluster tkg-cluster-1
    O plano de controle dimensionado horizontalmente agora tem 3 nós.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

Nós de trabalho do Scale Out

É possível dimensionar horizontalmente um cluster do TKG 2 aumentando o número de nós do trabalhador.

  1. Faça login em Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Alterne o contexto para o vSphere Namespace em que o cluster TKG está em execução.
    kubectl config use-context tkg-cluster-ns
  3. Liste os clusters Kubernetes em execução no vSphere Namespace.
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por exemplo:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. Obtenha o número de nós em execução no cluster de destino.
    kubectl get tanzukubernetescluster tkg-cluster-1
    Por exemplo, o cluster a seguir tem 3 nós do plano de controle e 3 nós de trabalhador.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. Carregue o manifesto do cluster para edição usando o comando kubectl edit.
    kubectl edit tanzukubernetescluster/tkg-cluster-1

    O manifesto do cluster é aberto no editor de texto definido por suas variáveis de ambiente KUBE_EDITOR ou EDITOR.

  6. Aumente o número de nós do trabalhador editando o valor spec.topology.nodePools.NAME.replicas para o pool de nós do trabalhador de destino.
    Por exemplo:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
  7. Para aplicar as alterações, salve o arquivo no editor de texto. Para cancelar as alterações, feche o editor sem salvar.

    Quando você salva o arquivo, kubectl aplica as alterações ao cluster. Em segundo plano, o Virtual Machine Service em Supervisor provisiona o novo nó do trabalhador.

  8. Verifique se o novo nó do trabalhador foi adicionado.
    kubectl get tanzukubernetescluster tkg-cluster-1
    Após a expansão, o cluster tem 4 nós do trabalhador.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

Dimensionar nós de trabalhador

Você pode dimensionar em um cluster do TKG 2 diminuindo o número de nós do trabalhador.

  1. Faça login em Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Alterne o contexto para o vSphere Namespace em que o cluster TKG está em execução.
    kubectl config use-context tkg-cluster-ns
  3. Liste os clusters Kubernetes em execução no vSphere Namespace.
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por exemplo:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. Obtenha o número de nós em execução no cluster de destino.
    kubectl get tanzukubernetescluster tkg-cluster-1
    Por exemplo, o cluster a seguir tem 3 nós do plano de controle e 4 nós do trabalhador.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster      3               4        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    
  5. Carregue o manifesto do cluster para edição usando o comando kubectl edit.
    kubectl edit tanzukubernetescluster/tkg-cluster-1

    O manifesto do cluster é aberto no editor de texto definido por suas variáveis de ambiente KUBE_EDITOR ou EDITOR.

  6. Diminua o número de nós do trabalhador editando o valor spec.topology.nodePools.NAME.replicas para o pool de nós do trabalhador de destino.
    Por exemplo:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
  7. Para aplicar as alterações, salve o arquivo no editor de texto. Para cancelar as alterações, feche o editor sem salvar.

    Quando você salva o arquivo, kubectl aplica as alterações ao cluster. Em segundo plano, o Virtual Machine Service em Supervisor provisiona o novo nó do trabalhador.

  8. Verifique se os nós do trabalhador foram removidos.
    kubectl get tanzukubernetescluster tkg-cluster-1
    Após a redução, o cluster tem 3 nós do trabalhador.
    NAMESPACE             NAME             CONTROL PLANE   WORKER   TKR NAME                           AGE     READY
    tkg-cluster-ns        tkg-cluster-1    3               3        v1.21.2---vmware.1-tkg.1.13da849   5d12h   True
    

Dimensionar um cluster verticalmente

O TKG 2 em Supervisor é compatível com o dimensionamento vertical para o plano de controle do cluster e os nós do trabalhador. Você dimensiona um cluster TKG verticalmente alterando a classe de máquina virtual usada para nós de cluster. A classe de VM que você usa deve estar associada ao vSphere Namespace em que o cluster TKG é provisionado.

O TKG 2 em Supervisor é compatível com o dimensionamento vertical por meio do mecanismo de atualização sem interrupção integrado ao sistema. Quando você altera a definição VirtualMachineClass, o sistema implementa novos nós com essa nova classe e desativa os nós antigos. Consulte Mantendo clusters do TKG 2 em Supervisor.

  1. Faça login em Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Alterne o contexto para o vSphere Namespace em que o cluster TKG está em execução.
    kubectl config use-context tkg-cluster-ns
  3. Liste os clusters Kubernetes em execução no vSphere Namespace.
    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por exemplo:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
  4. Descreva o cluster TKG de destino e verifique a classe da VM.
    kubectl describe tanzukubernetescluster tkg-cluster-1

    Por exemplo, o cluster a seguir está usando a classe de VM de melhor esforço médio.

    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-medium
          ...
    
  5. Liste e descreva as classes de VM disponíveis.
    kubectl get virtualmachineclassbinding
    kubectl describe virtualmachineclassbinding
    Observação: A classe de VM deve estar associada ao vSphere Namespace. Consulte Usando classes de máquina virtual com clusters TKG 2 em Supervisor.
  6. Abra para editar o manifesto do cluster de destino.
    kubectl edit tanzukubernetescluster/tkg-cluster-1

    O manifesto do cluster é aberto no editor de texto definido por suas variáveis de ambiente KUBE_EDITOR ou EDITOR.

  7. Edite o manifesto alterando a classe da VM.
    Por exemplo, o cluster usa a classe de VM best-effort-xsmall para o plano de controle e os nós do trabalhador.
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: best-effort-xsmall
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: best-effort-xsmall
          ...
    
    Altere a classe de VM para o plano de controle para guaranteed-large e a classe de VM para nós de trabalhador para guaranteed-2xlarge.
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-large
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-2xlarge
          ...
    
  8. Para aplicar as alterações, salve o arquivo no editor de texto. Para cancelar as alterações, feche o editor sem salvar.

    Quando você salva o arquivo, kubectl aplica as alterações ao cluster. Em segundo plano, o TKG em Supervisor executa uma atualização sem interrupção do cluster do TKG.

  9. Verifique se o cluster TKG está atualizado com a nova classe de VM.
    kubectl describe tanzukubernetescluster tkg-cluster-1

Dimensionar volumes de nós de cluster do TKG

Na especificação de cluster do TKG para nós, opcionalmente, você pode declarar um ou mais volumes persistentes para o nó. Declarar um volume de nó é útil para componentes de alta rotatividade, como o banco de dados ectd no plano de controle e o tempo de execução do contêiner e o kubelet nos nós do trabalhador.

Se você quiser adicionar ou alterar um ou mais volumes de nós após a criação do cluster, lembre-se das seguintes considerações:
Nó de volume Descrição

As alterações de volume do nó do trabalhador são permitidas

Depois que um cluster TKG é provisionado, você pode adicionar ou atualizar volumes de nós do trabalhador. Quando você inicia uma atualização sem interrupção, o cluster é atualizado com o volume novo ou alterado.

Aviso: Se você dimensionar o nó do trabalhador com um volume novo ou alterado, os dados no volume atual serão excluídos durante a atualização sem interrupção. Consulte a explicação a seguir.

Um volume declarado para um nó de cluster TKG é tratado como efêmero. Um cluster TKG usa uma declaração de volume persistente (PVC) no namespace vSphere para que a capacidade do volume seja contabilizada na cota de armazenamento do cluster TKG. Se você aumentar a capacidade de um volume de TKC, a Kubernetes Cluster API (CAPI) implementará novos workers com um novo PVC. A TKG não realiza nenhuma migração de dados nesse caso, mas o Kubernetes (re)agendará os pods de carga de trabalho adequadamente.

Não são permitidas alterações de volume do nó do plano de controle

Depois que um cluster TKG é provisionado, não é possível adicionar ou atualizar um volume de nó do plano de controle. A Kubernetes Cluster API (CAPI) proíbe alterações pós-criação em spec.toplogy.controlPlane.volumes.

Se você tentar adicionar ou alterar um volume do plano de controle após a criação do cluster, a solicitação será negada e você receberá a mensagem de erro "atualizações para campos imutáveis não são permitidas".

Uma especificação de cluster extraída com volumes de nós declarados é fornecida para fins de contexto. Consulte o exemplo completo do cluster TKG do qual este trecho é obtido conforme necessário: Exemplo de v1alpha3: TKC com armazenamento padrão e volumes de nós.
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TanzuKubernetesCluster
...
spec:
   topology:
     controlPlane:
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-medium
       tkr:
         reference:
           name: v1.22.8---vmware.1-tkg.2-zshippable
       volumes:
       - name: etcd
         mountPath: /var/lib/etcd
         capacity:
           storage: 4Gi
     nodePools:
     - name: worker-nodepool-a1
       replicas: 3
       storageClass: tkg-storage-policy
       vmClass: guaranteed-large
       tkr:
         reference:
           name: v1.23.8---vmware.2-tkg.2-zshippable
       volumes:
       - name: containerd
         mountPath: /var/lib/containerd
         capacity:
           storage: 50Gi
       - name: kubelet
         mountPath: /var/lib/kubelet
         capacity:
           storage: 50Gi
     - name: worker-nodepool-a2
       ...
   settings:
     ...

Dimensionando nós de trabalhador de cluster do TKG usando a CLI Tanzu

Para dimensionar os nós do trabalhador de cluster do TKG usando a CLI Tanzu, use a seguinte sintaxe.
Observação: Consulte o TanzuGuia de Referência da CLI para obter detalhes completos de uso.
tanzu cluster scale CLUSTER-NAME -p POOL-NAME -w REPLICAS -n VSPHERE-NAMESPACE
Onde:
  • CLUSTER-NAME é o nome do cluster TKG que você está direcionando para dimensionar
  • POOL-NAME é o nome do pool de nós do trabalhador que você está direcionando
  • REPLICAS é o número de destino de nós do trabalhador (inteiro)
  • VSPHERE-NAMESPACE é o vSphere Namespace em que o cluster TKG de destino é provisionado
Por exemplo:
tanzu cluster scale tkg2-cluster-1 -p node-pool-1 -w 3 -n tkg-cluster-ns