Implementa una app en una imagen de contenedor en un clúster de GKE
Esta página te muestra cómo hacer lo siguiente:
- Crear una app de Hello World
- Empaquetar la app en una imagen de contenedor con Cloud Build
- Crear un clúster en Google Kubernetes Engine (GKE)
- Implementar la imagen de contenedor en tu clúster.
La muestra se indica en varios lenguajes, pero puedes usar otros además de los que se señalan.
Para seguir la guía paso a paso sobre esta tarea directamente en el editor de Cloud Shell, haz clic en Guiarme:
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Comprueba que la facturación esté habilitada en tu proyecto.
-
Habilita las API de Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Comprueba que la facturación esté habilitada en tu proyecto.
-
Habilita las API de Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
kubectl
se usa para administrar Kubernetes, el sistema de organización de clúster que usa GKE. Puedes instalarkubectl
congcloud
:gcloud components install kubectl
Escribe la app de muestra
Si quieres obtener instrucciones para crear una app de Hello World que se ejecute en GKE, haz clic en tu lenguaje:
Go
Crea un directorio nuevo llamado
helloworld-gke
y usa el comando de cambio de directorio en él:mkdir helloworld-gke cd helloworld-gke
Crea un módulo nuevo llamado
example.com/helloworld
:go mod init example.com/helloworld
Crea un archivo nuevo llamado
helloworld.go
y pega el siguiente código en él:Con este código, se crea un servidor web que recibe datos en el puerto definido por la variable de entorno
PORT
.
Tu app está lista para empaquetarse en un contenedor de Docker y, luego, subirse a Artifact Registry.
Node.js
Crea un directorio nuevo llamado
helloworld-gke
y cambia a este directorio:mkdir helloworld-gke cd helloworld-gke
Crea un archivo
package.json
con el siguiente contenido:En el mismo directorio, crea un archivo
index.js
y copia las líneas siguientes en este archivo:Con este código, se crea un servidor web que recibe datos en el puerto definido por la variable de entorno
PORT
.
Tu app está lista para empaquetarse en un contenedor de Docker y subirse a Artifact Registry.
Python
Crea un directorio nuevo llamado
helloworld-gke
y cambia a este directorio:mkdir helloworld-gke cd helloworld-gke
Crea un archivo llamado
app.py
y pega el siguiente código en este archivo:
Java
Crea una app de Spring Boot.
Instala Java SE 8 o un JDK y cURL superior. Solo se requieren Java SE y cURL para crear el proyecto web nuevo en el paso siguiente. Dockerfile, que se describe más adelante, carga todas las dependencias en el contenedor.
Desde tu terminal, crea un proyecto web vacío nuevo:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=1.8 \ -d type=maven-project \ -d bootVersion=2.6.6 \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld-gke \ -o helloworld-gke.zip unzip helloworld-gke.zip cd helloworld-gke
Ahora tienes un proyecto de Spring Boot nuevo en
helloworld-gke
.En el archivo
src/main/java/com/example/helloworld/HelloworldApplication.java
, actualiza la claseHelloworldApplication
mediante un@RestController
para controlar la asignación/
.Con este código, se crea un servidor web que recibe datos en el puerto definido por la variable de entorno
PORT
.
Tu app está lista para empaquetarse en un contenedor de Docker y, luego, subirse a Artifact Registry.
C#
Instala el SDK de .NET. Solo se requiere el SDK de .NET para crear el proyecto web nuevo en el paso siguiente.
Dockerfile
, que se describe más adelante, carga todas las dependencias en el contenedor.Desde tu terminal, crea un proyecto web vacío nuevo:
dotnet new web -o helloworld-gke
Cambia el directorio a
helloworld-gke
.cd helloworld-gke
Actualiza
Program.cs
para escuchar en el puerto8080
:
Tu app está lista para empaquetarse en un contenedor de Docker y, luego, subirse a Artifact Registry.
PHP
Crea un directorio nuevo llamado
helloworld-gke
y cambia a este directorio:mkdir helloworld-gke cd helloworld-gke
Crea un archivo llamado
index.php
y pega el siguiente código en este archivo:
Tu app está lista para empaquetarse en un contenedor de Docker y, luego, subirse a Artifact Registry.
Crea contenedores para la app con Cloud Build
Si quieres crear contenedores para la app de muestra, crea un archivo nuevo llamado
Dockerfile
en el mismo directorio que los archivos de origen y copia el siguiente contenido:Go
Node.js
Agrega otro archivo
.dockerignore
para asegurarte de que los archivos locales no afecten el proceso de compilación del contenedor:Python
Agrega un archivo
.dockerignore
para asegurarte de que los archivos locales no afecten el proceso de compilación del contenedor:Java
C#
Agrega un archivo
.dockerignore
para asegurarte de que los archivos locales no afecten el proceso de compilación del contenedor:PHP
Agrega un archivo
.dockerignore
para asegurarte de que los archivos locales no afecten el proceso de compilación del contenedor:Obtén tu ID del proyecto de Google Cloud:
gcloud config get-value project
En esta guía de inicio rápido, almacenarás tu contenedor en Artifact Registry y lo implementarás en el clúster desde el registro. Ejecuta el siguiente comando para crear un repositorio llamado
hello-repo
en la misma ubicación que tu clúster:gcloud artifacts repositories create hello-repo \ --project=PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Reemplaza los siguientes valores:
PROJECT_ID
es el ID del proyecto de Google Cloud.
Compila tu imagen de contenedor con Cloud Build, que es similar a ejecutar
docker build
ydocker push
, pero la compilación se realiza en Google Cloud.gcloud builds submit \ --tag us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke .
La imagen se almacena en Artifact Registry.
Crea un clúster de GKE
Un clúster de GKE es un conjunto administrado de máquinas virtuales de Compute Engine que operan como un solo clúster de GKE.
Crea el clúster.
gcloud container clusters create-auto helloworld-gke \ --location us-central1
Verifica que tienes acceso al clúster. Con el comando siguiente, se enumeran los nodos de tu clúster de contenedores que están en funcionamiento y que indican que tienes acceso al clúster.
kubectl get nodes
Si detectas errores, consulta la Guía de solución de problemas de Kubernetes
Implementar en GKE
Si quieres implementar tu app en el clúster de GKE que creaste, necesitas dos objetos de Kubernetes.
- Una Implementación para definir tu app.
- Un servicio para definir cómo acceder a tu app.
Implementar una app
La app tiene un servidor frontend que controla las solicitudes web. Define los recursos del clúster necesarios para ejecutar el frontend en un archivo nuevo llamado deployment.yaml
. Estos recursos se describen como una implementación. Debes usar implementaciones para crear y actualizar un ReplicaSet
y sus pods asociados.
Crea el archivo
deployment.yaml
en el mismo directorio que tus otros archivos y copia el siguiente contenido. Reemplaza los siguientes valores en tu archivo:$GCLOUD_PROJECT
es el ID del proyecto de Google Cloud.$LOCATION
es la ubicación del repositorio, comous-central1
.
Implementa el recurso en el clúster:
kubectl apply -f deployment.yaml
Haz un seguimiento del estado de la implementación.
kubectl get deployments
El objeto Deployment se completa cuando todas las implementaciones
AVAILABLE
se encuentranREADY
.NAME READY UP-TO-DATE AVAILABLE AGE helloworld-gke 1/1 1 1 20s
Si la implementación falla, vuelve a ejecutar
kubectl apply -f deployment.yaml
para actualizarla con los cambios.Cuando la implementación finalice, podrás ver los pods que creó.
kubectl get pods
Implementa el servicio:
Los servicios proporcionan un solo punto de acceso a un conjunto de pods. Si bien es posible acceder a un solo pod, los pods son efímeros y solo se puede acceder de manera confiable mediante una dirección del servicio. En tu app de Hello World, el servicio “hello” define un balanceador de cargas para acceder a los hello-app
pods desde una sola dirección IP. Este servicio se define en el archivo service.yaml
.
Crea el archivo
service.yaml
en el mismo directorio que tus otros archivos de origen con el contenido siguiente:Los pods se definen por separado desde el servicio que usa los Pods. Kubernetes usa etiquetas para seleccionar los Pods a los que se dirige un servicio. Gracias a las etiquetas, puedes tener un servicio que se dirija a los Pods desde conjuntos de réplicas diferentes y tener múltiples servicios que apunten a un Pod en particular.
Crea el servicio Hello World:
kubectl apply -f service.yaml
Obtén la dirección IP externa del servicio:
kubectl get services
Puede tardar hasta 60 segundos asignar la dirección IP. La dirección IP externa aparecerá en la columna
EXTERNAL-IP
para el serviciohello
.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello LoadBalancer 10.22.222.222 35.111.111.11 80:32341/TCP 1m kubernetes ClusterIP 10.22.222.1 <none> 443/TCP 20m
Visualiza una app implementada
Ya implementaste todos los recursos necesarios para ejecutar la app de Hello World en GKE.
Usa la dirección IP externa del paso anterior para cargar la app a tu navegador web y visualiza tu app en ejecución:
http://EXTERNAL_IP
O bien puedes realizar una llamada curl
a la dirección IP externa del servicio:
curl EXTERNAL_IP
El resultado muestra la siguiente información:
Hello World!
Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.
Se cobra por las instancias de Compute Engine que se ejecutan en tu clúster y por la imagen de contenedor en Artifact Registry.Borra el proyecto
Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra tu clúster y contenedor
Si deseas conservar tu proyecto, pero solo borrar los recursos que usaste en este instructivo, borra tu clúster y la imagen.
A fin de borrar un clúster mediante Google Cloud CLI, ejecuta el siguiente comando para el modo que usaste:
gcloud container clusters delete helloworld-gke \
--location us-central1
Para borrar una imagen en tu repositorio de Artifact Registry, ejecuta el siguiente comando:
gcloud artifacts docker images delete \
us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke
Próximos pasos
Para obtener más información sobre Kubernetes, consulta los vínculos siguientes:
- Obtén más información para crear clústeres.
- Obtén más información sobre Kubernetes.
- Lee la documentación de referencia de
kubectl
.
Para obtener más información sobre la implementación en GKE, consulta los vínculos siguientes:
- Obtén información sobre cómo empaquetar, alojar y, luego, implementar una aplicación sencilla de servidor web.
- Crea una aplicación web de varios niveles con Redis y PHP.
- Implementa WordPress en GKE con Persistent Disk y Cloud SQL.
- Configura Cloud Run en GKE.
Si quieres obtener más información para crear, desarrollar y ejecutar aplicaciones en GKE directamente desde tu IDE con Cloud Code, consulta las siguientes referencias: