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 gestionados por GDC que ofrecen una configuración de clúster de Kubernetes muy específica y menos configurable que la del clúster estándar. Para obtener más información sobre los clústeres estándar, consulta el artículo 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 multizona, debes crear manualmente clústeres en cada zona.
Este documento está dirigido a públicos como los desarrolladores de aplicaciones del grupo de operadores de aplicaciones, que son responsables de gestionar las cargas de trabajo de contenedores en su organización. Para obtener más información, consulta el artículo Públicos de la documentación de GDC para entornos aislados.
Antes de empezar
Para obtener los permisos que necesitas para crear un clúster compartido, pide a tu administrador de IAM de la organización que te asigne 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 con el fin de crear un clúster compartido, genera el archivo kubeconfig del servidor de la API zonal para alojar tu clúster. Define la variable de entorno
MANAGEMENT_API_SERVERcomo la ruta de kubeconfig. Para obtener más información, consulta el artículo Recursos del servidor de la API de gestión zonal.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 siguiente al asignar direcciones IP:
- Kubernetes asigna un bloque CIDR
/24que 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 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 calculó el valor predeterminado de Tamaño de máscara por nodo= /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 pods 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)
Dado que hay un valor predeterminado de Tamaño de máscara por nodo= /24 , consulta la siguiente tabla, que asigna la máscara CIDR de pods al número de nodos admitidos.
| Máscara CIDR de pods | Cálculo: 2(Tamaño de máscara por nodo - Máscara CIDR mask) | 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 |
Después de calcular el bloque CIDR de pods para tu clúster de Kubernetes, configúralo como parte del flujo de trabajo de creación de clústeres en la siguiente sección.
Crear un clúster compartido
Sigue estos pasos para crear un clúster de Kubernetes compartido:
Consola
En el selector de proyectos, selecciona tu organización.
Los clústeres compartidos son recursos en el ámbito de la organización. Si seleccionas un proyecto, crearás un clúster estándar, que está en el ámbito del proyecto. Para obtener más información, consulta el artículo Jerarquía de recursos.
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 del clúster.
Selecciona la zona en la que quieres crear el clúster.
Haz clic en Adjuntar proyecto y selecciona un proyecto que quieras adjuntar a tu clúster. A continuación, haz clic en Guardar. Puedes adjuntar o desvincular 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 desplegar cargas de trabajo de contenedores en él.

Haz clic en Siguiente.
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 admitido para los clústeres de Kubernetes es el protocolo de Internet versión 4 (IPv4).
Si quieres crear nodos de balanceador de carga dedicados, introduce el número de nodos que quieres crear. De forma predeterminada, recibes cero nodos y el tráfico del balanceador de carga se ejecuta a través de los nodos de control.
Selecciona el CIDR de servicio (enrutamiento de interdominios sin clases) que quieras usar. Los servicios desplegados, como los balanceadores de carga, reciben direcciones IP de este intervalo.
Selecciona el CIDR de pods que quieras usar. El clúster asigna direcciones IP de este intervalo 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 Añadir grupo de nodos. Al editar el grupo de nodos predeterminado o añadir un grupo de nodos, puedes personalizarlo 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 el número de nodos de trabajador que quieres crear 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 ajustes:
- Tipo de máquina
- CPU
- Memoria
Haz clic en Guardar.
Haz clic en Crear para crear el clúster.
La creación de un clúster compartido 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 EOFHaz los cambios siguientes:
MANAGEMENT_API_SERVER: la ruta 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 intervalos de red a partir de los cuales se asignan las direcciones IP virtuales de los pods. Si no se define, se usa el valor predeterminado21.SERVICE_CIDR: el tamaño de los intervalos de red a partir de los cuales se asignan las direcciones IP virtuales de los servicios. Si no se define, se usa el valor predeterminado23.KUBERNETES_VERSION: la versión de Kubernetes del clúster, como1.26.5-gke.2100. Para ver una lista de las versiones de Kubernetes disponibles que puedes configurar, consulta el artículo 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 que puedes configurar.NODE_POOL_NAME: el nombre del grupo de nodos.NUMBER_OF_WORKER_NODES: el número de nodos de trabajador que se aprovisionarán en el grupo de nodos.TAINTS: los taints que se aplicarán a los nodos de este grupo de nodos. Se trata de un campo opcional.LABELS: las etiquetas que se aplicarán a los nodos de este grupo de nodos. Contiene una lista de pares clave-valor. Se trata de un campo opcional.GPU_PARTITION_SCHEME: el esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Se trata de un campo 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 el artículo Perfiles de MIG admitidos.
La creación de un clúster compartido 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 EOFHaz los cambios siguientes:
MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal.CLUSTER_NAME: el nombre del clúster.PROJECT_NAME: el nombre del proyecto al que se va a vincular. Cada recursoProjectBindingsolo se puede asignar a un clúster. Si un proyecto necesita acceder a varios clústeres, se debe crear un recursoProjectBindingúnico para cada clúster.
Debes adjuntar un proyecto a tu clúster para que un desarrollador pueda desplegar 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" } } } }Haz los cambios siguientes:
MANAGEMENT_API_SERVER: la ruta 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, pero GDC no lo utiliza.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 intervalos de red a partir de los cuales se asignan las direcciones IP virtuales de los pods. Si no se define, se usa el valor predeterminado21.SERVICE_CIDR: el tamaño de los intervalos de red a partir de los cuales se asignan las direcciones IP virtuales de los servicios. Si no se define, se usa el valor predeterminado23.KUBERNETES_VERSION: la versión de Kubernetes del clúster, como1.26.5-gke.2100. Para ver una lista de las versiones de Kubernetes disponibles que puedes configurar, consulta el artículo 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 que puedes configurar.NODE_POOL_NAME: el nombre del grupo de nodos.NUMBER_OF_WORKER_NODES: el número de nodos de trabajador que se aprovisionarán en el grupo de nodos.TAINTS: los taints que se aplicarán a los nodos de este grupo de nodos. Se trata de un campo opcional.LABELS: las etiquetas que se aplicarán a los nodos de este grupo de nodos. Contiene una lista de pares clave-valor. Se trata de un campo opcional.GPU_PARTITION_SCHEME: el esquema de partición de GPU, si ejecutas cargas de trabajo de GPU. Se trata de un campo 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 el artículo Perfiles de MIG admitidos.
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", ] } } } } }Haz los cambios siguientes:
MANAGEMENT_API_SERVER: la ruta de kubeconfig del servidor de la API zonal.PROJECT_BINDING_RESOURCE_NAME: el nombre del recurso de Terraform del enlace de proyecto, comoproject-binding-1. Terraform usa este nombre para identificar tu enlace de proyecto, pero GDC no lo utiliza.CLUSTER_NAME: el nombre del clúster.PROJECT_NAME: el nombre del proyecto al que se va a vincular. Cada recursoProjectBindingsolo se puede asignar a un clúster. Si un proyecto necesita acceder a varios clústeres, se debe crear un recursoProjectBindingúnico para cada clúster.
Debes adjuntar un proyecto a tu clúster para que un desarrollador pueda desplegar cargas de trabajo de contenedores en el clúster.
Aplica los nuevos recursos personalizados con Terraform:
terraform apply
La creación de un clúster compartido puede tardar hasta 90 minutos en completarse.
Siguientes pasos
- Desplegar una aplicación de contenedor de alta disponibilidad
- Cargas de trabajo de contenedores en GDC
- Jerarquía de recursos