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 muestra con GKE on AWS.

Guía de inicio rápido para 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 usar 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
  • La función de IAM de AWS que GKE on AWS asume 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 tus clústeres de GKE on AWS. GKE on AWS administra todos los demás recursos subyacentes de AWS con permiso de 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 on AWS después de configurar tu proyecto y ubicación predeterminados, estos se crean de forma automática en ese proyecto y 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 on 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.28.7-gke.1700 \
    --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 de requisito 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 Crea subredes privadas paso de requisito
  • 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 de la función de IAM para el servicio de múltiples nubes de GKE que creaste en el paso de requisito previo Crea una función de la API de múltiples nubes de GKE
  • CONTROL_PLANE_PROFILE: el nombre de perfil de la instancia de IAM asociada con el clúster que elegiste en el paso de requisito Crea una función 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 dada a todos los recursos de AWS subyacentes administrados por GKE on 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.28.7-gke.1700 \
    --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 una función 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 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 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 de 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 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 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.

Este comando incluye lo siguiente:

  • --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 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 en GKE on AWS.

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 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?