Crea 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 altamente configurable y con alcance para el proyecto que incluye un conjunto mínimo de servicios administrados incluidos. El clúster estándar ofrece más flexibilidad para la configuración del servicio que el clúster compartido, pero también requiere más sobrecarga de administración. Para obtener más información sobre los clústeres estándar, consulta Configuraciones de clústeres de Kubernetes.

Los clústeres estándares son un recurso zonal y no pueden abarcar varias zonas. Para operar clústeres en un universo multizona, debes crear clústeres de forma manual en cada zona.

Este documento está dirigido a públicos como los desarrolladores de aplicaciones dentro del grupo de operadores de aplicaciones, que son responsables de administrar las cargas de trabajo de contenedores dentro de su organización. Para obtener más información, consulta Públicos de la documentación de Google Distributed Cloud aislado.

Antes de comenzar

  • Verifica que tengas la configuración adecuada para acceder a los clústeres estándar y administrarlos. Para obtener más información, consulta Administra el acceso a clústeres estándar.

  • Para obtener los permisos necesarios para crear un clúster estándar, pídele al administrador de IAM de tu organización que te otorgue los roles de administrador de IAM del proyecto (project-iam-admin) y administrador de clúster estándar (standard-cluster-admin). Estos roles están vinculados al espacio de nombres de tu proyecto.

  • Planifica los siguientes límites de aislamiento de Google Distributed Cloud (GDC) 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

Planifica el bloque CIDR del Pod

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

Un clúster de Kubernetes sigue la lógica anterior 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 Kubernetes.
  • 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 para configurar el clúster de Kubernetes 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 hay un tamaño de máscara por nodo= /24 predeterminado , 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

Después de calcular 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.

Crea un clúster estándar

Para crear un clúster estándar, completa los siguientes pasos:

API

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

    Reemplaza lo siguiente:

    • 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: Es el nombre del proyecto en el que se creará el clúster.
    • 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.
    • 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: 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: Es el esquema de partición de GPU si ejecutas cargas de trabajo de GPU. Este paso es opcional, Por ejemplo, mixed-2 La GPU no se particiona si no se configura este campo. Para obtener más información sobre los perfiles de GPU de varias instancias (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.

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"
          }
        }
      }
    }
    

    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.
    • 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: Es el nombre del proyecto en el que se creará el clúster.
    • 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.
    • 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: 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: Es el esquema de partición de GPU si ejecutas cargas de trabajo de GPU. Este paso es opcional, Por ejemplo, mixed-2 La GPU no se particiona si no se configura este campo. Para obtener más información sobre los perfiles de GPU de varias instancias (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.

¿Qué sigue?