Implementar clústeres de carga de trabajo en varias zonas de disponibilidad (vista previa técnica de vSphere)

Para habilitar varias zonas de disponibilidad para clústeres de carga de trabajo en vSphere, se introdujeron dos nuevas definiciones de recursos personalizadas (CRD) en el vSphere del proveedor de API del clúster (CAPV).

  • La CRD de VSphereFailureDomain captura la información de etiquetado específica de la región o la zona y la definición de topología, que incluye información del centro de datos, el clúster, el host y el almacén de datos de vSphere.
  • La CRD de VSphereDeploymentZone captura la asociación de un VSphereFailureDomain con información de restricción de colocación para el nodo de Kubernetes.
Nota

Esta función se encuentra en el estado de vista previa técnica no compatible; consulte Estados de funciones de TKG.

Las configuraciones de este tema distribuyen los nodos de trabajo y el plano de control de Kubernetes entre objetos vSphere, concretamente hosts y clústeres de proceso y centros de datos.

Distribuir nodos entre varios clústeres de proceso en un centro de datos

El ejemplo de esta sección muestra cómo lograr varias zonas de disponibilidad mediante la distribución de nodos entre varios clústeres de proceso.

  1. Cree los recursos personalizados para definir la región y las zonas.

    • Todos los elementos de spec.region, spec.zone y spec.topology deben coincidir con lo que configuró en vCenter.
    • Para los objetos VSphereDeploymentZone, el valor spec.failuredomain debe coincidir con uno de los valores metadata.name de las definiciones VSphereFailureDomain
    • El valor spec.server en los objetos VSphereDeploymentZone debe coincidir con la dirección del vCenter Server (IP o FQDN) introducida para VCENTER SERVER en el panel Proveedor de IaaS (IaaS Provider) de la interfaz del instalador o el ajuste VSPHERE_SERVER en el archivo de configuración del clúster de administración.
    • Los valores metadata.name deben estar todos en minúscula.

    Para distribuir los nodos de Kubernetes para un clúster de carga de trabajo entre varios clústeres de proceso dentro de un centro de datos, debe crear recursos personalizados. En este ejemplo se describen 3 zonas de implementación denominadas us-west-1a, us-west-1b y us-west-1c, cada una de ellas es un clúster de proceso con sus parámetros de red y almacenamiento.

    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: us-west-1a
    spec:
     region:
       name: us-west-1
       type: Datacenter
       tagCategory: k8s-region
     zone:
       name: us-west-1a
       type: ComputeCluster
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster1
       datastore: ds-c1
       networks:
       - net1
       - net2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: us-west-1b
    spec:
     region:
       name: us-west-1
       type: Datacenter
       tagCategory: k8s-region
     zone:
       name: us-west-1b
       type: ComputeCluster
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster2
       datastore: ds-c2
       networks:
       - net3
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: us-west-1c
    spec:
     region:
       name: us-west-1
       type: Datacenter
       tagCategory: k8s-region
     zone:
       name: us-west-1c
       type: ComputeCluster
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster3
       datastore: ds-c3
       networks:
       - net4
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: us-west-1a
    spec:
     server: VSPHERE_SERVER
     failureDomain: us-west-1a
     placementConstraint:
       resourcePool: pool1
       folder: foo
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: us-west-1b
    spec:
     server: VSPHERE_SERVER
     failureDomain: us-west-1b
     placementConstraint:
       resourcePool: pool2
       folder: bar
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: us-west-1c
    spec:
     server: VSPHERE_SERVER
     failureDomain: us-west-1c
     placementConstraint:
       resourcePool: pool3
       folder: baz
    

    Donde VSPHERE_SERVER es la dirección IP o el FQDN de su vCenter Server.

    Si diferentes clústeres de proceso tienen grupos de recursos con nombres idénticos, establezca los objetos VSphereDeploymentZone spec.placementConstraint.resourcePool en una ruta de recursos completa, no solo el nombre.

    Nota

    Para los objetos vsphereDeploymentZone, spec.placementConstraint es opcional.

  2. Etiquete los objetos vSphere.

    Desde el primer CR VSphereFailureDomain denominado us-west-1a, utilice govc para aplicar las siguientes etiquetas al centro de datos dc0 y al clúster de proceso cluster1.

    govc tags.attach -c k8s-region us-west-1 /dc0
    
    govc tags.attach -c k8s-zone us-west-1a /dc0/host/cluster1
    

    De forma similar, realice las siguientes operaciones de etiquetado para los otros clústeres de proceso.

    govc tags.attach -c k8s-zone us-west-1b /dc0/host/cluster2
    
    govc tags.attach -c k8s-zone us-west-1c /dc0/host/cluster3
    

    Puede omitir este paso si spec.region.autoConfigure y spec.zone.autoConfigure están establecidos en true al crear los CR VSphereFailureDomain.

Para conocer los siguientes pasos para implementar el clúster, consulte Implementar un clúster de carga de trabajo con nodos repartidos entre las zonas de disponibilidad.

Distribuir nodos entre varios hosts en un único clúster de proceso

El ejemplo de esta sección distribuye los nodos del clúster de carga de trabajo en 3 grupos de hosts diferentes en un solo clúster.

  1. En vCenter Server, cree grupos de hosts, por ejemplo, rack1 y grupos de máquinas virtuales, por ejemplo, rack1-vm-group, para cada dominio de errores.

    • Crear grupos de máquinas virtuales y hosts desde Configurar (Configure) > Grupos de hosts/VM (VM/Host Groups) > Añadir (Add)…
    • La cantidad de grupos de hosts debe coincidir con la cantidad de zonas de disponibilidad que planea utilizar.
    • Para crear un grupo de máquinas virtuales, es posible que deba crear una máquina virtual ficticia para agregarla como miembro del grupo.
    • Si lo prefiere, puede utilizar govc para crear grupos de máquinas virtuales y hosts mediante la ejecución de comandos similares a los siguientes, sin tener que crear una máquina virtual ficticia:

      govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1 -host esx-01a.corp.tanzu esx-02a.corp.tanzu
      
      govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1-vm-group -vm
      
  2. Agregue reglas de afinidad entre los grupos de hosts y los grupos de máquinas virtuales creados para que las máquinas virtuales del grupo de máquinas virtuales se ejecuten en los hosts del grupo de hosts creado.

    • Establezca Tipo (Type) en Virtual Machines to Hosts (Máquinas virtuales en los hosts) e incluya la regla Debe ejecutarse en los hosts del grupo (Must run on hosts in group).
  3. Cree los recursos personalizados VSphereFailureDomain y VSphereDeploymentZone en un archivo vsphere-zones.yaml.

    • Todos los elementos de spec.region, spec.zone y spec.topology deben coincidir con lo que configuró en vCenter.
    • Para los objetos VSphereDeploymentZone, el valor spec.failuredomain debe coincidir con uno de los valores metadata.name de las definiciones VSphereFailureDomain
    • El valor spec.server en los objetos VSphereDeploymentZone debe coincidir con la dirección del vCenter Server (IP o FQDN) introducida para VCENTER SERVER en el panel Proveedor de IaaS (IaaS Provider) de la interfaz del instalador o el ajuste VSPHERE_SERVER en el archivo de configuración del clúster de administración.
    • Los valores metadata.name deben estar todos en minúscula.

    Por ejemplo, los siguientes archivos vsphere-zones.yaml definen tres zonas dentro de una región room1, donde cada zona es un rack de hosts dentro del mismo clúster.

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: rack1
    spec:
     region:
       name: room1
       type: ComputeCluster
       tagCategory: k8s-region
     zone:
       name: rack1
       type: HostGroup
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster1
       hosts:
         vmGroupName: rack1-vm-group
         hostGroupName: rack1
       datastore: ds-r1
       networks:
       - net1
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: rack2
    spec:
     region:
       name: room1
       type: ComputeCluster
       tagCategory: k8s-region
     zone:
       name: rack2
       type: HostGroup
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster1
       hosts:
         vmGroupName: rack2-vm-group
         hostGroupName: rack2
       datastore: ds-r2
       networks:
       - net2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereFailureDomain
    metadata:
     name: rack3
    spec:
     region:
       name: room1
       type: ComputeCluster
       tagCategory: k8s-region
     zone:
       name: rack3
       type: HostGroup
       tagCategory: k8s-zone
     topology:
       datacenter: dc0
       computeCluster: cluster1
       hosts:
         vmGroupName: rack3-vm-group
         hostGroupName: rack3
       datastore: ds-c3
       networks:
       - net3
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: rack1
    spec:
     server: VSPHERE_SERVER
     failureDomain: rack1
     placementConstraint:
       resourcePool: pool1
       folder: foo
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: rack2
    spec:
     server: VSPHERE_SERVER
     failureDomain: rack2
     placementConstraint:
       resourcePool: pool2
       folder: bar
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: VSphereDeploymentZone
    metadata:
     name: rack3
    spec:
     server: VSPHERE_SERVER
     failureDomain: rack3
     placementConstraint:
       resourcePool: pool3
       folder: baz
    

    Donde VSPHERE_SERVER es la dirección IP o el FQDN de su vCenter Server.

  4. Aplique el archivo CR para crear los objetos VSphereFailureDomain y VSphereDeploymentZone:

    kubectl apply -f vsphere-zones.yaml
    
  5. Utilice govc para crear categorías de etiquetas y etiquetas para regiones y zonas, con el fin de aplicarlas a los hosts y los clústeres de proceso enumerados en los CR VSphereFailureDomain.

    • Cree una categoría de etiqueta de región y etiquetas para clústeres de proceso, por ejemplo:
    govc tags.category.create -t ClusterComputeResource k8s-region
    
    govc tags.create -c k8s-region room1
    

    Repítalo para todas las regiones:

    govc tags.create -c k8s-region REGION
    
    • Cree una categoría de etiqueta de zona y etiquetas para hosts, por ejemplo:
    govc tags.category.create -t HostSystem k8s-zone
    
    govc tags.create -c k8s-zone rack1
    

    Repítalo para todas las zonas:

    govc tags.create -c k8s-zone ZONE
    

    Como alternativa, puede realizar las operaciones de etiqueta en este paso y los siguientes en el panel Etiquetas y atributos personalizados de vCenter.

  6. Asocie las etiquetas de región a todos los clústeres de proceso enumerados en las definiciones de CR, por ejemplo:

    govc tags.attach -c k8s-region room1 /dc1/host/room1-mgmt
    

    Utilice la ruta completa para cada clúster de proceso.

  7. Asocie las etiquetas de zona a todos los objetos de host enumerados en las definiciones de CR, por ejemplo:

    govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
    

    Utilice la ruta de acceso completa para cada host.

Para conocer los siguientes pasos para implementar el clúster, consulte Implementar un clúster de carga de trabajo con nodos repartidos entre las zonas de disponibilidad.

Implementar un clúster de carga de trabajo con nodos distribuidos entre zonas de disponibilidad

Después de realizar los pasos descritos en Distribuir nodos entre varios clústeres de proceso en un centro de datos o Distribuir nodos entre varios hosts en un solo clúster de proceso, puede implementar un clúster de carga de trabajo con sus nodos repartidos en varias zonas de disponibilidad.

  1. Cree el archivo de configuración del clúster para el clúster de carga de trabajo que va a implementar.

    • Establezca VSPHERE_REGION y VSPHERE_ZONE en las categorías de etiquetas de región y zona, k8s-region y k8s-zone en el ejemplo anterior.
    • Establezca VSPHERE_AZ_0, VSPHERE_AZ_1, VSPHERE_AZ_2 con los nombres de los objetos VsphereDeploymentZone en los que se deben implementar las máquinas.
    • La instancia de VsphereDeploymentZone asociada con VSPHERE_AZ_0 es el failureDomain en el que se implementa la implementación de la máquina que termina con md-0, de forma similar VSPHERE_AZ_1 es el failureDomain en el que se implementa la máquina que termina en md-1 y VSPHERE_AZ_2 es el failureDomain en el que se implementa la máquina que termina en md-2
    • Si alguna de las configuraciones de AZ no está definida, la implementación de la máquina se implementará sin ningún failureDomain
    • WORKER_MACHINE_COUNT establece el número total de trabajos para el clúster. El número total de trabajadores se distribuye por turnos entre el número de AZ especificadas

    Para obtener la lista completa de opciones que debe especificar al implementar clústeres de carga de trabajo en vSphere, consulte la Referencia de variables del archivo de configuración.

  2. Ejecute tanzu cluster create para crear el clúster de carga de trabajo. Para obtener más información, consulte Crear clústeres de carga de trabajo.

    • Durante el proceso de creación del clúster, puede ver que sus máquinas virtuales y otros recursos aparecen en vCenter.
    • Si creó una máquina virtual ficticia en vCenter para crear un grupo de máquinas virtuales, puede eliminar la máquina virtual de los grupos de máquinas virtuales una vez que el clúster esté en ejecución.
check-circle-line exclamation-circle-line close-line
Scroll to top icon