Google Cloud Platform - Create and Manage Cloud-Resources Course: Challenge Lab
Introducción
En este repositorio encontraréis paso por paso de la realización del Challenge Lab de Google Cloud Platform en el que hemos creado un proyecto de Google Cloud Platform con una instancia jumphost, un cluster de Kubernetes y un balanceador de carga HTTP.
¡Comenzamos!
Comenzamos abriendo nuestra consola de Google Cloud Platform y vamos a activar la shell de Google Cloud. Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
Cuando nos conectemos, se nos habrá completado la autenticació, y el proyecto estará configurado de forma predeterminada para la sesión actual.
gcloud auth list
Nos saldrá una pequeña ventana en la que deberemos clicar en autorizar.
Tarea 1: Creamos una instancia jumphost para este proyecto
Nos dirigimos al menú de navegación y clicamos en Compute Engine y seleccionamos VM Instance. Configuraremos nuestra máquina de la siguiente manera:
- Nombre: nucleus-jumphost-671.
- Región: us-central1.
- Zona: us-central1-b.
- Tipo de Máquina: e2-micro.
- Boot Disk: dejamos el que viene por defecto (Debian/Linux).
- El resto de configuraciones las dejamos por defecto.
Clicamos en crear y esperamos un par de minutos hasta que se cree nuestra máquina virtual.
Tarea 2: Creamos un cluster de Kubernetes
Para construir el cluster de Kubernetes, vamos a usar el comando gcloud container clusters create. Este comando nos permite crear un clúster de Kubernetes en Google Kubernetes Engine.
Los requisitos son los siguientes:
- Creamos un cruster en la zona us-central1-b.
- Uso de contendero Docker hello-app (gcr.io/google-samples/hello-app:2.0) como marcador de posición; el equipo reemplazará el contenedor con su propio trabajo más adelante.
- Exponemos la aplicación en el puerto 8080.
Para ello, primero configuramos la zona:
gcloud config set compute/zone us-central1-b
Y ahora creamos el cluster:
gcloud container clusters create nucleus-webserver1
Le asignamos credenciales de administrador:
gcloud container clusters get-credentials nucleus-webserver1
Y desplegamos el cluster:
kubectl create deployment hello-app --image=gcr.io/google-samples/hello-app:2.
kubectl expose deployment hello-app --type=LoadBalancer --port 8081
kubectl get service
Tarea 3: Configuramos una balanceador de carga HTTP
Podemor servir el sitio a través de servidores web nginx, pero queremos asegurarnos de que el entorno sea tolerante a fallos. Para ello, crearemos un balanceador de carga HTTP con un grupo de instancias administradas de 2 servidores web nginx. Usaremos el siguiente código para configurar los servidores web; el equipo lo reemplazará con su propia configuración más adelante.
cat << EOF > startup.sh
#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
EOF
Vamos a necesitar:
- Una template para la instance. No usaremos el tipo de máquina por defecto. En su lugar, usaremos
e2-medium.
gcloud compute instance-templates create nginx-template --metadata-from-file startup-script=startup.sh
- Un target pool.
gcloud compute target-pools create nginx-pool
(Si la localización no es la misma, podemos presionar N para cambiarla, ya que normalmente toma la localización predeterminada) y elegimos el nombre de la localización.
gcloud compute instance-groups managed create nginx-group --base-instance-name nginx --size 2 --template nginx-template --target-pool nginx-pool
gcloud compute instances list
- Una regla de firewall que permita el tráfico (80/tcp).
gcloud compute firewall-rules create permit-tcp-rule-636 --allow tcp:80
gcloud compute forwarding-rules create nginx-lb --region us-central1 --ports=80 --target-pool nginx-pool
gcloud compute forwarding-rules list
- Una regla de firewall que permita el tráfico (80/tcp).
gcloud compute firewall-rules create permit-tcp-rule-636 --allow tcp:80
gcloud compute forwarding-rules create nginx-lb --region us-central1 --ports=80 --target-pool nginx-pool
gcloud compute forwarding-rules list
- Un servicio de backend y un unirlo al grupo de instancias administradas (http:80).
gcloud compute backend-services create nginx-backend --protocol HTTP --http-health-checks http-basic-check --global
gcloud compute backend-services add-backend nginx-backend --instance-group nginx-group --instance-group-zone us-central1-b --global
- Una URL map y un target HTTP proxy para enrutar las solicitudes al servicio de backend.
gcloud compute url-maps create web-map --default-service nginx-backend
gcloud compute target-http-proxies create http-lb-proxy --url-map web-map
- Una regla de reenvío que use el proxy como destino.(forwarding rule).
gcloud compute forwarding-rules create http-content-rule --global --target-http-proxy http-lb-proxy --ports 80
gcloud compute forwarding-rules list
Tras toda esta configuración, deberemos esperar entre 5 y 7 minutos para que se configuren todos los recursos.
Resumen
Tras esto, podemos decir que hemos creado un proyecto de Google Cloud Platform con una instancia jumphost, un cluster de Kubernetes y un balanceador de carga HTTP. Este tipo de implementación es muy común en la nube, ya que nos permite tener un entorno escalable y tolerante a fallos.