Implementar una aplicación en GKE en Azure

Esta página describe cómo crear un clúster y un grupo de nodos, y luego implementar una aplicación de muestra mediante GKE en Azure.

Compatibilidad con Terraform

Si está familiarizado con Terraform, puede 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, debe cumplir con los prerrequisitos . En particular, debe proporcionar los siguientes recursos:

  • Una red virtual de Azure donde 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 su entorno de Azure mediante una entidad de servicio.
  • Un recurso de AzureClient que GKE en Azure usa para autenticarse en los servicios de Azure y administrar recursos en su cuenta de Azure.
  • Un par de claves SSH para acceder a las máquinas virtuales de Azure en el clúster.

Es su responsabilidad crear y administrar estos recursos, que pueden compartirse entre todos sus clústeres. Todos los demás recursos subyacentes de Azure para su clúster son administrados por GKE en Azure.

Establecer la configuración predeterminada para la CLI de gcloud

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

Tu proyecto tiene un ID de proyecto como identificador único. Al crear un proyecto, puedes usar el ID generado automáticamente o crear uno propio.

Su Google Cloud La región es la ubicación desde la que se administrarán sus clústeres. Por ejemplo, us-west1 . Consulte Regiones de administración para obtener más información.

Al configurar estos ajustes predeterminados, no es necesario incluirlos al ejecutar la CLI de Google Cloud. También puedes especificar o anular los ajustes predeterminados pasando los indicadores --project y --location a la CLI de Google Cloud.

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

Para establecer valores predeterminados, siga estos pasos:

  1. Establecer el proyecto predeterminado:

    gcloud config set project PROJECT_ID
    

    Reemplace PROJECT_ID con el ID de su proyecto.

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

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    Reemplace GOOGLE_CLOUD_LOCATION con su ubicación, como us-west1 .

Seleccione los identificadores de recursos de Azure para su clúster

Seleccione un ID de grupo de recursos

Guarde el grupo de recursos de su 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)

Reemplace CLUSTER_RESOURCE_GROUP_NAME con el nombre del grupo de recursos para aprovisionar los recursos de su clúster, que configuró en el paso de requisitos previos Crear un grupo de recursos de Azure .

Seleccione un ID de red virtual

Guarde el ID de VNet de su 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)

Reemplace lo siguiente:

  • VNET_RESOURCE_GROUP_NAME con el nombre del grupo de recursos que contiene su red virtual, tal como se configuró en el paso de requisitos previos Crear una red virtual de Azure .
  • VNET_NAME con el nombre de su red virtual, tal como se configuró en el paso de requisitos previos Crear una red virtual de Azure .

Seleccione un ID de subred

Guarde el ID de subred de su 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)

Reemplazar:

  • VNET_RESOURCE_GROUP_NAME con un nombre de grupo de recursos existente que contenga su red virtual. Este puede ser el nombre del grupo de recursos que configuró en "Crear una red virtual de Azure" .
  • VNET_NAME con el nombre de su red virtual. Puede ser el nombre de la red virtual que configuró en "Crear una red virtual de Azure" .
  • SUBNET_NAME con el nombre de su subred, por ejemplo, default .

Seleccione rangos CIDR para su clúster

Kubernetes requiere que se proporcionen dos rangos de CIDR para el clúster. Estos rangos deben seleccionarse de forma que no se superpongan con los rangos de CIDR utilizados por las subredes de VPC. Deben ser lo suficientemente grandes como para el tamaño máximo esperado del clúster.

  • Rango CIDR de direcciones de pod : Al crear un nuevo Pod , se le asigna una dirección IP de este rango. Ejemplo: 192.168.208.0/20

  • Rango CIDR de direcciones de servicio : Al crear un nuevo servicio, se le asigna una dirección IP de este rango. Ejemplo: 192.168.224.0/20

Crear un clúster

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

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.31.4-gke.500 \
    --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"

Reemplazar:

Para obtener más información y parámetros opcionales, consulte la página de referencia de creación de clústeres de Azure de gcloud container .

Crear un grupo de nodos

Cree un grupo de nodos con la CLI de Google Cloud:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.31.4-gke.500 \
    --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"

Reemplace SSH_PUBLIC_KEY con el texto de su clave pública SSH, tal como se creó en el paso previo " Crear un par de claves SSH" . Si guardó su clave pública en una variable de entorno, puede usar ${SSH_PUBLIC_KEY} .

Ver el estado de su clúster

Después de crear un clúster y un grupo de nodos, puede ver el estado de un clúster con la CLI de Google Cloud o la Google Cloud consola. Para ver el estado del clúster, elija si está utilizando la CLI de Google Cloud o Google Cloud consola y siga estos pasos:

nube g

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

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Reemplace lo siguiente:

  • CLUSTER_NAME : el nombre de su clúster
  • GOOGLE_CLOUD_LOCATION : el nombre de la Google Cloudubicación que administra el clúster

Google Cloud consola

  1. En el Google Cloud consola, vaya a la página de descripción general de clústeres de Google Kubernetes Engine .

    Ir a los clústeres de GKE

  2. Sus clústeres se enumeran por nombre y ubicación.

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

Obtener credenciales de autenticación para el clúster

Después de crear su clúster, necesita obtener credenciales de autenticación para interactuar con el clúster:

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

Este comando configura kubectl para acceder al clúster creado mediante Connect Gateway . Necesita al menos un grupo de nodos para usar Connect Gateway, ya que depende del agente de Connect, que se ejecuta como una implementación en el clúster.

Implementar una aplicación en el clúster

Ahora que ha creado un clúster, puede implementar una aplicación contenedorizada en él. Para esta guía de inicio rápido, puede implementar nuestra aplicación web de ejemplo, hello-app .

Utiliza objetos de Kubernetes para crear y administrar los recursos de tu clúster. Utiliza el objeto de implementación para implementar aplicaciones sin estado, como servidores web. Los objetos de servicio definen reglas y balanceadores de carga para acceder a tu aplicación desde internet.

Crear la implementación

Para ejecutar hello-app en su clúster, debe implementar 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 una implementación llamada hello-server . El pod de la implementación ejecuta la imagen del contenedor hello-app .

En este comando:

  • --image especifica una imagen de contenedor para implementar. En este caso, el comando extrae la imagen de ejemplo de un repositorio del Registro de Artefactos, us-docker.pkg.dev/google-samples/containers/gke/hello-app . :1.0 indica la versión específica de la imagen que se extraerá. Si no se especifica una versión, se utiliza la imagen etiquetada con latest .

Exponer el despliegue

Tras implementar la aplicación, debe exponerla a internet para que los usuarios puedan acceder a ella. Puede hacerlo creando un Servicio, un recurso de Kubernetes que la expone al tráfico externo.

Para exponer su aplicación, ejecute el siguiente comando kubectl expose :

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

Al pasar la marca --type LoadBalancer se crea un balanceador de carga de Azure para el contenedor. La marca --port inicializa el puerto público 80 a Internet y la marca --target-port enruta el tráfico al puerto 8080 de la aplicación.

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

Inspeccionar y ver la aplicación

  1. Inspeccione los pods en ejecución usando kubectl get pods :

    kubectl get pods
    

    Deberías ver un pod hello-server ejecutándose en tu clúster.

  2. Inspeccione el servicio hello-server usando kubectl get service :

    kubectl get service hello-server
    

    Desde la salida de este comando, copie la dirección IP externa del Servicio de la columna EXTERNAL-IP .

  3. Vea la aplicación desde su navegador web utilizando la IP externa con el puerto expuesto:

    http://EXTERNAL-IP
    

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

Limpiar

  1. Eliminar el servicio y la implementación de la aplicación:

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

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Elimine su clúster ejecutando gcloud container azure clusters delete :

    gcloud container azure clusters delete azure-cluster-0
    

¿Qué sigue?