Crea un clúster para ejecutar cargas de trabajo de contenedores

Crea un clúster de Kubernetes para permitir la implementación de cargas de trabajo de contenedores. Los clústeres son un recurso zonal y no pueden abarcar varias zonas. Para operar clústeres en una implementación de varias zonas, debes crear clústeres de forma manual en cada zona.

Antes de comenzar

Para obtener los permisos necesarios para crear un clúster de Kubernetes, pídele a tu administrador de IAM de la organización que te otorgue el rol de administrador de clústeres de usuarios (user-cluster-admin). Este rol no está vinculado a un espacio de nombres.

Google Distributed Cloud (GDC) aislado tiene los siguientes límites para los clústeres de Kubernetes:

  • 16 clústeres por organización
  • 42 nodos trabajadores por clúster y un mínimo de tres nodos trabajadores
  • 4,620 Pods por clúster
  • 110 pods por nodo

Configura el bloque CIDR del pod

El clúster sigue esta lógica cuando asigna direcciones IP:

  • Kubernetes asigna un bloque CIDR /24 que consta de 256 direcciones a cada uno de los nodos. Esta cantidad se ajusta al máximo predeterminado de 110 Pods por nodo para los clústeres de usuarios.
  • El tamaño del bloque CIDR asignado a un nodo depende de la cantidad máxima de Pods por valor de nodo.
  • El bloque siempre contiene al menos el doble de direcciones que la cantidad máxima de Pods por nodo.

Consulta el siguiente ejemplo para comprender cómo se calculó el valor predeterminado de Per node mask size= /24 para admitir 110 Pods:

Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220

Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256

Determina la máscara de CIDR de Pod requerida que se configurará para el clúster de usuario según la cantidad de nodos requerida. Planifica las futuras incorporaciones de nodos al clúster mientras configuras el rango de CIDR:

  Total number of nodes supported = 2(Per node mask size - pod CIDR mask)

Dado que tenemos un tamaño de máscara por nodo predeterminado= /24 , consulta la siguiente tabla que asigna la máscara de CIDR de Pod a la cantidad de nodos admitidos.

Máscara de CIDR de Pod Cálculo: 2(Tamaño de la máscara por nodo - máscara de CIDR) Cantidad máxima de nodos admitidos, incluidos los nodos del plano de control
/21 2(24 - 21) 8
/20 2(24-20) 16
/19 2(24 - 19) 32
/18 2(24 - 18) 64

Crea un clúster de Kubernetes

Completa los siguientes pasos para crear un clúster de Kubernetes:

Console

  1. En el menú de navegación, selecciona Kubernetes Engine > Clústeres.

  2. Haz clic en Crear clúster.

  3. En el campo Nombre, especifica un nombre para el clúster.

  4. Selecciona la versión de Kubernetes para el clúster.

  5. Selecciona la zona en la que deseas crear el clúster.

  6. Haz clic en Vincular proyecto y selecciona un proyecto existente para vincularlo a tu clúster. Luego, haz clic en Guardar. Puedes adjuntar o separar proyectos después de crear el clúster desde la página de detalles del proyecto. Debes tener un proyecto adjunto a tu clúster antes de implementar cargas de trabajo de contenedores en él.

    Crea un clúster con la consola.

  7. Haz clic en Siguiente.

  8. Configura los parámetros de configuración de red para tu clúster. No puedes cambiar estos parámetros de configuración de red después de crear el clúster. El único protocolo de Internet compatible y predeterminado para los clústeres de Kubernetes es la versión 4 del protocolo de Internet (IPv4).

    1. Si deseas crear nodos de balanceador de cargas dedicados, ingresa la cantidad de nodos que deseas crear. De forma predeterminada, recibes cero nodos y el tráfico del balanceador de cargas se ejecuta a través de los nodos de control.

    2. Selecciona el CIDR de servicio (enrutamiento entre dominios sin clases) que deseas usar. Tus servicios implementados, como los balanceadores de cargas, reciben direcciones IP asignadas de este rango.

    3. Selecciona el CIDR de Pod que deseas usar. El clúster asigna direcciones IP de este rango a tus Pods y VMs.

    4. Haz clic en Siguiente.

  9. Revisa los detalles del grupo de nodos predeterminado generado automáticamente para el clúster. Haz clic en Editar para modificar el grupo de nodos predeterminado.

  10. Para crear grupos de nodos adicionales, selecciona Agregar grupo de nodos. Cuando editas el grupo de nodos predeterminado o agregas un grupo de nodos nuevo, puedes personalizarlo con las siguientes opciones:

    1. Asigna un nombre al grupo de nodos. No puedes modificar el nombre después de crear el grupo de nodos.
    2. Especifica la cantidad de nodos trabajadores que se crearán en el grupo de nodos.
    3. Selecciona la clase de máquina que mejor se adapte a los requisitos de tu carga de trabajo. Consulta la lista de los siguientes parámetros de configuración:

      • Tipo de máquina
      • CPU
      • Memoria
    4. Haz clic en Guardar.

  11. Haz clic en Crear para generar el clúster.

API

Para crear un clúster nuevo directamente con la API, aplica un recurso personalizado a tu instancia de GDC:

  1. Crea un recurso personalizado Cluster y guárdalo como un archivo YAML, por ejemplo, cluster.yaml:

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: platform
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      loadBalancer:
        ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster. El nombre del clúster no debe terminar con -system. El sufijo -system está reservado para los clústeres creados por GDC.
    • POD_CIDR: Es el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales de los Pods. Si no se establece, se usa el valor predeterminado 21.
    • SERVICE_CIDR: Es el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales de servicio. Si no se establece, se usa el valor predeterminado 23.
    • KUBERNETES_VERSION: Es la versión de Kubernetes del clúster, como 1.26.5-gke.2100. Para enumerar las versiones de Kubernetes disponibles para configurar, consulta Enumera las versiones de Kubernetes disponibles para un clúster.
    • LOAD_BALANCER_POOL_SIZE: Es el tamaño de los grupos de direcciones IP no superpuestos que usan los servicios de balanceador de cargas. Si no se establece, se usa el valor predeterminado 20.
    • MACHINE_TYPE: Es el tipo de máquina para los nodos trabajadores del grupo de nodos. Consulta los tipos de máquinas disponibles para ver qué se puede configurar.
    • NODE_POOL_NAME: Es el nombre del grupo de nodos.
    • NUMBER_OF_WORKER_NODES: Es la cantidad de nodos trabajadores que se aprovisionarán en el grupo de nodos.
    • TAINTS: Son los taints que se aplicarán a los nodos de este grupo de nodos. Este paso es opcional,
    • LABELS: Son las etiquetas que se aplicarán a los nodos de este grupo de nodos. Contiene una lista de pares clave-valor. Este campo es opcional.
    • GPU_PARTITION_SCHEME: Esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Por ejemplo, mixed-2 La GPU no se particiona si no se configura este campo. Para conocer los perfiles de GPU multiinstancia (MIG) disponibles, consulta Perfiles de MIG compatibles.
  2. Aplica el recurso personalizado a tu instancia de GDC:

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

    Reemplaza MANAGEMENT_API_SERVER por la ruta de acceso al archivo kubeconfig del servidor de la API zonal. Si aún no generaste un archivo kubeconfig para el servidor de la API en la zona de destino, consulta Accede para obtener más detalles.

Terraform

  1. En un archivo de configuración de Terraform, inserta el siguiente fragmento de código:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "platform"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "loadBalancer" = {
            "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE"
          }
          "nodePools" = [{
            "machineTypeName" = "MACHINE_TYPE"
            "name" = "NODE_POOL_NAME"
            "nodeCount" = "NUMBER_OF_WORKER_NODES"
            "taints" = "TAINTS"
            "labels" = "LABELS"
            "acceleratorOptions" = {
              "gpuPartitionScheme" = "GPU_PARTITION_SCHEME"
            }
          }]
          "releaseChannel" = {
            "channel" = "UNSPECIFIED"
          }
        }
      }
    }
    

    Reemplaza lo siguiente:

    • MANAGEMENT_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de API zonal. Si aún no generaste un archivo kubeconfig para el servidor de la API en la zona de destino, consulta Accede para obtener más detalles.
    • CLUSTER_NAME: Es el nombre del clúster. El nombre del clúster no debe terminar con -system. El sufijo -system está reservado para los clústeres creados por GDC.
    • POD_CIDR: Es el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales de los Pods. Si no se establece, se usa el valor predeterminado 21.
    • SERVICE_CIDR: Es el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales de servicio. Si no se establece, se usa el valor predeterminado 23.
    • KUBERNETES_VERSION: Es la versión de Kubernetes del clúster, como 1.26.5-gke.2100. Para enumerar las versiones de Kubernetes disponibles para configurar, consulta Enumera las versiones de Kubernetes disponibles para un clúster.
    • LOAD_BALANCER_POOL_SIZE: Es el tamaño de los grupos de direcciones IP no superpuestos que usan los servicios de balanceador de cargas. Si no se establece, se usa el valor predeterminado 20.
    • MACHINE_TYPE: Es el tipo de máquina para los nodos trabajadores del grupo de nodos. Consulta los tipos de máquinas disponibles para ver qué se puede configurar.
    • NODE_POOL_NAME: Es el nombre del grupo de nodos.
    • NUMBER_OF_WORKER_NODES: Es la cantidad de nodos trabajadores que se aprovisionarán en el grupo de nodos.
    • TAINTS: Son los taints que se aplicarán a los nodos de este grupo de nodos. Este paso es opcional,
    • LABELS: Son las etiquetas que se aplicarán a los nodos de este grupo de nodos. Contiene una lista de pares clave-valor. Este campo es opcional.
    • GPU_PARTITION_SCHEME: Esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Por ejemplo, mixed-2 La GPU no se particiona si no se configura este campo. Para conocer los perfiles de GPU multiinstancia (MIG) disponibles, consulta Perfiles de MIG compatibles.
  2. Aplica el nuevo clúster de Kubernetes con Terraform:

    terraform apply
    

Enumera las versiones de Kubernetes disponibles para un clúster

Puedes enumerar las versiones de Kubernetes disponibles en tu instancia de GDC con la CLI de kubectl:

kubectl get userclustermetadata.upgrade.private.gdc.goog \
    -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
    --kubeconfig MANAGEMENT_API_SERVER

Reemplaza MANAGEMENT_API_SERVER por la ruta de acceso a kubeconfig del servidor de la API zonal de tu clúster.

El resultado es similar al siguiente:

K8S-VERSION
1.25.10-gke.2100
1.26.5-gke.2100
1.27.4-gke.500

Admite cargas de trabajo de GPU en un clúster

Distributed Cloud proporciona compatibilidad con GPU de NVIDIA para clústeres de Kubernetes, y ejecuta tus dispositivos de GPU como cargas de trabajo del usuario. Por ejemplo, es posible que prefieras ejecutar notebooks de inteligencia artificial (IA) y aprendizaje automático (AA) en un entorno de GPU. Asegúrate de que tu clúster admita dispositivos de GPU antes de aprovechar los notebooks de IA y AA. La compatibilidad con GPU está habilitada de forma predeterminada para los clústeres que tienen máquinas con GPU aprovisionadas.

Los clústeres se pueden crear directamente con la consola o la API de GDC. Asegúrate de aprovisionar máquinas con GPU para que tu clúster admita cargas de trabajo de GPU en sus contenedores asociados. Para obtener más información, consulta Crea un clúster de Kubernetes.

Las GPUs se asignan de forma estática. Las primeras cuatro GPUs siempre están dedicadas a cargas de trabajo como las APIs de inteligencia artificial (IA) y aprendizaje automático (AA) previamente entrenadas. Estas GPUs no se ejecutan en un clúster de Kubernetes. Las GPUs restantes están disponibles para los clústeres de Kubernetes. Los notebooks de IA y AA se ejecutan en clústeres de Kubernetes.

Asegúrate de asignar máquinas con GPU a los tipos de clúster correctos para garantizar que se puedan usar componentes como las APIs de IA y AA, y los notebooks.