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.
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
- 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.
- 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.
- 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).
- Para activar Cloud Shell desde Cloud Console, solo haz clic en Activar Cloud Shell (el aprovisionamiento y la conexión al entorno debería llevar solo unos minutos).
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:
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>
- 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, comon1-highmem-4
on1-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 ,
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:
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:
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 :
- VM interrumpibles: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nodos de usuario único: https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU y TPU: https://cloud.google.com/compute/docs/gpus/add-gpus
- Instancias de Windows: https://cloud.google.com/compute/docs/instances/windows/building-managing-windows-instances
- Etiquetar recursos: https://cloud.google.com/compute/docs/labeling-resources
- Migrar VM a Compute Engine: https://cloud.google.com/compute/docs/vm-migration/
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 :
- Codelab de Google Kubernetes Engine: https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Envíanos tus comentarios
- Tómate un momento para completar nuestra breve encuesta