Google Compute Engine

1. Introducción

Hola a todos: gracias por asistir hoy. ¿Estás listo para aprender sobre Google Compute Engine?

En este codelab, exploraremos Compute Engine trabajando con una aplicación de libro de visitas de ejemplo.

Creará instancias de Compute Engine, implementará nginx y, por último, colocará un balanceador de cargas de red al frente. Puedes crear una instancia de Compute Engine desde la consola gráfica o la línea de comandos. En este lab, se explicará cómo usar la línea de comandos.

ComputeEngine_128px.png

Google Compute Engine ofrece máquinas virtuales que se ejecutan en los centros de datos de Google conectados a su red global de fibra óptica. Las herramientas y el flujo de trabajo que se ofrecen permiten el escalamiento de instancias individuales a una computación en la nube global con balanceo de cargas.

Estas VM se inician rápidamente, incluyen almacenamiento en discos persistentes y brindan un rendimiento uniforme. Las máquinas están disponibles en muchas configuraciones, incluidos los tamaños predefinidos, y también se pueden crear con tipos personalizados de máquinas optimizados según sus necesidades específicas.

Por último, las máquinas virtuales de Compute Engine también son la tecnología que utilizan otros productos de Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, etc.).

2. Configuración y requisitos

Configuración del entorno a su propio ritmo

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única. por lo general, no importa lo que sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (y suele identificarse como PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio, o puedes probar el tuyo al mismo tiempo. está disponible. Luego, se "congela" después de crear el proyecto.
  • Hay un tercer valor, un número de proyecto que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberá habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no incurrir en la facturación después de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa de prueba gratuita de USD 300.

Google Cloud Shell

Si bien Google Cloud y Compute Engine se pueden operar de forma remota desde su laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Esta máquina virtual basada en Debian está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Esto significa que todo lo que necesitarás para este Codelab es un navegador (sí, funciona en una Chromebook).

  1. Para activar Cloud Shell desde Cloud Console, solo haz clic en Activar Cloud Shellb125d9eb26a46cc5.png (el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).

1067942a9a93f70.png

Captura de pantalla del 14 de junio de 2017 a las 10.13.43 p.m. .png

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu PROJECT_ID:

gcloud auth list

Resultado del comando

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

Si, por algún motivo, el proyecto no está configurado, solo emite el siguiente comando:

gcloud config set project <PROJECT_ID>

Si no conoce su PROJECT_ID, Observa el ID que usaste en los pasos de configuración o búscalo en el panel de Cloud Console:

cc3895eeac80db2c.png

Cloud Shell también configura algunas variables de entorno de forma predeterminada, lo que puede resultar útil cuando ejecutas comandos futuros.

echo $GOOGLE_CLOUD_PROJECT

Resultado del comando

<PROJECT_ID>
  1. Establece la zona predeterminada y la configuración del proyecto.
gcloud config set compute/zone us-central1-f

Puedes elegir una variedad de zonas diferentes. Para obtener más información, consulta Regiones y zonas.

3. Cree una instancia de Compute Engine

Como se explicó anteriormente, usaremos la línea de comandos gcloud en este codelab. Todo lo que se hace aquí se puede lograr con la consola (disponible en console.cloud.google.com).

Primero, crearemos una instancia con la configuración predeterminada :

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Anote la EXTERNAL_IP, que es importante más adelante.

Se crea la instancia con los siguientes valores predeterminados :

  • La zona que elijas Todas las instancias se encuentran en una zona. Puedes seleccionar una zona en el momento de la creación de la instancia con la marca --zone o puedes establecer una zona predeterminada (como lo hicimos en la configuración inicial) y omitir la marca --zone.
  • La imagen más reciente de Debian GNU/Linux 9 (stretch) Si utilizas tu propia imagen personalizada, proporciona el nombre de la imagen aquí. Por ejemplo, --image my-own-image.
  • El tipo de máquina n1-standard-1 Puedes seleccionar otro tipo de máquina, como n1-highmem-4 o n1-highcpu-6. Si ninguno de los tipos predefinidos de máquinas coincide con tus necesidades, usa un tipo personalizado de máquina.
  • Un disco raíz persistente con el mismo nombre que la instancia; el disco se conecta automáticamente a la instancia

Ejecuta gcloud compute instances create --help para ver todas las opciones disponibles.

4. Habilitar firewall para el puerto 80

De forma predeterminada, Google Cloud Platform solo permite algunos accesos. Debido a que pronto instalaremos Nginx, primero habilitaremos el puerto 80 en la configuración del firewall.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Esta acción creará una regla de firewall llamada allow-80 que tiene una lista predeterminada de bloques de direcciones IP permitidos para establecer conexiones entrantes (--source-ranges) como 0.0.0.0/0 (Everywhere).

Ejecuta gcloud compute firewall-rules create --help para ver todos los valores predeterminados y todas las opciones disponibles, incluida la capacidad de aplicar una regla de firewall basada en etiquetas.

5. Establece una conexión SSH a la instancia

Para establecer una conexión SSH a la instancia desde la línea de comandos (todavía desde Cloud Shell), siga estos pasos:

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Eso es todo. es muy fácil. (En producción, asegúrate de ingresar una frase de contraseña :)

Como alternativa, también puede establecer una conexión SSH a la instancia directamente desde la consola ( console.cloud.google.com ), al navegar aCompute Engine Más deInstancias de VM y haga clic enSSH ,

bfbc03997a41946e.png

6. Instalar Nginx

Acceda a myinstance, la instancia recién creada, y luego instale nginx:

$ sudo su -
# apt update
# apt install -y nginx
# service nginx start
# exit

Prueba que el servidor se ejecute con curl desde myinstance:

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Encuentre sus IP externas mediante la IU web para encontrar la IP externa de su instancia:

dcc4e56e61ba2603.png

Asegúrese de salir de SSH y ejecute el siguiente comando desde Cloud Shell:

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Luego, navegue a http://EXTERNAL_IP/, donde EXTERNAL_IP es la IP pública de myinstance y debería poder ver la página de NGINX:

49b52b9354041f3b.png

7. Secuencia de comandos de inicio

En lugar de configurar la instancia cada vez, puedes usar una secuencia de comandos de inicio para inicializar la instancia cuando se inicia.

Crea un archivo llamado startup.sh con el siguiente contenido (puedes usar tu editor de texto favorito: vim, nano o emacs):

#! /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

Para crear una nueva instancia de VM con esta secuencia de comandos de inicio, escribe lo siguiente :

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Navega a http://EXTERNAL_IP/ y deberías ver la página principal actualizada. Si la página no se muestra de inmediato después de unos segundos, es posible que el host aún esté iniciando nginx.

8. Crea un clúster de servidores

Para crear un clúster de servidores, primero debe crear una plantilla de instancias. Una vez que se crea una plantilla de instancias, puedes crear un grupo de instancias para administrar la cantidad de instancias que se crearán.

Primero, cree una plantilla de instancias con la secuencia de comandos de inicio :

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

En segundo lugar, crearemos un grupo de destino. Este grupo permite tener un punto de acceso único para todas las instancias de un grupo y es necesario en el balanceo de cargas de los pasos posteriores.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Por último, cree un grupo de instancias con la plantilla:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Esto creará dos instancias de VM adicionales con nombres con el prefijo nginx-.

Ahora deberías poder ver todas las instancias creadas.

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Cree un balanceador de cargas de red

Existen varios tipos de balanceadores de cargas en Google Cloud Platform, incluidos los siguientes :

Creemos un balanceador de cargas de red regional orientado a nuestro grupo de instancias:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Luego, puedes visitar el balanceador de cargas desde el navegador http://IP_ADDRESS/, en el que IP_ADDRESS es la dirección que se muestra como resultado de la ejecución del comando anterior.

Por el momento, no crearemos un balanceador de cargas HTTP hoy.

10. Limpie el clúster

No olvide cerrar su clúster, de lo contrario se seguirán ejecutando y acumulando costos. Los siguientes comandos borrarán las instancias de Google Compute Engine, el grupo de instancias, el grupo de orientación y el balanceador de cargas.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Cada uno de los comandos anteriores debería solicitarte que confirmes la eliminación del recurso.

11. Próximos pasos

¡Felicitaciones! Completaste este codelab de Compute Engine.

Más funciones de Compute Engine

Google Compute Engine tiene un amplio conjunto de funciones. Quizás te interese conocer alguno de estos temas :

Google Kubernetes Engine

Google Kubernetes Engine (GKE) es la oferta de Kubernetes alojada y completamente administrada de Google Cloud. Hay varios codelabs disponibles para ayudarte a comenzar a usar GKE. Esta es una buena opción para comenzar :

Envíanos tus comentarios

  • Tómate un momento para completar nuestra breve encuesta