Implementa una aplicación en GKE en AWS

En esta página, se proporcionan instrucciones de inicio rápido para crear un clúster y un grupo de nodos y, luego, implementar una aplicación de ejemplo por medio del uso de clústeres de Anthos en AWS.

Guía de inicio rápido para usar tu clúster con Terraform

Puedes usar Terraform para crear un clúster y un grupo de nodos. Antes de crear tu clúster, las secuencias de comandos de Terraform también preparan tu VPC de AWS.

Puedes obtener más información sobre Terraform en un entorno de AWS en la referencia del clúster de Terraform y la referencia del grupo de nodos de Terraform.

Después de crear una VPC y un clúster con Terraform, ve a Implementa una aplicación en el clúster para implementar una aplicación de muestra.

Guía de inicio rápido para tu clúster sin Terraform

Si prefieres preparar tu VPC de AWS y crear un clúster y un grupo de nodos sin Terraform, sigue estas instrucciones.

Antes de comenzar

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

  • Una VPC de AWS en la que se ejecutará el clúster
  • Hasta tres subredes de AWS para las tres réplicas del plano de control. Cada una debe estar en una zona de disponibilidad de AWS diferente.
  • El rol de IAM de AWS que GKE on AWS adopta cuando administras tu clúster. Esto requiere un conjunto específico de permisos de IAM.
  • Claves CMK simétricas de KMS para la encriptación en reposo de los datos del clúster (etcd) y la configuración
  • El perfil de la instancia de IAM de AWS para cada réplica del plano de control. Esto requiere un conjunto específico de permisos de IAM.
  • Un par de claves SSH de EC2 (opcional) si necesitas acceso de SSH a las instancias de EC2 que ejecutan cada réplica del plano de control.

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

Establece la configuración predeterminada para la gcloud CLI

Usa la gcloud CLI 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 GKE en recursos de AWS después de configurar tu proyecto y ubicación predeterminados, estos se crean de forma automática 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_aws/location GOOGLE_CLOUD_LOCATION
    

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

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 de servicio: 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 AWS. Para obtener más información sobre este comando, incluidos sus parámetros opcionales, consulta la página de referencia de gcloud container aws create.

gcloud container aws clusters create aws-cluster-0 \
    --cluster-version 1.29.3-gke.600 \
    --aws-region AWS_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --vpc-id VPC_ID \
    --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --role-arn API_ROLE_ARN \
    --iam-instance-profile CONTROL_PLANE_PROFILE \
    --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "google:gkemulticloud:cluster=aws-cluster-0"

Reemplaza lo siguiente:

  • AWS_REGION: la región de AWS en la que se creará el clúster.
  • FLEET_PROJECT_ID: el proyecto host fleet en el que se registrará el clúster.
  • VPC_ID: el ID de la VPC de AWS para este clúster que configuraste en el paso previo Crea tu VPC
  • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3: los ID de subred para las tres instancias del plano de control que creaste en tu clúster en el paso previo Crea subredes privadas
  • POD_CIDR_BLOCK: el rango de direcciones de CIDR para los pods del clúster
  • SERVICE_CIDR_BLOCK: el rango de direcciones CIDR para los servicios del clúster
  • API_ROLE_ARN: el ARN del rol de IAM para el servicio de múltiples nubes de GKE que creaste en el paso previo Crea el rol de la API de GKE Multi-Cloud
  • CONTROL_PLANE_PROFILE: el nombre de perfil de la instancia de IAM asociada con el clúster que elegiste en el paso previo Crea un rol de plano de control.
  • DB_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de una de las claves de KMS de AWS que creaste en el paso previo Crea una clave de AWS KMS
  • CONFIG_KMS_KEY_ARN: el nombre del recurso de Amazon (ARN) de la otra clave de KMS de AWS que creaste en el paso previo Crea una clave de AWS KMS

Si está presente, el parámetro --tags aplica la etiqueta de AWS determinada a todos los recursos subyacentes de AWS administrados por GKE en AWS. En este ejemplo, se etiquetan los nodos del plano de control con el nombre del clúster al que pertenecen.

Crea un grupo de nodos

Usa el siguiente comando para crear un grupo de nodos:

gcloud container aws node-pools create pool-0 \
    --cluster aws-cluster-0 \
    --node-version 1.29.3-gke.600 \
    --min-nodes 1 \
    --max-nodes 5 \
    --max-pods-per-node 110 \
    --root-volume-size 50 \
    --subnet-id NODEPOOL_SUBNET_ID \
    --iam-instance-profile NODEPOOL_PROFILE \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --ssh-ec2-key-pair EC2_KEY_PAIR \
    --tags "google:gkemulticloud:cluster=aws-cluster-0"

Reemplaza lo siguiente:

  • NODEPOOL_SUBNET_ID: el ID de una de las subredes privadas que creaste en el paso de requisito Crea subredes privadas.
  • NODEPOOL_PROFILE: el nombre del perfil de instancia de IAM para las instancias de EC2 en el grupo de nodos que elegiste en el paso previo de Crea un rol de IAM de grupo de nodos.
  • CONFIG_KMS_KEY_ARN el nombre del recurso de Amazon (ARN) de la clave de KMS de AWS para encriptar los datos del usuario
  • EC2_KEY_PAIR (opcional): el nombre del par de claves EC2 que se creó para el acceso SSH (opcional) que creaste en el paso previo Crea un par de claves SSH.

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

gcloud

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

gcloud container aws 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.

    Ve 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 aws clusters get-credentials aws-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 alojada 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:

  • --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 AWS 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 AWS.

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 por medio de 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 a GKE en AWS.

Realiza una limpieza

  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 aws node-pools delete para borrar tu grupo de nodos:

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

    gcloud container aws clusters delete aws-cluster-0
    

¿Qué sigue?