Crear un clúster y desplegar una carga de trabajo con Terraform
Un clúster de Kubernetes proporciona computación, almacenamiento, redes y otros servicios para aplicaciones, de forma similar a un centro de datos virtual. Las aplicaciones y los servicios asociados que se ejecutan en Kubernetes se denominan cargas de trabajo.
En este tutorial se muestra cómo ver rápidamente un clúster de Google Kubernetes Engine y una carga de trabajo de ejemplo en funcionamiento, todo configurado con Terraform. Después, puedes explorar la carga de trabajo en la Google Cloud consola antes de seguir nuestro curso más detallado o empezar a planificar y crear tu propio clúster listo para producción. En este tutorial se da por hecho que ya conoces Terraform.
Si prefieres configurar tu clúster y tu carga de trabajo de ejemplo en la Google Cloud consola, consulta Crear un clúster en la consola Google Cloud .
Antes de empezar
Sigue estos pasos para habilitar la API de Kubernetes Engine:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
Inicia una sesión de Cloud Shell desde la consola Google Cloud haciendo clic en el icono de activación de Cloud Shell Activar Cloud Shell
. De esta forma, se inicia una sesión en el panel inferior de la consola Google Cloud .
Las credenciales de servicio asociadas a esta máquina virtual son automáticas, por lo que no tienes que configurar ni descargar una clave de cuenta de servicio.
Antes de ejecutar comandos, define tu proyecto predeterminado en la CLI de gcloud con el siguiente comando:
gcloud config set project PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tu proyecto.Clona el repositorio de GitHub:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Cambia al directorio de trabajo:
cd terraform-docs-samples/gke/quickstart/autopilot
Revisa el archivo
cluster.tf
:cat cluster.tf
La salida es similar a la siguiente:
En este archivo se describen los siguientes recursos:
google_compute_network
: una red de VPC con IPv6 interno habilitado.google_compute_subnetwork
: una subred de doble pila.google_container_cluster
: un clúster de modo Autopilot de pila dual ubicado enus-central1
. El ajustedeletion_protection
controla si puedes usar Terraform para eliminar este clúster. Si asignas el valorfalse
al campodeletion_protection
, Terraform puede eliminar el clúster. Para obtener más información, consulta la referencia degoogle_container_cluster
.
Revisa el archivo
app.tf
:cat app.tf
El resultado debería ser similar al siguiente:
En este archivo se describen los siguientes recursos:
- Un despliegue con una imagen de contenedor de muestra.
- Un servicio de tipo LoadBalancer. El servicio expone el Deployment en el puerto 80.
En
cluster.tf
, cambiaipv6_access_type
deINTERNAL
aEXTERNAL
.ipv6_access_type = "EXTERNAL"
En
app.tf
, configura un balanceador de carga externo quitando la anotaciónnetworking.gke.io/load-balancer-type
.annotations = { "networking.gke.io/load-balancer-type" = "Internal" # Remove this line }
En Cloud Shell, ejecuta este comando para verificar que Terraform está disponible:
terraform
La salida debería ser similar a la siguiente:
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructure
Inicializa Terraform:
terraform init
Planifica la configuración de Terraform:
terraform plan
Aplica la configuración de Terraform
terraform apply
Cuando se te solicite, introduce
yes
para confirmar las acciones. Este comando puede tardar varios minutos en completarse. El resultado debería ser similar al siguiente:Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Ve a la página Cargas de trabajo de la Google Cloud consola:
Haz clic en la carga de trabajo
example-hello-app-deployment
. Se muestra la página Detalles del pod. En esta página se muestra información sobre el pod, como las anotaciones, los contenedores que se ejecutan en el pod, los servicios que exponen el pod y las métricas, incluido el uso de CPU, memoria y disco.Ve a la página Servicios y entrada de la consola de Google Cloud :
Haz clic en el
example-hello-app-loadbalancer
servicio LoadBalancer. Se mostrará la página de detalles del servicio. En esta página se muestra información sobre el servicio, como los pods asociados al servicio y los puertos que utiliza.En la sección Endpoints externos, haz clic en el enlace IPv4 o en el enlace IPv6 para ver tu servicio en el navegador. La salida es similar a la siguiente:
Hello, world! Version: 2.0.0 Hostname: example-hello-app-deployment-5df979c4fb-kdwgr
En Cloud Shell, ejecuta el siguiente comando para eliminar los recursos de Terraform:
terraform destroy --auto-approve
Elimina las reglas de cortafuegos:
gcloud compute firewall-rules list --filter="NETWORK:example-network" --format="table[no-heading](name)" | xargs gcloud --quiet compute firewall-rules delete
Vuelve a ejecutar el comando de Terraform:
terraform destroy --auto-approve
Explora tu clúster y tu carga de trabajo en la Google Cloud consola para conocer algunos de los ajustes y recursos clave de la carga de trabajo que has implementado.
Consulta más información sobre cómo configurar y usar Terraform con GKE en Compatibilidad de Terraform con GKE.
Prueba nuestro plan de formación sobre aplicaciones escalables, que es más detallado.
Consulta cómo empezar a administrar clústeres en situaciones reales en nuestra información general sobre la administración de clústeres.
Preparar el entorno
En este tutorial, usarás Cloud Shell para gestionar los recursos alojados enGoogle Cloud. Cloud Shell tiene preinstalado el software que necesitas para este tutorial, como Terraform, kubectl
y Google Cloud CLI.
Revisar los archivos de Terraform
El Google Cloud proveedor es un complemento que te permite gestionar y aprovisionar Google Cloud recursos con Terraform. Actúa como puente entre las configuraciones de Terraform y las APIs de Google Cloud , lo que te permite definir de forma declarativa recursos de infraestructura, como máquinas virtuales y redes.
El clúster y la aplicación de ejemplo de este tutorial se especifican en dos archivos de Terraform que usan los proveedores Google Cloud y Kubernetes.
(Opcional) Exponer la aplicación en Internet
Los archivos de Terraform del ejemplo describen una aplicación con una dirección IP interna, a la que solo se puede acceder desde la misma nube privada virtual (VPC) que la aplicación de ejemplo. Si quieres acceder a la interfaz web de la aplicación de demostración en ejecución desde Internet (por ejemplo, desde tu portátil), modifica los archivos de Terraform para crear una dirección IP pública antes de crear el clúster. Puedes hacerlo con un editor de texto directamente en Cloud Shell o con el editor de Cloud Shell.
Para exponer la aplicación de demostración en Internet, haz lo siguiente:
Crear un clúster y desplegar una aplicación
Verificar que el clúster funciona
Para confirmar que el clúster se está ejecutando correctamente, haz lo siguiente:
Limpieza
Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.
Si tienes previsto seguir otros tutoriales o explorar más a fondo la muestra, espera a terminar para realizar este paso.
Solucionar errores de limpieza
Si aparece un mensaje de error similar a The network resource 'projects/PROJECT_ID/global/networks/example-network' is already being used by 'projects/PROJECT_ID/global/firewalls/example-network-yqjlfql57iydmsuzd4ot6n5v'
,
haz lo siguiente: