En este documento, se explica cómo crear un clúster de Kubernetes compartido en una zona aislada de Google Distributed Cloud (GDC). Un clúster compartido abarca varios proyectos e incluye servicios integrales administrados por GDC que ofrecen una configuración de clúster de Kubernetes muy prescriptiva que es menos configurable que el clúster estándar. Para obtener más información sobre los clústeres estándar, consulta Configuraciones de clústeres de Kubernetes.
Los clústeres compartidos son un recurso zonal y no pueden abarcar varias zonas. Para operar clústeres en un universo de varias zonas, debes crear clústeres de forma manual en cada zona.
Este documento está dirigido a públicos como 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
Para obtener los permisos que necesitas para crear un clúster compartido, pídele a tu administrador de IAM de la organización que te otorgue el rol de administrador de clústeres de usuario (
user-cluster-admin). Este rol no está vinculado a un espacio de nombres.Para usar la API o Terraform para crear un clúster compartido, genera el archivo kubeconfig del servidor de la API zonal para alojar tu clúster. Configura la variable de entorno
MANAGEMENT_API_SERVERen la ruta de acceso de kubeconfig. Para obtener más información, consulta Recursos del servidor de la API de administración zonal.Revisa los límites del clúster para las consideraciones de recursos.
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 se requieren para 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 de procesamiento cuando asigna direcciones IP:
- Kubernetes asigna un bloque CIDR
/24que consta de 256 direcciones a cada uno de los nodos. Esta cantidad cumple con el 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 el número máximo 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 CIDR del Pod requerida para configurar el clúster de Kubernetes en función de la cantidad de nodos requerida. Planifica las futuras adiciones 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 valor predeterminado de Per node mask size= /24 , consulta la siguiente tabla que asigna la máscara CIDR del pod a la cantidad de nodos admitidos.
| Máscara CIDR del pod | Cálculo: 2(Per node mask size - CIDR mask) | 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 del pod para tu 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 compartido
Para crear un clúster de Kubernetes compartido, completa los siguientes pasos:
Console
En el menú de navegación, selecciona Kubernetes Engine > Clústeres.
Haz clic en Crear clúster.
En el campo Nombre, especifica un nombre para el clúster.
Selecciona la versión de Kubernetes para el clúster.
Selecciona la zona en la que se creará el clúster.
Haz clic en Adjuntar proyecto y selecciona un proyecto existente para adjuntarlo 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.

Haz clic en Siguiente.
Configura la configuración de red de tu clúster. No puedes cambiar estos parámetros de configuración de red después de crear el clúster. El protocolo de Internet predeterminado y único compatible para los clústeres de Kubernetes es el Protocolo de Internet versión 4 (IPv4).
Si deseas crear nodos de balanceador de cargas dedicados, ingresa la cantidad de nodos que se crearán. De forma predeterminada, recibes cero nodos y el tráfico del balanceador de cargas se ejecuta a través de los nodos de control.
Selecciona el CIDR de servicio (enrutamiento entre dominios sin clases) que se usará. Tus servicios implementados, como los balanceadores de cargas, reciben direcciones IP de este rango.
Selecciona el CIDR de pod que se usará. El clúster asigna direcciones IP de este rango a tus pods y VMs.
Haz clic en Siguiente.
Revisa los detalles del grupo de nodos predeterminado generado automáticamente para el clúster. Haz clic en edit Editar para modificar el grupo de nodos predeterminado.
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, lo personalizas con las siguientes opciones:
- Asigna un nombre al grupo de nodos. No puedes modificar el nombre después de crear el grupo de nodos.
- Especifica la cantidad de nodos trabajadores que se crearán en el grupo de nodos.
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
Haz clic en Guardar.
Haz clic en Crear para generar el clúster.
La creación de clústeres compartidos puede tardar hasta 90 minutos en completarse.
API
Crea el recurso personalizado
Cluster:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF 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 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 EOFReemplaza lo siguiente:
MANAGEMENT_API_SERVER: la ruta de acceso de kubeconfig del servidor de la API zonal.CLUSTER_NAME: el nombre del clúster El nombre del clúster no debe terminar con-system. El sufijo-systemestá reservado para los clústeres creados por GDC.POD_CIDR: el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales del pod. Si no se establece, se usa un valor predeterminado21.SERVICE_CIDR: el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales del servicio. Si no se establece, se usa un valor predeterminado23.KUBERNETES_VERSION: la versión de Kubernetes del clúster, como1.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: el tipo de máquina para los nodos trabajadores del grupo de nodos. Consulta los tipos de máquinas disponibles para ver lo que está disponible para configurar.NODE_POOL_NAME: el nombre del grupo de nodosNUMBER_OF_WORKER_NODES: la cantidad de nodos trabajadores 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 paso 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 paso es opcional,GPU_PARTITION_SCHEME: 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 establece este campo. Para obtener más información sobre los perfiles de GPU de instancias múltiples (MIG) disponibles, consulta Perfiles de MIG compatibles.
La creación de clústeres compartidos puede tardar hasta 90 minutos en completarse.
Crea el recurso personalizado
ProjectBinding:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOFReemplaza lo siguiente:
MANAGEMENT_API_SERVER: la ruta de acceso de kubeconfig del servidor de la API zonal.CLUSTER_NAME: el nombre del clústerPROJECT_NAME: el nombre del proyecto al que se vinculará. Cada recursoProjectBindingsolo puede asignarse a un clúster. Si un proyecto requiere acceso a varios clústeres, se debe crear unProjectBindingúnico para cada clúster.
Debes adjuntar un proyecto a tu clúster antes de que un desarrollador pueda implementar cargas de trabajo de contenedores en el clúster.
Terraform
En un archivo de configuración de Terraform, inserta el siguiente fragmento de código para crear el recurso personalizado
Cluster:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "CLUSTER_RESOURCE_NAME" { 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" } "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: la ruta de acceso de kubeconfig del servidor de la API zonal.CLUSTER_RESOURCE_NAME: el nombre único del recurso de Terraform del clúster, comocluster-1. Terraform usa este nombre para identificar tu clúster, y GDC no lo usa.CLUSTER_NAME: el nombre del clúster El nombre del clúster no debe terminar con-system. El sufijo-systemestá reservado para los clústeres creados por GDC.POD_CIDR: el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales del pod. Si no se establece, se usa un valor predeterminado21.SERVICE_CIDR: el tamaño de los rangos de red desde los que se asignan las direcciones IP virtuales del servicio. Si no se establece, se usa un valor predeterminado23.KUBERNETES_VERSION: la versión de Kubernetes del clúster, como1.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: el tipo de máquina para los nodos trabajadores del grupo de nodos. Consulta los tipos de máquinas disponibles para ver lo que está disponible para configurar.NODE_POOL_NAME: el nombre del grupo de nodosNUMBER_OF_WORKER_NODES: la cantidad de nodos trabajadores 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 paso 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 paso es opcional,GPU_PARTITION_SCHEME: 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 establece este campo. Para obtener más información sobre los perfiles de GPU de instancias múltiples (MIG) disponibles, consulta Perfiles de MIG compatibles.
En un archivo de configuración de Terraform, inserta el siguiente fragmento de código para crear el recurso personalizado
ProjectBinding:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }Reemplaza lo siguiente:
MANAGEMENT_API_SERVER: la ruta de acceso de kubeconfig del servidor de la API zonal.PROJECT_BINDING_RESOURCE_NAME: el nombre del recurso de Terraform de la vinculación del proyecto, comoproject-binding-1. Terraform usa este nombre para identificar la vinculación de tu proyecto, y GDC no lo usa.CLUSTER_NAME: el nombre del clústerPROJECT_NAME: el nombre del proyecto al que se vinculará. Cada recursoProjectBindingsolo puede asignarse a un clúster. Si un proyecto requiere acceso a varios clústeres, se debe crear unProjectBindingúnico para cada clúster.
Debes adjuntar un proyecto a tu clúster antes de que un desarrollador pueda implementar cargas de trabajo de contenedores en el clúster.
Aplica los nuevos recursos personalizados con Terraform:
terraform apply
La creación de clústeres compartidos puede tardar hasta 90 minutos en completarse.
¿Qué sigue?
- Implementa una app de contenedor de HA
- Cargas de trabajo de contenedores en GDC
- Jerarquía de recursos