Crear un clúster
En esta página se explica cómo crear un clúster y un grupo de nodos en GKE on Azure con la versión 1.32.4-gke.200 de Kubernetes.
Antes de empezar
Para completar los pasos de esta página, haz lo siguiente:
Sigue los pasos que se indican en la sección Configurar los requisitos previos.
Elige si quieres ejecutar el plano de control en varias zonas o en una sola.
Seleccione los intervalos de enrutamiento de interdominios sin clases (CIDR) que quiera proporcionar a su clúster.
Colocación zonal del plano de control
De forma predeterminada, GKE en Azure coloca réplicas del plano de control independientes en la misma subred de tres zonas de la región que hayas seleccionado. Puedes elegir estas zonas y subredes.
Si quieres usar la colocación predeterminada de réplicas del plano de control, ve a la sección Seleccionar intervalos CIDR para el clúster.
Pasarela NAT de Azure y planos de control de clústeres
Cada réplica del plano de control también requiere conectividad con el servicio de gestión alojado en Google para funcionar con normalidad.
Si usas la pasarela NAT de Azure para proporcionar conectividad saliente, debes tener en cuenta cómo afecta un fallo de zona al plano de control del clúster. Un endpoint de pasarela de NAT está aislado en una sola zona o es regional/no zonal, lo que supone un único punto de fallo.
Si quieres colocar réplicas del plano de control en una sola zona, usa una sola subred y zona. Si usas una pasarela NAT para la conectividad saliente, asegúrate de que el endpoint se encuentre en la misma zona.
Si quieres colocar réplicas en dos o tres zonas, puedes transferir una lista de subredes y zonas al crear un clúster. Cuando proporcionas dos subredes y zonas, GKE en Azure coloca dos réplicas en la primera zona proporcionada. Si proporcionas tres subredes y zonas, GKE en Azure colocará réplicas en cada subred. Para obtener más información, consulta Colocar réplicas en una subred específica.
Para obtener más información sobre cómo configurar subredes y zonas de Azure para lograr una alta disponibilidad, consulta el artículo Aislamiento de zonas con pilas zonales de la documentación de Azure.
Colocar réplicas en una subred específica
Esta sección es opcional.
Para controlar en qué zonas se colocan las réplicas del plano de control, usa la marca --replica-placements
y proporciona una lista de IDs de subredes y zonas al crear el clúster. Puedes usar hasta tres subredes y zonas en las que colocar las réplicas del plano de control.
Para dar formato a la lista de subredes, sigue estos pasos.
Recupera los IDs de tu subred de Azure con la herramienta de línea de comandos
az
:az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name SUBNET_NAME --query "id" -otsv
Haz los cambios siguientes:
CLUSTER_RESOURCE_GROUP_NAME
: el nombre de un grupo de recursos donde quieras ejecutar el clústerVNET_RESOURCE_GROUP_NAME
: el nombre del grupo de recursos que contiene tu red virtualVNET_NAME
: nombre de tu red virtualSUBNET_NAME
: el nombre de tu subred
El resultado es el ID de la subred. Los IDs de subred de Azure tienen el siguiente formato:
/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME
Repite este comando en cada subred en la que quieras crear una réplica del plano de control. Copia los IDs de las subredes en un editor de texto para el siguiente paso.
Crea una lista separada por comas de los IDs de subred y las zonas de disponibilidad de Azure, con dos puntos para separar la subred y la zona. Por ejemplo, para crear réplicas del plano de control en
subnet1
en la zona 1,subnet2
en la zona 2 ysubnet3
en la zona 3, usa la siguiente cadena:/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet1:1,/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet2:2,/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/subnet3:3
Copia esta cadena y úsala como valor de la marca
--replica-placements
cuando crees un clúster.
Seleccionar intervalos CIDR para el clúster
Cuando creas un clúster en GKE en Azure, debes proporcionar intervalos de direcciones IPv4 para usarlos en pods y servicios.
Estos intervalos de direcciones IP se especifican mediante la notación de enrutamiento entre dominios sin clases (CIDR). Por ejemplo, 100.64.0.0/16
.
Intervalos recomendados
Te recomendamos los siguientes intervalos CIDR para los servicios y los pods:
- Servicios: 100.64.0.0/16
- Pods: 100.96.0.0/11
Estos intervalos son lo suficientemente grandes como para que puedas ampliar tu clúster sin problemas.
En las siguientes secciones se proporcionan más detalles al respecto.
Detalles sobre la selección de intervalos
GKE en Azure usa una red superpuesta para pods y servicios, por lo que no es necesario que los intervalos de IP de estas redes se puedan enrutar en la red virtual. Los intervalos de IP que utilices deben estar disponibles. Para obtener más información, consulta Dataplane V2.
Los intervalos de IPs de pods y servicios pueden solaparse con la red de la red virtual, siempre que no incluyan los intervalos de IPs de la subred del plano de control o del grupo de nodos.
El intervalo de IPs de pods y servicios debe estar dentro de uno de los siguientes intervalos de IPs privadas:
10.0.0.0/8
,172.16.0.0/12
y192.168.0.0/16
: direcciones IP privadas (RFC 1918)100.64.0.0/10
: espacio de direcciones compartidas (RFC 6598)192.0.0.0/24
: asignaciones de protocolo IETF (RFC 6890)192.0.2.0/24
,198.51.100.0/24
y203.0.113.0/24
: documentación (RFC 5737)192.88.99.0/24
: retransmisión de IPv6 a IPv4 (obsoleto) (RFC 7526)198.18.0.0/15
: pruebas de comparativas (RFC 2544)
Te recomendamos que uses intervalos de IP dentro de 100.64.0.0/10
(RFC 6598). Este intervalo se reserva para NAT de nivel de operador, que probablemente no se use en tu red virtual.
Por ejemplo, la siguiente es una configuración válida en la que las redes de pods, servicios y nodos no se solapan (la red virtual usa direcciones IP privadas RFC 1918, mientras que las redes de pods y servicios se superponen a las IPs privadas RFC 6598).
- Red VNet:
10.0.0.0/16
,172.16.1.0/24
,172.16.2.0/24
- Red de pódcasts:
100.65.0.0/16
- Red de servicio:
100.66.0.0/16
La siguiente configuración también es válida a pesar de que las redes de pods y de servicios se solapan con la red de la VNet, ya que no se solapan con las réplicas del plano de control.
- Red VNet:
10.0.0.0/16
- Red de pódcasts:
10.0.1.0/24
- Red de servicio:
10.0.2.0/24
- Subredes de réplica del plano de control:
10.0.3.0/24
,10.0.4.0/24
y10.0.5.0/24
La siguiente configuración no es válida porque el intervalo de IPs del pod se solapa con la red del plano de control. Este solapamiento puede impedir que las cargas de trabajo se comuniquen con la réplica del plano de control en la red de la red virtual:
- Red VNet:
10.0.0.0/16
- Red de pódcasts:
10.0.1.0/24
- Red de servicio:
10.1.0.0/24
- Subredes de réplica del plano de control:
10.0.1.0/24
,10.0.2.0/24
y10.0.3.0/24
Detalles sobre el intervalo de direcciones de los pods
Kubernetes asigna direcciones a objetos Pod del intervalo de direcciones de pods. El intervalo de pods de un clúster se divide en intervalos más pequeños para cada nodo. Cuando se programa un pod en un nodo concreto, Kubernetes le asigna una dirección IP del intervalo del nodo.
Para calcular el tamaño del intervalo de direcciones de pods, debes estimar el número de nodos que quieres que haya en tu clúster y el número de pods que quieres ejecutar en cada nodo.
En la siguiente tabla se ofrecen recomendaciones de tamaño para los intervalos de CIDR de pods en función del número de nodos y pods que quieras ejecutar.
Tabla de intervalos de direcciones de pods
Intervalo de direcciones de pods | Número máximo de direcciones IP de Pod | Número máximo de nodos | Número máximo de pods |
---|---|---|---|
/24 Intervalo de direcciones de pod más pequeño posible |
256 direcciones | 1 nodo | 110 pods |
/23 | 512 direcciones | 2 nodos | 220 cápsulas |
/22 | 1024 direcciones | 4 nodos | 440 cápsulas |
/21 | 2048 direcciones | 8 nodos | 880 Pods |
/20 | 4096 direcciones | 16 nodos | 1760 Pods |
/19 | 8192 direcciones | 32 nodos | 3520 Pods |
/18 | 16.384 direcciones | 64 nodos | 7040 Pods |
/17 | 32.768 direcciones | 128 nodos | 14.080 Pods |
/16 | 65.536 direcciones | 256 nodos | 28.160 Pods |
/15 | 131.072 direcciones | 512 nodos | 56.320 Pods |
/14 | 262.144 direcciones | 1024 nodos | 112.640 Pods |
Detalles sobre el intervalo de direcciones de servicio
Kubernetes asigna direcciones IP virtuales a los objetos Service, como los balanceadores de carga, de este intervalo de direcciones.
Para calcular el tamaño del intervalo de direcciones de servicio, debes estimar el número de servicios que quieres tener en tu clúster.
En la siguiente tabla se ofrecen recomendaciones de tamaño para los intervalos CIDR de los servicios en función del número de servicios que quieras ejecutar.
Tabla de intervalos de direcciones de servicio
Intervalo de direcciones de servicios | Número máximo de servicios |
---|---|
/27 Intervalo de direcciones de servicio más pequeño posible |
32 servicios |
/26 | 64 servicios |
/25 | 128 Services |
/24 | 256 Services |
/23 | 512 Services |
/22 | 1024 Services |
/21 | 2048 Services |
/20 | 4096 Servicios |
/19 | 8192 servicios |
/18 | 16.384 servicios |
/17 | 32.768 servicios |
/16 Intervalo de direcciones de servicio más grande posible |
65.536 servicios |
Autenticarse en Azure
GKE en Azure ofrece dos métodos para autenticarse en Azure: la federación de identidades de carga de trabajo y la creación de un certificado de cliente. La autenticación mediante la federación de identidades de cargas de trabajo es el método recomendado, ya que es más sencillo y seguro.
Federación de identidades de cargas de trabajo
La federación de identidades de carga de trabajo permite que GKE en Azure se autentique en Azure mediante una cuenta de servicio de Google para gestionar posteriormente los recursos en la aplicación Azure AD. A diferencia de AzureClient, no es necesario que gestiones certificados ni que los subas a Azure AD manualmente.
Para configurar una credencial de identidad federada en tu aplicación de Azure AD, ejecuta los siguientes comandos. Ten en cuenta que puedes añadir hasta veinte credenciales a cada aplicación de Azure AD.
Guarda el ID de aplicación de Azure en variables de entorno:
APPLICATION_ID=$(az ad app list --all \ --query "[?displayName=='APPLICATION_NAME'].appId" --output tsv) PROJECT_ID="$(gcloud config get-value project)" PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" \ --format "value(projectNumber)")
APPLICATION_NAME
: el nombre de la aplicación de Azure AD que usaste al crear una aplicación de Azure Active Directory.
Crea un archivo JSON llamado
credential.json
.{ "name": "CREDENTIAL_NAME", "issuer": "https://accounts.google.com", "subject": "service-PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com", "audiences": ["api://AzureADTokenExchange"], "description": "Allow GKE on Azure to authenticate to the Azure AD application using a Google service account." }
CREDENTIAL_NAME
: el nombre de la credencial.PROJECT_NUMBER
: número del Google Cloud proyecto que aloja el clúster.
Crea una credencial de identidad federada en la aplicación de Azure AD:
az ad app federated-credential create --id "${APPLICATION_ID}" --parameters credential.json
Para obtener más información, consulta la documentación de Azure sobre la federación de identidades de carga de trabajo de Azure AD con Google Cloud.
También puedes aprovisionar la credencial de identidad federada de Azure con Terraform. Para obtener más información, consulta azuread_application_federated_identity_credential.
Después de configurar las credenciales, crea o selecciona un par de claves SSH para tu clúster.
Crear un par de claves SSH
Cuando creas un clúster, debes proporcionar un par de claves SSH. Si ya tienes un par de claves que quieres usar, puedes saltarte este paso.
Para crear un nuevo par de claves, usa la herramienta de línea de comandos
ssh-keygen
:ssh-keygen -m PEM -t rsa -b 4096 -f KEY_PATH
Sustituye
KEY_PATH
por la ruta a tu nueva clave privada.Almacena la clave en una variable de entorno:
SSH_PUBLIC_KEY=$(cat KEY_PATH.pub)
Por ejemplo, para crear un nuevo par de claves en
~/.ssh/anthos-multicloud-key.pub
y almacenar la clave pública en una variable de entorno, ejecuta el siguiente comando:ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/anthos-multicloud-key SSH_PUBLIC_KEY=$(cat ~/.ssh/anthos-multicloud-key.pub)
Una vez que hayas guardado la clave pública en una variable de entorno, podrás crear un clúster.
Selecciona tu proyecto host de la flota
Las flotas son un concepto deGoogle Cloud para organizar los clústeres en grupos más grandes. Con las flotas, puedes gestionar varios clústeres en diferentes nubes y aplicar políticas coherentes en todos ellos. La API GKE Multi-Cloud registra automáticamente tus clústeres en una flota cuando se crea el clúster.
Cuando creas un clúster, especificas un proyecto de host de flota desde el que se gestionará el clúster. Como GKE en Azure usa el nombre del clúster como nombre de miembro de la flota, debes asegurarte de que los nombres de los clústeres sean únicos en toda la flota.
Registro entre proyectos
Si quieres usar un proyecto host de flota que no sea el proyecto en el que se encuentra el clúster, debes aplicar un enlace de política de IAM adicional a la cuenta de servicio del agente de servicio multicloud. Google Cloud De esta forma, la cuenta de servicio puede gestionar flotas con el proyecto de host de la flota.
Para añadir el agente de servicio a tu proyecto, ejecuta este comando:
gcloud beta services identity create --service=gkemulticloud.googleapis.com \ --project=CLUSTER_PROJECT_NUMBER
Sustituye
CLUSTER_PROJECT_NUMBER
por el Google Cloud número de tu proyecto.Asigna este enlace con el siguiente comando:
gcloud projects add-iam-policy-binding FLEET_PROJECT_ID \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com" \ --role="roles/gkemulticloud.serviceAgent"
Haz los cambios siguientes:
FLEET_PROJECT_ID
: proyecto host de tu flota Google CloudCLUSTER_PROJECT_NUMBER
: tu Google Cloud proyecto number
El nombre de la cuenta del agente de servicio multicloud tiene el siguiente formato: service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com
.
Puedes encontrar tus cuentas de servicio en la página Cuenta de servicio de la Google Cloud consola. Para obtener más información sobre cómo encontrar el número de tu proyecto, consulta Identificar proyectos.
Crear un clúster
Para crear un clúster, ejecuta los siguientes comandos:
Guarda los IDs de tu grupo de recursos, VNet y subred de Azure en variables de entorno:
SUBSCRIPTION_ID=$(az account show --query "id" --output tsv) TENANT_ID=$(az account list \ --query "[?id=='${SUBSCRIPTION_ID}'].{tenantId:tenantId}" --output tsv) CLUSTER_RG_ID=$(az group show --resource-group=CLUSTER_RESOURCE_GROUP_NAME \ --query "id" -otsv) VNET_ID=$(az network vnet show --resource-group=VNET_RESOURCE_GROUP_NAME \ --name=VNET_NAME --query "id" -otsv) SUBNET_ID=$(az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name default --query "id" -otsv)
Haz los cambios siguientes:
CLUSTER_RESOURCE_GROUP_NAME
: el nombre de un grupo de recursos donde quieras ejecutar el clústerVNET_RESOURCE_GROUP_NAME
: el nombre del grupo de recursos que contiene tu red virtualVNET_NAME
: el nombre de tu VNet
Crea un clúster con Google Cloud CLI:
Federación de identidades de cargas de trabajo
gcloud container azure clusters create CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --fleet-project FLEET_PROJECT \ --azure-tenant-id "${TENANT_ID}" \ --azure-application-id "${APPLICATION_ID}" \ --azure-region AZURE_REGION \ --pod-address-cidr-blocks POD_CIDR \ --service-address-cidr-blocks SERVICE_CIDR \ --vm-size VM_SIZE \ --cluster-version 1.32.4-gke.200 \ --ssh-public-key "$SSH_PUBLIC_KEY" \ --resource-group-id "$CLUSTER_RG_ID" \ --vnet-id "$VNET_ID" \ --subnet-id "$SUBNET_ID" # Optional, see following note \ --tags "control-plane=CLUSTER_NAME" \ --admin-users ADMIN_USERS_LIST
Cliente de Azure
gcloud container azure clusters create CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --fleet-project FLEET_PROJECT \ --client CLIENT_NAME \ --azure-region AZURE_REGION \ --pod-address-cidr-blocks POD_CIDR \ --service-address-cidr-blocks SERVICE_CIDR \ --vm-size VM_SIZE \ --cluster-version 1.32.4-gke.200 \ --ssh-public-key "$SSH_PUBLIC_KEY" \ --resource-group-id "$CLUSTER_RG_ID" \ --vnet-id "$VNET_ID" \ --subnet-id "$SUBNET_ID" # Optional, see following note \ --tags "control-plane=CLUSTER_NAME" \ --admin-users ADMIN_USERS_LIST
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clústerGOOGLE_CLOUD_LOCATION
: la Google Cloud ubicación que gestiona tu clústerFLEET_PROJECT
con el proyecto host de la flota en el que se registrará el clúster. Si quieres gestionar este clúster desde otro proyecto, consulta Registro entre proyectos.Google CloudAZURE_REGION
: una región de Azure admitida asociada a tu región de Google CloudPOD_CIDR
: el intervalo de direcciones de pods de tu clúster. Por ejemplo,10.0.1.0/18
.SERVICE_CIDR
: el intervalo de direcciones de servicio de tu clústerVM_SIZE
: a tamaño de máquina virtual de Azure compatibleADMIN_USERS_LIST
(opcional): lista separada por comas de las direcciones de correo electrónico de los usuarios a los que se les concederán privilegios de administrador. Por ejemplo, "kai@example.com,hao@example.com,kalani@example.com". El valor predeterminado es el usuario que crea el clúster.CLIENT_NAME
: el nombre de tu AzureClient
Comprueba el estado de tu clúster:
gcloud container azure clusters describe CLUSTER_NAME --location GOOGLE_CLOUD_LOCATION
Haz los cambios siguientes:
CLUSTER_NAME
GOOGLE_CLOUD_LOCATION
El resultado incluye información sobre el estado y la configuración de tu clúster.
Autorizar Cloud Logging o Cloud Monitoring
Para que GKE en Azure pueda crear y subir registros y métricas del sistema aGoogle Cloud, debe tener autorización.
Para autorizar la identidad de carga de trabajo de Kubernetes gke-system/gke-telemetry-agent
para escribir registros en Google Cloud Logging y métricas en Google Cloud Monitoring,
ejecuta este comando:
gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
--member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter
Sustituye GOOGLE_PROJECT_ID
por el ID del proyecto del clúster. Google Cloud
Este enlace de gestión de identidades y accesos concede acceso a todos los clústeres del proyecto Google Cloud project para subir registros y métricas. Solo tienes que ejecutarlo después de crear el primer clúster del proyecto.
No se podrá añadir este enlace de gestión de identidades y accesos a menos que se haya creado al menos un clúster en tu Google Cloud proyecto. Esto se debe a que el grupo de identidades de carga de trabajo al que hace referencia (GOOGLE_PROJECT_ID.svc.id.goog
) no se aprovisiona hasta que se crea el clúster.
Crear un grupo de nodos
Antes de crear un pool de nodos, necesitas lo siguiente:
- Permisos para usar la herramienta de línea de comandos
az
para obtener un ID de subred de Azure. - Acceso a la clave pública SSH del clúster.
Para crear un pool de nodos, ejecuta los siguientes comandos:
Guarda el ID de la subred de la red virtual de Azure y la clave pública SSH en variables de entorno:
SUBNET_ID=$(az network vnet subnet show \ --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \ --name default --query "id" -otsv) SSH_PUBLIC_KEY=$(cat KEY_PATH.pub)
Haz los cambios siguientes:
VNET_RESOURCE_GROUP_NAME
: el nombre del grupo de recursos que contiene la red virtualVNET_NAME
: el nombre de tu VNetKEY_PATH
: la ruta a tu par de claves
Crea un grupo de nodos con Google Cloud CLI:
gcloud container azure node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --node-version 1.32.4-gke.200 \ --vm-size VM_SIZE \ --max-pods-per-node 110 \ --min-nodes MIN_NODES \ --max-nodes MAX_NODES \ --ssh-public-key "${SSH_PUBLIC_KEY}" \ --subnet-id "${SUBNET_ID}"
Haz los cambios siguientes:
NODE_POOL_NAME
: un nombre único para tu grupo de nodos. Por ejemplo,node-pool-1
.CLUSTER_NAME
: el nombre de tu clúster de GKE en AzureGOOGLE_CLOUD_LOCATION
: la Google Cloud ubicación que gestiona tu clústerVM_SIZE
: a tamaño de máquina virtual de Azure compatibleMIN_NODES
: el número mínimo de nodos del grupo de nodos. Para obtener más información, consulta Autoescalador de clústeres.MAX_NODES
: número máximo de nodos del grupo de nodos
Comprueba el estado de tu grupo de nodos:
gcloud container azure node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION
Haz los cambios siguientes:
NODE_POOL_NAME
: un nombre único para tu grupo de nodos. Por ejemplo,node-pool-1
.CLUSTER_NAME
: el nombre de tu clúster de GKE en AzureGOOGLE_CLOUD_LOCATION
: la Google Cloud ubicación que gestiona tu clúster
El resultado incluye el estado de tu grupo de nodos, por ejemplo, si está
PROVISIONING
oRUNNING
.
Siguientes pasos
- Configura el acceso a clústeres para kubectl.
- Crea un grupo de nodos.
- Prueba la guía de inicio rápido para lanzar tu primera carga de trabajo.
- Consulta la documentación de referencia de
gcloud container clusters create
. - ¿Has tenido problemas para crear un clúster? Consulta la sección Solución de problemas para obtener más información.