Puede escalar un clúster de servicio TKG horizontalmente cambiando el número de nodos, o bien verticalmente cambiando la clase de máquina virtual que aloja los nodos. También puede escalar volúmenes asociados a nodos del clúster.

Operaciones de escala manual admitidas

En la tabla se enumeran las operaciones de escalado admitidas para clústeres de TKG.
Tabla 1. Operaciones de escalado admitidas para clústeres de TKGS
Nodo Expansión horizontal Reducción horizontal Ampliación vertical Escala de volumen
Plano de control No Sí*
Trabajador
Tenga en cuenta las siguientes consideraciones:
  • La cantidad de nodos de plano de control debe ser impar, ya sea 1 o 3. Se admite el escalado horizontal del plano de control, pero no se admite la reducción horizontal del plano de control. Consulte Ampliar horizontalmente el plano de control.
  • Al escalar verticalmente un nodo de clúster, es posible que las cargas de trabajo ya no puedan ejecutarse en el nodo por falta de recursos disponibles. Por lo tanto, el escalado horizontal es generalmente el método preferido. Consulte Escalar horizontalmente los nodos de trabajo.
  • Las clases de máquina virtual no son inmutables. Si se escala horizontalmente un clúster de TKG después de editar una clase de máquina virtual utilizada por ese clúster, los nuevos nodos del clúster utilizan la definición de clase actualizada, pero los nodos del clúster existentes siguen usando la definición de clase inicial, lo que provoca un error de coincidencia. Consulte Acerca de las clases de máquina virtual.
  • Los volúmenes de nodos de trabajo se pueden cambiar después del aprovisionamiento. Del mismo modo, los nodos del plano de control se pueden cambiar siempre que utilice vSphere 8 U3 o una versión posterior y un TKr compatible. Consulte Escalar volúmenes de nodos de clúster.

Requisito previo para la ampliación: configurar la edición de Kubectl

Para escalar un clúster de TKG, actualiza el manifiesto del clúster usando el comando kubectl edit CLUSTER-KIND/CLUSTER-NAME. Al guardar los cambios en el manifiesto, el clúster se actualiza con los cambios. Consulte Configurar un editor de texto para Kubectl.

Por ejemplo:
kubectl edit tanzukubernetescluster/tkg-cluster-1
tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 edited
Para cancelar los cambios, cierre el editor sin guardar.
kubectl edit tanzukubernetescluster/tkg-cluster-1
Edit cancelled, no changes made.

Ampliar horizontalmente el plano de control

Para escalar horizontalmente un clúster de TKG, aumente el número de nodos del plano de control de 1 a 3.
Nota: Los clústeres de producción requieren 3 nodos del plano de control.
  1. Inicie sesión en Supervisor.
    kubectl vsphere login --server=SUPERVISOR-IP-ADDRESS --vsphere-username USERNAME
  2. Cambie el contexto al espacio de nombres de vSphere en el que se ejecuta el clúster de TKG.
    kubectl config use-context tkg-cluster-ns
  3. Enumere los clústeres de Kubernetes que se ejecutan en espacio de nombres de vSphere.

    Utilice la sintaxis siguiente:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1alpha3:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1beta1:
    kubectl get cluster -n tkg-cluster-ns
  4. Obtenga la cantidad de nodos que se ejecutan en el clúster de destino.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    El clúster de TKG tiene 1 nodo de plano de control y 3 nodos de trabajo.
    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
    

    Para un clúster de API v1beta1:

    kubectl get cluster tkg-cluster-1
  5. Cargue el manifiesto del clúster para editarlo ejecutando el comando kubectl edit.
    Para un clúster de API v1alpha3:
    kubectl edit tanzukubernetescluster/tkg-cluster-1
    Para un clúster de API v1beta1:
    kubectl edit cluster/tkg-cluster-1

    El manifiesto del clúster se abrirá en el editor de texto que definan las variables de entorno KUBE_EDITOR o EDITOR.

  6. Aumente el número de nodos del plano de control de 1 a 3 en la sección spec.topology.controlPlane.replicas del manifiesto.
    Para un clúster de API v1alpha3:
    ...
    spec:
      topology:
        controlPlane:
          replicas: 1
    ...
    
    ...
    spec:
      topology:
        controlPlane:
          replicas: 3
    ...
    
    Para un clúster de API v1beta1:
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 1
        variables:
    ...
    
    ...
    spec:
      ...
      topology:
        class: tanzukubernetescluster
        controlPlane:
          metadata: {}
          replicas: 3
        variables:
    ...
    
  7. Guarde el archivo en el editor de texto para aplicar los cambios. (Para cancelar, cierre el editor sin guardar).

    Cuando guarde el manifiesto, kubectl aplicará los cambios al clúster. En segundo plano, la instancia de servicio de máquina virtual de Supervisor aprovisiona el nuevo nodo de plano de control.

  8. Compruebe que se agreguen los nodos nuevos.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    El plano de control que se amplió horizontalmente ahora tiene 3 nodos.
    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
    

    Para un clúster de API v1beta1:

    kubectl get cluster tkg-cluster-1

Escalar horizontalmente los nodos de trabajo

Para escalar horizontalmente un clúster de TKG, aumente el número de nodos de trabajo.

  1. Inicie sesión en Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Cambie el contexto al espacio de nombres de vSphere en el que se ejecuta el clúster de TKG.
    kubectl config use-context tkg-cluster-ns
  3. Enumere los clústeres de Kubernetes que se ejecutan en espacio de nombres de vSphere.

    Utilice la sintaxis siguiente:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1alph3:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1beta1:
    kubectl get cluster -n tkg-cluster-ns
  4. Obtenga la cantidad de nodos que se ejecutan en el clúster de destino.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    Por ejemplo, el siguiente clúster tiene 3 nodo de plano de control y 3 nodos de trabajo.
    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
    
    Para un clúster de API v1beta1:
    kubectl get cluster tkg-cluster-1
  5. Cargue el manifiesto del clúster para editarlo ejecutando el comando kubectl edit.

    Para un clúster de API v1alpha3:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    Para un clúster de API v1beta1:
    kubectl edit cluster/tkg-cluster-1

    El manifiesto del clúster se abrirá en el editor de texto que definan las variables de entorno KUBE_EDITOR o EDITOR.

  6. Aumente el número de nodos de trabajo editando el valor spec.topology.nodePools.NAME.replicas del grupo de nodos de trabajo de destino.
    Para un clúster de API v1alpha3:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    Para un clúster de API v1beta1:
    ...
    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. Para aplicar los cambios, guarde el archivo en el editor de texto. Para cancelar los cambios, cierre el editor sin guardar.

    Cuando guarde el archivo, kubectl aplicará los cambios al clúster. En segundo plano, el servicio de máquina virtual del Supervisor aprovisiona el nuevo nodo de trabajo.

  8. Compruebe que se agreguen los nodos nuevos.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    Después de ampliar, el clúster tiene 4 nodos de trabajo.
    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
    

    Para un clúster de API v1beta1:

    kubectl get cluster tkg-cluster-1

Reducir los nodos de trabajo

Para reducir horizontalmente un clúster de TKG, disminuya el número de nodos de trabajo.

  1. Inicie sesión en Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Cambie el contexto al espacio de nombres de vSphere en el que se ejecuta el clúster de TKG.
    kubectl config use-context tkg-cluster-ns
  3. Enumere los clústeres de Kubernetes que se ejecutan en espacio de nombres de vSphere.

    Utilice la sintaxis siguiente:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1alph3:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1beta1:
    kubectl get cluster -n tkg-cluster-ns
  4. Obtenga la cantidad de nodos que se ejecutan en el clúster de destino.
    kubectl get tanzukubernetescluster tkg-cluster-1
  5. Obtenga la cantidad de nodos que se ejecutan en el clúster de destino.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    Por ejemplo, el siguiente clúster tiene 3 nodo de plano de control y 4 nodos de trabajo.
    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
    
    Para un clúster de API v1beta1:
    kubectl get cluster tkg-cluster-1
  6. Cargue el manifiesto del clúster para editarlo ejecutando el comando kubectl edit.

    Para un clúster de API v1alpha3:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    Para un clúster de API v1beta1:
    kubectl edit cluster/tkg-cluster-1

    El manifiesto del clúster se abrirá en el editor de texto que definan las variables de entorno KUBE_EDITOR o EDITOR.

  7. Reduzca el número de nodos de trabajo editando el valor spec.topology.nodePools.NAME.replicas del grupo de nodos de trabajo de destino.
    Para un clúster de API v1alpha3:
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 4
    ...
    ...
    spec:
      topology:
        ...
        nodePools:
        - name: worker-1
          replicas: 3
    ...
    Para un clúster de API v1beta1:
    ...
    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. Para aplicar los cambios, guarde el archivo en el editor de texto. Para cancelar los cambios, cierre el editor sin guardar.

    Cuando guarde el archivo, kubectl aplicará los cambios al clúster. En segundo plano, el servicio de máquina virtual del Supervisor aprovisiona el nuevo nodo de trabajo.

  9. Compruebe que se hayan agregado los nodos de trabajo.

    Para un clúster de API v1alpha3:

    kubectl get tanzukubernetescluster tkg-cluster-1
    Después de reducir, el clúster tiene 3 nodos de trabajo.
    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
    

    Para un clúster de API v1beta1:

    kubectl get cluster tkg-cluster-1

Ampliar un clúster verticalmente

TKG en Supervisor admite el escalado vertical para los nodos de trabajo y de plano de control del clúster. Para escalar verticalmente un clúster de TKG, cambie la clase de máquina virtual que se utiliza para los nodos del clúster. La clase de máquina virtual que use debe estar enlazada al espacio de nombres de vSphere donde se aprovisiona el clúster de TKG.

TKG en Supervisor admite el escalado vertical a través del mecanismo de actualización gradual integrado en el sistema. Si cambia la definición de VirtualMachineClass, el servicio implementa gradualmente los nodos nuevos con esa nueva clase y reduce la velocidad de los nodos antiguos. Consulte Actualizar clústeres de servicio TKG.

  1. Inicie sesión en Supervisor.
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  2. Cambie el contexto al espacio de nombres de vSphere en el que se ejecuta el clúster de TKG.
    kubectl config use-context tkg-cluster-ns
  3. Enumere los clústeres de Kubernetes que se ejecutan en espacio de nombres de vSphere.

    Utilice la sintaxis siguiente:

    kubectl get CLUSTER-KIND -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1alph3:
    kubectl get tanzukubernetescluster -n tkg-cluster-ns
    Por ejemplo, para un clúster de API v1beta1:
    kubectl get cluster -n tkg-cluster-ns
  4. Describa el clúster de TKG de destino y compruebe la clase de máquina virtual.

    Para un clúster de API v1alpha3:

    kubectl describe tanzukubernetescluster tkg-cluster-1

    Por ejemplo, el siguiente clúster utiliza la clase de máquina virtual best-effort-medium.

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

    Para un clúster de API v1beta1:

    kubectl describe cluster tkg-cluster-1

    Por ejemplo, el siguiente clúster utiliza la clase de máquina virtual best-effort-medium.

    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  best-effort-medium
        ...
    Nota: Para los clústeres de API v1beta1, vmClass se establece globalmente como una sola variable de forma predeterminada. Puede anular esta configuración y utilizar una clase de máquina virtual diferente para los nodos del plano de control y los nodos de trabajo. Consulte vmClassen la referencia de la API.
  5. Enumere y describa las clases de máquinas virtuales disponibles.
    kubectl get virtualmachineclass
    kubectl describe virtualmachineclass
    Nota: La clase de máquina virtual debe estar enlazada al espacio de nombres de vSphere. Consulte Uso de clases de máquinas virtuales con clústeres de Servicio TKG.
  6. Abra para editar el manifiesto del clúster de destino.

    Para un clúster de API v1alpha3:

    kubectl edit tanzukubernetescluster/tkg-cluster-1
    Para un clúster de API v1beta1:
    kubectl edit cluster/tkg-cluster-1

    El manifiesto del clúster se abrirá en el editor de texto que definan las variables de entorno KUBE_EDITOR o EDITOR.

  7. Edite el manifiesto cambiando la clase de máquina virtual.
    Para un clúster de API v1alpha3, cambie la clase de máquina virtual del plano de control a guaranteed-medium y la clase de máquina virtual para los nodos de trabajo a guaranteed-large.
    spec:
      topology:
        controlPlane:
          replicas: 3
          vmClass: guaranteed-medium
          ...
        nodePools:
        - name: worker-nodepool-a1
          replicas: 3
          vmClass: guaranteed-large
          ...
    
    Para un clúster de API v1beta, cambie la clase de máquina virtual a guaranteed-large.
    ...
    Topology:
          ...
        Variables:
          ...
          Name:   vmClass
          Value:  guaranteed-large
        ...
  8. Para aplicar los cambios, guarde el archivo en el editor de texto. Para cancelar los cambios, cierre el editor sin guardar.

    Cuando guarde el archivo, kubectl aplicará los cambios al clúster. En segundo plano, el TKG en Supervisor realiza una actualización gradual del clúster de TKG.

  9. Compruebe que el clúster de TKG esté actualizado con la nueva clase de máquina virtual.

    Para un clúster de API v1alpha3:

    kubectl describe tanzukubernetescluster tkg-cluster-1

    Para un clúster de API v1beta1:

    kubectl describe cluster tkg-cluster-1

Escalar volúmenes de nodos de clúster

En la especificación del clúster de TKG para los nodos, de forma opcional, puede declarar uno o varios volúmenes persistentes para el nodo. La declaración de un volumen de nodos es útil para los componentes de alta rotación como el tiempo de ejecución del contenedor y kubelet en los nodos de trabajo.

Si desea agregar o cambiar uno o más volúmenes de nodos después de la creación del clúster, tenga en cuenta las siguientes consideraciones:
Nodo de volumen Descripción

Se permiten cambios en el volumen del nodo de trabajo

Después de aprovisionar un clúster de TKG, puede agregar o actualizar volúmenes de nodo de trabajo. Cuando se inicia una actualización gradual, el clúster se actualiza con el volumen nuevo o cambiado.

Advertencia: Si escala el nodo de trabajo con un volumen nuevo o modificado, los datos del volumen actual se eliminan durante la actualización gradual. Consulte la explicación que aparece a continuación.

Un volumen declarado para un nodo de clúster de TKG se considera efímero. Un clúster de TKG utiliza una notificación de volumen persistente (PVC) en el espacio de nombres de vSphere para que la capacidad del volumen se cuente para la cuota de almacenamiento del clúster de TKG. Si aumenta la capacidad de un volumen TKC, la API del clúster de Kubernetes (CAPI) implementará nuevos trabajos con una nueva PVC. TKG no realiza ninguna migración de datos en este caso, pero Kubernetes (re)programará los pods de carga de trabajo según corresponda.

Se permiten cambios en el volumen de nodo de plano de control si utiliza vSphere 8 U3 o una versión posterior

Si utiliza vSphere 8 U3 o una versión posterior y una versión de Tanzu Kubernetes compatible, puede agregar o actualizar un volumen de nodo de plano de control después de que se haya aprovisionado un clúster de servicio TKG.

Si no utiliza vSphere 8 U3 o una versión posterior, la API de clúster de Kubernetes (CAPI) prohíbe los cambios posteriores a la creación en spec.toplogy.controlPlane.volumes.

Si intenta agregar o cambiar un volumen del plano de control después de la creación del clúster, se rechaza la solicitud y se recibe el mensaje de error "No se permiten las actualizaciones de los campos inmutables".

A continuación se muestra una especificación de clúster extraída basada en la API v1alpha3 con volúmenes de nodo declarados. Consulte el ejemplo de clúster de TKG completo del que se toma este extracto según sea necesario: Ejemplo de v1alpha3: TKC con almacenamiento predeterminado y volúmenes de nodos. Para ver un ejemplo de clúster de API v1beta1, consulte Ejemplo de v1beta1: clúster personalizado basado en la ClusterClass predeterminada.

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:
     ...