Implementa una aplicación en GKE en Azure

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

Compatibilidad con Terraform

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

Antes de comenzar

Antes de crear un clúster, debes completar los requisitos. En particular, debes 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 otorgarán a GKE en Azure acceso a tu entorno de Azure a través de una principal del servicio.
  • Un recurso de AzureClient que GKE en Azure usa para autenticarse en los servicios de Azure y administrar los recursos en tu cuenta de Azure
  • Un par de claves SSH para acceder a máquinas virtuales de Azure en el clúster

Es tu responsabilidad crear y administrar estos recursos, que se pueden compartir entre todos los clústeres. GKE en Azure administra el resto de los recursos subyacentes de Azure para tu clúster.

Establece la configuración predeterminada para la CLI de gcloud

Usa la CLI de gcloud a fin de establecer la configuración predeterminada para el proyecto y la región de Google Cloud predeterminados.

Tu proyecto tiene un ID del proyecto como identificador único. Cuando creas un proyecto, puedes usar el ID del proyecto generado de forma automática o crear uno propio.

La región de Google Cloud es una ubicación desde la que se administrarán los clústeres. Por ejemplo, us-west1. Consulta Regiones de administración para obtener más detalles.

Cuando estableces esta configuración predeterminada, no es necesario que la incluyas cuando ejecutes la Google Cloud CLI. También puedes especificar parámetros de configuración o anular la configuración predeterminada si pasas las marcas --project y --location a Google Cloud CLI.

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

Para establecer valores predeterminados, sigue estos pasos:

  1. Configura el proyecto predeterminado:

    gcloud config set project PROJECT_ID
    

    Reemplaza PROJECT_ID con el ID del proyecto.

  2. Establece la ubicación de administración predeterminada:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    Reemplaza GOOGLE_CLOUD_LOCATION por la ubicación, como us-west1.

Selecciona los ID de recursos de Azure para tu clúster

Selecciona un ID de grupo de recursos

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

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

Reemplaza CLUSTER_RESOURCE_GROUP_NAME por el nombre del grupo de recursos en el que se aprovisionarán los recursos del clúster, que se configuró en el paso de requisitos previos Crea un grupo de recursos de Azure.

Selecciona un ID de red virtual

Guarda el ID de VNet de tu clúster en una variable de entorno mediante la ejecución del siguiente comando:

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

Reemplaza lo siguiente:

  • VNET_RESOURCE_GROUP_NAME por el nombre del grupo de recursos que contiene tu red virtual, como se configuró en el paso de requisitos previos Crea una red virtual de Azure.
  • VNET_NAME por el nombre de la red virtual, como se configuró en el paso de requisitos previos Crea una red virtual de Azure.

Selecciona un ID de subred

Guarda el ID de la subred de tu clúster en una variable de entorno mediante la ejecución del 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)

Reemplaza lo siguiente:

  • VNET_RESOURCE_GROUP_NAME por un nombre de grupo de recursos existente que contiene tu red virtual Puede ser el nombre del grupo de recursos que configuraste en Crea una red virtual de Azure.
  • VNET_NAME por el nombre de la red virtual Puede ser el nombre de la red virtual que configuraste en Crea una red virtual de Azure.
  • SUBNET_NAME por el nombre de tu subred, por ejemplo, default

Selecciona rangos CIDR para el clúster

Kubernetes requiere que se proporcionen dos rangos de CIDR para el clúster. Estos rangos CIDR se deben elegir para que no se superpongan con los rangos CIDR que usan tus subredes de VPC. Deberían ser lo suficientemente grandes para el tamaño máximo esperado de tu clúster.

  • Rango de CIDR de dirección IP: Cuando se crea un Pod nuevo, se le asigna una dirección IP de este rango. Rango de ejemplo: 192.168.208.0/20

  • Rango de CIDR de dirección del Service: Cuando se crea un Service nuevo, se le asigna una dirección IP de este rango. Rango de ejemplo: 192.168.224.0/20

Crea 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.29.3-gke.600 \
    --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"

Reemplaza lo siguiente:

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

Crea 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.29.3-gke.600 \
    --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"

Reemplaza SSH_PUBLIC_KEY por el texto de tu clave pública SSH, como se creó en el paso de requisitos previos Crea un par de claves SSH. Si guardaste tu clave pública en una variable de entorno, puedes usar ${SSH_PUBLIC_KEY}.

Visualiza el estado del 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 la consola de Google Cloud. Para ver el estado del clúster, elige si usas la CLI de Google Cloud o la consola de Google Cloud y sigue estos pasos:

gcloud

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

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster
  • GOOGLE_CLOUD_LOCATION es el nombre de la ubicación de Google Cloud que administra el clúster

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a la página Descripción general de los clústeres de Google Kubernetes Engine.

    Ir a los clústeres de GKE

  2. Los clústeres se enumeran 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, incluidos su estado y las funciones habilitadas.

Obtén las credenciales de autenticación para el clúster

Después de crear el clúster, debes obtener 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 creaste a través de la puerta de enlace de Connect. Necesitas al menos un grupo de nodos para usar la puerta de enlace de Connect, ya que depende del agente de Connect, que se ejecuta como un Deployment en el clúster.

Implementa una aplicación en el clúster

Ahora que ya creó el clúster, puede implementar una aplicación en contenedores en él. Para esta guía de inicio rápido, puedes implementar nuestra aplicación web de ejemplo, hello-app.

Usa los objetos de Kubernetes para crear y administrar los recursos de tus clústeres. Usa el objeto Deployment para implementar aplicaciones sin estado como servidores web. Los objetos Service definen las reglas y los balanceadores de cargas para acceder a tu aplicación desde Internet.

Crea el objeto Deployment

Para ejecutar hello-app en el clúster, debes implementar la aplicación mediante la ejecución del siguiente comando:

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

Con este comando de Kubernetes, kubectl create deployment, se crea un Deployment llamado hello-server. El Pod del Deployment ejecuta la imagen del contenedor hello-app.

En este comando, la siguiente instrucción:

  • --image especifica la imagen de contenedor para implementar. En este caso, el comando obtiene la imagen de ejemplo desde un repositorio de us-docker.pkg.dev/google-samples/containers/gke/hello-appArtifact Registry. El :1.0 indica la versión específica de la imagen que se desea obtener. Si no especificas una versión, se usa la imagen etiquetada con latest.

Expone el objeto Deployment

Luego de implementar la aplicación, debes exponerla en Internet para que los usuarios puedan acceder a ella. Para exponer tu aplicación, puedes crear un Service, un recurso de Kubernetes que expone tu aplicación al tráfico externo.

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

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

Cuando pasas la marca --type LoadBalancer, se crea un balanceador de cargas de Azure para el contenedor. La marca --port inicializa el puerto público 80 a Internet y la marca --target-port direcciona el tráfico al puerto 8080 de la aplicación.

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

Inspecciona y visualiza la aplicación

  1. Para inspeccionar los pods en ejecución, usa kubectl get pods:

    kubectl get pods
    

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

  2. Inspecciona el Service hello-server mediante kubectl get service:

    kubectl get service hello-server
    

    Copia la dirección IP externa del Service de la columna EXTERNAL-IP que aparece en el resultado del comando.

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

    http://EXTERNAL-IP
    

Acabas de implementar una aplicación web alojada en contenedores de GKE en Azure.

Limpia

  1. Borra el Service y el Deployment de la aplicación:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Ejecuta gcloud container azure node-pools delete para borrar tu grupo de nodos:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Si deseas borrar tu clúster, ejecuta gcloud container azure clusters delete:

    gcloud container azure clusters delete azure-cluster-0
    

¿Qué sigue?