Desplegar una aplicación en GKE en Azure

En esta página se describe cómo crear un clúster y un pool de nodos, y cómo desplegar una aplicación de ejemplo con GKE en Azure.

Compatibilidad con Terraform

Si conoces Terraform, puedes usar los scripts de Terraform disponibles en GitHub para automatizar los requisitos previos y crear un clúster.

Antes de empezar

Antes de crear un clúster, debes completar los requisitos previos. En concreto, debe proporcionar los siguientes recursos:

  • Una red virtual de Azure en la que se ejecutará el clúster.
  • Una subred para las réplicas del plano de control de Kubernetes.
  • Asignaciones de roles de Azure que concederán acceso a GKE en Azure a tu entorno de Azure mediante una cuenta principal de servicio.
  • Un recurso AzureClient que usa GKE en Azure para autenticarse en los servicios de Azure y gestionar recursos en tu cuenta de Azure.
  • Un par de claves SSH para acceder a las máquinas virtuales de Azure del clúster.

Es tu responsabilidad crear y gestionar estos recursos, que se pueden compartir entre todos tus clústeres. GKE en Azure gestiona todos los demás recursos de Azure subyacentes de tu clúster.

Definir la configuración predeterminada de gcloud CLI

Usa la CLI de gcloud para configurar los ajustes predeterminados de tu proyecto predeterminado y tu región Google Cloud .

Tu proyecto tiene un ID de proyecto como identificador único. Cuando creas un proyecto, puedes usar el ID de proyecto que se genera automáticamente o crear el tuyo propio.

Tu Google Cloud región es una ubicación desde la que se gestionarán tus clústeres. Por ejemplo, us-west1. Consulta más información sobre las regiones de gestión.

Cuando configures estos ajustes predeterminados, no tendrás que incluirlos al ejecutar la CLI de Google Cloud. También puedes especificar ajustes o anular los predeterminados pasando las marcas --project y --location a la interfaz de línea de comandos de Google Cloud.

Cuando creas recursos de GKE en Azure después de configurar tu proyecto y tu ubicación predeterminados, los recursos se crean automáticamente en ese proyecto y en esa ubicación.

Para definir los valores predeterminados, sigue estos pasos:

  1. Definir el proyecto predeterminado:

    gcloud config set project PROJECT_ID
    

    Sustituye PROJECT_ID por el ID del proyecto.

  2. Define la ubicación de gestión predeterminada:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    Sustituye GOOGLE_CLOUD_LOCATION por tu ubicación, como us-west1.

Seleccionar los IDs de recursos de Azure de tu clúster

Seleccione un ID de grupo de recursos

Guarda el grupo de recursos de tu clúster en una variable de entorno ejecutando el siguiente comando:

CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
    --resource-group=CLUSTER_RESOURCE_GROUP_NAME)

Sustituye CLUSTER_RESOURCE_GROUP_NAME por el nombre del grupo de recursos en el que se aprovisionarán los recursos del clúster, que has configurado en el paso de requisito previo Crear un grupo de recursos de Azure.

Seleccione un ID de red virtual

Guarda el ID de la red virtual de tu clúster en una variable de entorno ejecutando el siguiente comando:

VNET_ID=$(az network vnet show --query id --output tsv \
    --resource-group=VNET_RESOURCE_GROUP_NAME \
    --name=VNET_NAME)

Haz los cambios siguientes:

  • VNET_RESOURCE_GROUP_NAME con el nombre del grupo de recursos que contiene la red virtual, tal como se ha configurado en el paso de requisito previo Crear una red virtual de Azure.
  • VNET_NAME con el nombre de tu red virtual, tal como se ha configurado en el paso de requisito previo Crear una red virtual de Azure.

Seleccionar un ID de subred

Guarda el ID de la subred de tu clúster en una variable de entorno ejecutando el siguiente comando:

SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
    --resource-group VNET_RESOURCE_GROUP_NAME \
    --vnet-name VNET_NAME \
    --name SUBNET_NAME)

Sustituye:

  • VNET_RESOURCE_GROUP_NAME con un nombre de grupo de recursos que contenga tu red virtual. Puede ser el nombre del grupo de recursos que haya configurado en Crear una red virtual de Azure.
  • VNET_NAME con el nombre de tu red virtual. Puede ser el nombre de la red virtual que hayas configurado en Crear una red virtual de Azure.
  • SUBNET_NAME con el nombre de tu subred. Por ejemplo, default.

Seleccionar intervalos CIDR para el clúster

Kubernetes requiere que se proporcionen dos intervalos CIDR para el clúster. Estos intervalos CIDR deben elegirse de forma que no se solapen con los intervalos CIDR que usan tus subredes de VPC. Deben ser lo suficientemente grandes para el tamaño máximo previsto de tu clúster.

  • Intervalo CIDR de direcciones de pods: cuando se crea un nuevo Pod, se le asigna una dirección IP de este intervalo. Intervalo de ejemplo: 192.168.208.0/20

  • Intervalo CIDR de direcciones de servicio: cuando se crea un servicio, se le asigna una dirección IP de este intervalo. Intervalo de ejemplo: 192.168.224.0/20

Crear un clúster

Usa el siguiente comando para crear un clúster en GKE en Azure.

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.32.4-gke.200 \
    --azure-region AZURE_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --client CLIENT_NAME \
    --resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
    --vnet-id $VNET_ID \
    --subnet-id $SUBNET_ID \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Sustituye:

Para obtener más información y parámetros opcionales, consulta la página de referencia de gcloud container azure clusters create.

Crear un grupo de nodos

Crea un grupo de nodos con Google Cloud CLI:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.32.4-gke.200 \
    --vm-size Standard_B2s \
    --max-pods-per-node 110 \
    --min-nodes 1 \
    --max-nodes 5 \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --subnet-id $SUBNET_ID \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Sustituye SSH_PUBLIC_KEY por el texto de tu clave pública SSH, que has creado en el paso Crear un par de claves SSH. Si has guardado tu clave pública en una variable de entorno, puedes usar ${SSH_PUBLIC_KEY}.

Ver el estado de un clúster

Después de crear un clúster y un grupo de nodos, puedes ver el estado de un clúster con la CLI de Google Cloud o con la Google Cloud consola. Para ver el estado del clúster, elige si vas a usar la CLI de Google Cloud o la consola y sigue estos pasos: Google Cloud

gcloud

Usa el comando gcloud container azure clusters describe para obtener detalles sobre tu clúster:

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre de tu clúster
  • GOOGLE_CLOUD_LOCATION: el nombre de la Google Cloud ubicación que gestiona el clúster

Google Cloud consola

  1. En la Google Cloud consola, ve a la página Resumen de clústeres de Google Kubernetes Engine.

    Ir a clústeres de GKE

  2. Los clústeres se muestran por su nombre y ubicación.

  3. Haz clic en el nombre del clúster. Aparecerá un panel con información sobre el clúster, incluido su estado y las funciones habilitadas.

Obtener las credenciales de autenticación del clúster

Después de crear el clúster, debes obtener las credenciales de autenticación para interactuar con él:

gcloud container azure clusters get-credentials azure-cluster-0

Este comando configura kubectl para acceder al clúster que has creado con Connect Gateway. Necesitas al menos un grupo de nodos para usar la pasarela Connect, ya que depende del agente Connect, que se ejecuta como un Deployment en el clúster.

Desplegar una aplicación en el clúster

Ahora que has creado un clúster, puedes desplegar una aplicación en contenedor en él. En esta guía de inicio rápido, puedes desplegar nuestra aplicación web de ejemplo, hello-app.

Los objetos de Kubernetes se usan para crear y gestionar los recursos de tu clúster. El objeto Deployment se usa para desplegar aplicaciones sin estado, como servidores web. Los objetos Service definen reglas y balanceadores de carga para acceder a tu aplicación desde Internet.

Crear el despliegue

Para ejecutar hello-app en tu clúster, debes desplegar la aplicación ejecutando el siguiente comando:

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Este comando de Kubernetes, kubectl create deployment crea un Deployment llamado hello-server. El pod de la implementación ejecuta la imagen de contenedor hello-app.

En este comando:

  • --image especifica una imagen de contenedor que se va a desplegar. En este caso, el comando extrae la imagen de ejemplo de un repositorio de Artifact Registry, us-docker.pkg.dev/google-samples/containers/gke/hello-app. El atributo :1.0 indica la versión específica de la imagen que se va a extraer. Si no especifica ninguna versión, se usará la imagen etiquetada con latest.

Exponer el despliegue

Después de implementar la aplicación, debes exponerla a Internet para que los usuarios puedan acceder a ella. Puedes exponer tu aplicación creando un servicio, un recurso de Kubernetes que expone tu aplicación al tráfico externo.

Para exponer tu aplicación, ejecuta el siguiente comando:kubectl expose

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

Si se incluye la marca --type LoadBalancer, se crea un balanceador de carga de Azure para el contenedor. La marca --port inicializa el puerto público 80 en Internet y la marca --target-port dirige el tráfico al puerto 8080 de la aplicación.

Los balanceadores de carga se facturan según los precios de los balanceadores de carga de Azure.

Inspeccionar y ver la aplicación

  1. Inspecciona los pods en ejecución con kubectl get pods:

    kubectl get pods
    

    Deberías ver un hello-server Pod en ejecución en tu clúster.

  2. Inspecciona el servicio hello-server con kubectl get service:

    kubectl get service hello-server
    

    En el resultado de este comando, copia la dirección IP externa del servicio de la columna EXTERNAL-IP.

  3. Para ver la aplicación desde tu navegador web, usa la IP externa con el puerto expuesto:

    http://EXTERNAL-IP
    

Acabas de desplegar una aplicación web en un contenedor en GKE en Azure.

Limpieza

  1. Elimina el servicio y el despliegue de la aplicación:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Elimina tu grupo de nodos ejecutando gcloud container azure node-pools delete:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Para eliminar el clúster, ejecuta el siguiente comando: gcloud container azure clusters delete

    gcloud container azure clusters delete azure-cluster-0
    

Siguientes pasos