En esta página, se 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.
El ejemplo se muestra en varios lenguajes, pero puedes usar otros lenguajes además de los que se muestran.
Antes de comenzar
- Accede a tu Cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
- Habilita las API de Cloud Build and Google Kubernetes Engine.
- Instala e inicializa el SDK de Cloud.
-
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:
Comienza a usarlo
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 Container 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 Container 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 bootVersion=2.1.3.RELEASE \ -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 Container Registry.
C#
Instala .NET Core SDK 2.2. Solo se requiere SDK de .NET Core para crear el proyecto web nuevo en el siguiente paso.
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
.Si deseas actualizar la definición
CreateWebHostBuilder
enProgram.cs
especifica la URL del puerto para.UseUrls()
a fin de definir el puerto de entrega. En el ejemplo, se muestra el puerto8080
, pero puedes usar otros puertos. Tu servidor debe detectar cualquier puerto que especifiques aquí:
Tu app está lista para empaquetarse en un contenedor de Docker y, luego, subirse a Container 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 Container Registry.
Ruby
Crea un directorio nuevo llamado
helloworld-gke
y cambia a este directorio:mkdir helloworld-gke cd helloworld-gke
Crea un archivo llamado
app.rb
y pega el siguiente código 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
.Crea un archivo llamado
Gemfile
y copia lo siguiente en este archivo:
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:Comienza a usarlo
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:Ruby
Obtén tu ID del proyecto de Google Cloud:
gcloud config get-value project
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. Reemplazaproject-id
por tu ID de Google Cloud:gcloud builds submit --tag gcr.io/project-id/helloworld-gke .
La imagen se almacena en Container Registry.
Crea un clúster de Kubernetes Engine
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. En este instructivo, se usa un solo nodo.
Crea el clúster. Reemplaza
your-gcp-zone
por la zona de Google Cloud en la que deseas alojar tu clúster. Para obtener una lista completa, consulta Geografía y regiones.gcloud container clusters create helloworld-gke \ --num-nodes 1 \ --enable-basic-auth \ --issue-client-certificate \ --zone your-gcp-zone
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 contenido siguiente. Reemplaza$GCLOUD_PROJECT
por tu ID del proyecto de Google Cloud:Implementa el recurso en el clúster:
kubectl apply -f deployment.yaml
Haz un seguimiento del estado de Deployment.
kubectl get deployments
El objeto Deployment se completa cuando todas las implementaciones
AVAILABLE
se encuentranREADY
.NAME READY UP-TO-DATE AVAILABLE AGE hello-deployment 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 varios 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 subir la app a tu navegador web y visualiza tu app en ejecución.
# Example cURL call to your running application on GKE (external IP address of service)
curl 35.111.111.11
Hello World!
Realiza una limpieza
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta guía de inicio rápido.
Se cobra por las instancias de Compute Engine que se ejecutan en tu clúster y por la imagen de contenedor en Container Registry.Borra el proyecto
Si borras tu proyecto de Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
- En Cloud Console, 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.
Para borrar un clúster con la herramienta de línea de comandos de gcloud
, ejecuta el siguiente comando:
gcloud container clusters delete helloworld-gke
Si deseas borrar una imagen de uno de tus repositorios de Container Registry, ejecuta el comando siguiente:
gcloud container images delete gcr.io/project-id/helloworld-gke
Próximos pasos
Para obtener más información sobre Kubernetes, consulta los vínculos siguientes:
- Obtén más información sobre cómo 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 de servidor web.
- Implementa una aplicación de Guestbook con Redis y PHP.
- Implementa una aplicación con estado de WordPress con almacenamiento continuo y MySQL.
- Configura Cloud Run en GKE.
Para obtener más información sobre la implementación en GKE directo desde tu IDE con Cloud Code, consulta los vínculos siguientes: