Crear un clúster estándar para ejecutar cargas de trabajo de contenedores

En este documento se explica cómo crear un clúster de Kubernetes estándar en una zona aislada de Google Distributed Cloud (GDC). Un clúster estándar proporciona un clúster de Kubernetes de ámbito de proyecto y altamente configurable que incluye un conjunto mínimo de servicios gestionados. El clúster estándar ofrece más flexibilidad para la configuración de servicios que el clúster compartido, pero también requiere más sobrecarga de gestión. Para obtener más información sobre los clústeres estándar, consulta las configuraciones de clústeres de Kubernetes.

Los clústeres estándar son un recurso zonal y no pueden abarcar varias zonas. Para usar clústeres en un universo multizona, debes crear manualmente clústeres en cada zona.

Este documento está dirigido a usuarios como los desarrolladores de aplicaciones del grupo de operadores de aplicaciones, que se encargan de gestionar las cargas de trabajo de los contenedores de su organización. Para obtener más información, consulta Audiencias de la documentación aislada de GDC.

Antes de empezar

Para crear un clúster estándar, solicita los permisos necesarios y prepara tu entorno.

Solicitar roles de gestión de identidades y accesos

Ponte en contacto con el administrador de gestión de identidades y accesos de tu organización para que te asigne los siguientes roles:

  • Administrador de gestión de identidades y accesos de proyectos (project-iam-admin): concede a otros usuarios los roles necesarios para gestionar el acceso en clústeres estándar.
  • Administrador de clúster estándar (standard-cluster-admin): crea clústeres estándar en el proyecto.

Estos roles están vinculados al espacio de nombres de tu proyecto.

Prepara tu entorno

  • Verifica que tienes la configuración adecuada para acceder a clústeres estándar y gestionarlos. Para obtener más información, consulta Gestionar el acceso a clústeres estándar.
  • Genera el archivo kubeconfig del servidor de la API zonal para alojar tu clúster. Define la variable de entorno MANAGEMENT_API_SERVER en la ruta de kubeconfig. Para obtener más información, consulta el artículo sobre los recursos del servidor de la API de gestión de zonas.
  • Consulta los límites de los clústeres para tener en cuenta los recursos.

Planificar el bloque CIDR de pods

Para asignar el bloque CIDR de pods del tamaño adecuado a tus cargas de trabajo, debes calcular la cantidad de direcciones IP que necesita tu clúster de Kubernetes antes de crearlo. La mayoría de los parámetros de red no se pueden cambiar después de crear el clúster.

Un clúster de Kubernetes sigue la lógica anterior al asignar direcciones IP:

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

Consulta el siguiente ejemplo para saber cómo se ha calculado el valor predeterminado de Per node mask size= /24 para dar cabida a 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 CIDR de pod necesaria para configurar el clúster de Kubernetes en función del número de nodos que necesites. Planifica las futuras incorporaciones de nodos al clúster al configurar el intervalo CIDR:

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

Como hay un tamaño de máscara por nodo predeterminado (/24), consulta la siguiente tabla, que asigna la máscara CIDR de pod al número de nodos admitidos.

Máscara de CIDR de pod Cálculo: 2(Tamaño de la máscara por nodo - Máscara CIDR) Número máximo 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

Una vez que hayas calculado el bloque CIDR de tu pod para el clúster de Kubernetes, configúralo como parte del flujo de trabajo de creación del clúster en la siguiente sección.

Crear un clúster estándar

Para crear un clúster estándar, sigue estos pasos:

Consola

  1. En el selector de proyectos, selecciona el proyecto.

    Los clústeres estándar son recursos para el ámbito de proyectos. Si seleccionas una organización, crearás un clúster compartido, que tendrá el ámbito de la organización. Para obtener más información, consulta la jerarquía de recursos.

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

  3. Haz clic en Crear clúster.

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

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

  6. Selecciona la versión de Kubernetes del clúster.

  7. Haz clic en Siguiente.

  8. Configura los ajustes de red de tu clúster. No puedes cambiar esta configuración de red después de crear el clúster. El protocolo de Internet predeterminado y único compatible con los clústeres de Kubernetes es el protocolo de Internet versión 4 (IPv4).

    1. Si quieres crear nodos de balanceador de carga dedicados, introduce el número de nodos que quieras crear. De forma predeterminada, recibes cero nodos y el tráfico del balanceador de carga se ejecuta a través de los nodos del plano de control.

    2. Selecciona el CIDR de servicio (enrutamiento de interdominios sin clases) que quieras usar. A los servicios que hayas implementado, como los balanceadores de carga, se les asignarán direcciones IP de este intervalo.

    3. Selecciona el CIDR de pod que quieras usar. El clúster asigna direcciones IP de este intervalo 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 más grupos de nodos, selecciona Añadir grupo de nodos. Cuando edites el grupo de nodos predeterminado o añadas uno nuevo, podrás 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 el número de nodos de trabajador que se crearán en el grupo de nodos.
    3. Selecciona la clase de máquina que mejor se adapte a tus requisitos de carga de trabajo. Consulta la lista de los siguientes ajustes:

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

  11. Haz clic en Crear para que se genere el clúster.

La creación de un clúster estándar puede tardar hasta 60 minutos en completarse.

API

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

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: PROJECT_NAME
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      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
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: 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.
    • PROJECT_NAME: el nombre del proyecto en el que se creará el clúster.
    • POD_CIDR: tamaño de los intervalos de red desde los que se asignan las direcciones IP virtuales de los pods. Si no se define, se usa el valor predeterminado 21.
    • SERVICE_CIDR: tamaño de los intervalos de red desde los que se asignan las direcciones IP virtuales de servicio. Si no se define, se usa el valor predeterminado 23.
    • KUBERNETES_VERSION: la versión de Kubernetes del clúster, como 1.26.5-gke.2100. Para ver una lista de las versiones de Kubernetes disponibles que puedes configurar, consulta Ver las versiones de Kubernetes disponibles para un clúster.
    • MACHINE_TYPE: el tipo de máquina de los nodos de trabajador del grupo de nodos. Consulta los tipos de máquinas disponibles para ver qué se puede configurar.
    • NODE_POOL_NAME: el nombre del grupo de nodos.
    • NUMBER_OF_WORKER_NODES: el número de nodos de trabajo que se aprovisionarán en el grupo de nodos.
    • TAINTS: los taints que se aplicarán a los nodos de este grupo de nodos. Este campo es opcional.
    • LABELS: 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: el esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Este campo es opcional. Por ejemplo, mixed-2. La GPU no se particiona si no se define este campo. Para obtener más información sobre 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
    

    Sustituye MANAGEMENT_API_SERVER por la ruta de kubeconfig del servidor de la API zonal. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Iniciar sesión.

La creación de un clúster estándar puede tardar hasta 60 minutos en completarse.

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" = "PROJECT_NAME"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "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"
          }
        }
      }
    }
    

    Haz los cambios siguientes:

    • MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal. Si aún no has generado un archivo kubeconfig para el servidor de la API de tu zona de destino, consulta Iniciar sesión.
    • CLUSTER_NAME: 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.
    • PROJECT_NAME: el nombre del proyecto en el que se va a crear el clúster.
    • POD_CIDR: tamaño de los intervalos de red desde los que se asignan las direcciones IP virtuales de los pods. Si no se define, se usa el valor predeterminado 21.
    • SERVICE_CIDR: tamaño de los intervalos de red desde los que se asignan las direcciones IP virtuales de servicio. Si no se define, se usa el valor predeterminado 23.
    • KUBERNETES_VERSION: la versión de Kubernetes del clúster, como 1.26.5-gke.2100. Para ver una lista de las versiones de Kubernetes disponibles que puedes configurar, consulta Ver las versiones de Kubernetes disponibles para un clúster.
    • MACHINE_TYPE: el tipo de máquina de los nodos de trabajador del grupo de nodos. Consulta los tipos de máquinas disponibles para ver qué se puede configurar.
    • NODE_POOL_NAME: el nombre del grupo de nodos.
    • NUMBER_OF_WORKER_NODES: el número de nodos de trabajo que se aprovisionarán en el grupo de nodos.
    • TAINTS: los taints que se aplicarán a los nodos de este grupo de nodos. Este campo es opcional.
    • LABELS: 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: el esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Este campo es opcional. Por ejemplo, mixed-2. La GPU no se particiona si no se define este campo. Para obtener más información sobre los perfiles de GPU multiinstancia (MIG) disponibles, consulta Perfiles de MIG compatibles.
  2. Aplica el nuevo clúster estándar con Terraform:

    terraform apply
    

La creación de un clúster estándar puede tardar hasta 60 minutos en completarse.

Siguientes pasos