Ejecuta otras tareas con tus instancias

Estas son otras tareas que quizás desees realizar con las instancias.

Antes de comenzar

Copia archivos entre una instancia y una computadora local

Usa gcloud compute scp para transferir archivos entre una instancia de Linux y una computadora local:

gcloud compute scp my-instance:~/file-1 \
    my-instance:~/file-2 \
    ~/local-dir

Para copiar archivos de tu máquina local a la instancia, usa el comando siguiente:

gcloud compute scp ~/local-dir/file-1 \
    my-instance:~/remote-destination

Detecta si ejecutas en Compute Engine

Es común que los sistemas quieran detectar si se ejecutan dentro de un entorno de nube específico. Usa las instrucciones siguientes para detectar si ejecutas en Compute Engine.

Usa el servidor de metadatos

Puedes detectar con facilidad si las aplicaciones o secuencias de comandos se ejecutan dentro de una instancia de Compute Engine mediante el servidor de metadatos. Cuando realizas una solicitud al servidor, cualquier respuesta del servidor de metadatos contendrá el encabezado Metadata-Flavor: Google. Puedes buscar este encabezado para detectar de manera confiable si ejecutas en Compute Engine.

Por ejemplo, la siguiente solicitud curl muestra un encabezado Metadata-Flavor: Google, lo que indica que la solicitud se realiza desde una instancia de Compute Engine.


me@my-inst:~$ curl metadata.google.internal -i


HTTP/1.1 200 OK
Metadata-Flavor: Google
Content-Type: application/text
Date: Thu, 10 Apr 2014 19:24:27 GMT
Server: Metadata Server for VM
Content-Length: 22
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

0.1/

computeMetadata/

Usa otros métodos

Linux

Para instancias de Linux, se puede usar la herramienta dmidecode a fin de acceder a la información DMI/SMBIOS directo en /proc/mem. Ejecuta el comando siguiente. La herramienta dmidecode debe imprimir “Google Compute Engine” para indicar que ejecutas en Google Compute Engine:

my@myinst:~$ sudo dmidecode -s system-product-name | grep "Google Compute Engine"
Google Compute Engine

Windows

En instancias de Windows, aparece “Google” como fabricante y modelo del sistema. Puedes usar utilidades como msinfo32.exe para buscar esta información. Por ejemplo, msinfo32 muestra la información siguiente:

Pantalla msinfo32 que muestra Google como fabricante y modelo (haz clic para ampliar)
Pantalla de msinfo32 que muestra Google como fabricante y modelo (haz clic para ampliar)

Si necesitas determinar de manera programática esta información en una instancia de Windows, puedes crear una aplicación de Instrumental de administración de Windows (WMI) con algunas modificaciones.

Cómo manejar fallas de instancia

Por desgracia, las instancias individuales experimentarán fallas de vez en cuando. Esto puede suceder por varias razones, incluidas interrupciones inesperadas, errores de hardware o cualquier otra falla del sistema. A modo de mitigar estas situaciones, debes usar discos persistentes y hacer una copia de seguridad de tus datos de forma rutinaria.

Si una instancia falla, se reiniciará de manera automática con los mismos disco persistente raíz, metadatos y configuración de instancia que cuando falló. Para controlar el comportamiento de reinicio automático de una instancia, consulta Cómo configurar las opciones de programación.

En general, debes diseñar el sistema de modo que sea lo suficientemente sólido a fin de que la falla de una sola instancia no sea catastrófica para la aplicación. Para obtener más información, consulta Diseña sistemas sólidos.

Identifica una instancia a través de UUID

Cada máquina virtual tiene un identificador único (UUID) a nivel universal al que se puede acceder a través de la herramienta dmidecode para imágenes de Linux. Se calcula un UUID a partir del ID del proyecto, la zona y el nombre de la instancia de la máquina virtual. El UUID de una instancia es único entre las máquinas virtuales de Compute Engine y estable durante el ciclo de vida de la instancia. Los UUID persistirán durante el reinicio de la máquina virtual y, si la máquina virtual se borra y se recrea en el mismo proyecto y zona con el mismo nombre de instancia, el UUID también será el mismo.

Para encontrar el UUID de una instancia en una instancia de Linux, ejecuta el comando siguiente desde la máquina virtual:

me@myinst:~$ sudo dmidecode -t system | grep UUID

La herramienta debe imprimir una respuesta similar a la que se muestra a continuación:

  UUID: FE0C672D-324F-25F1-052C-6C50FA8B7397

Instala paquetes y configura una instancia

El creador de la instancia tiene privilegios de administrador en cualquier instancia que agregue a un proyecto y se encuentra en la lista SUDO de forma automática.

Cuando inicies sesión en una instancia como administrador, puedes instalar paquetes y configurar la instancia de la misma manera que lo harías con una máquina de Linux común. Por ejemplo, puedes instalar Apache, como se muestra aquí:


user@myinst:~$ sudo apt-get update && sudo apt-get install apache2
Reading package lists... Done

Building dependency tree
Reading state information... Done
The following extra packages will be installed:

[...]

Puedes mover archivos entre tu computadora local y la instancia con gcloud compute scp, como se describe en Copia archivos entre una instancia y una computadora local.

Ten en cuenta que tu máquina necesita acceso a Internet para poder ejecutar apt-get. Esto significa que necesita una dirección IP externa o acceso a un proxy de Internet.

Compute Engine cambia un atributo especial en el servidor de metadatos de una máquina virtual poco antes de cualquier intento de migrar en vivo o terminar y reiniciar la máquina virtual como parte de un evento de mantenimiento de infraestructura pendiente. El atributo maintenance-event se actualizará antes de un evento y después de él, lo que te permite detectar cuándo estos eventos son inminentes. Puedes usar esta información para ayudar a automatizar cualquier secuencia de comandos o comandos que desees ejecutar antes de un evento de mantenimiento o después de él.

Para obtener más información, consulta la sección Aviso de mantenimiento transparente en la página de documentación del Servidor de metadatos.

Crea una lista de todas las instancias

Puedes ver una lista de todas las instancias en un proyecto si llamas a instances list:

gcloud compute instances list
NAME               ZONE          MACHINE_TYPE  INTERNAL_IP    EXTERNAL_IP     STATUS
example-instance   us-central1-a n1-standard-1 10.105.155.92  173.255.114.53  RUNNING
example-instance-2 us-central1-a n1-standard-1 10.181.215.203 146.148.32.59   RUNNING

Por la configuración predeterminada, gcloud compute proporciona una lista agregada de todos los recursos en todas las zonas disponibles. Si deseas obtener una lista de recursos de una sola zona, proporciona la marca --zones en la solicitud.

En la API, debes realizar solicitudes a dos métodos diferentes para obtener una lista de recursos agregados o una lista de recursos dentro de una zona. Para realizar una solicitud a fin de obtener una lista agregada, haz una solicitud GET al URI de aggregatedList de ese recurso y reemplaza el proyecto con el ID del proyecto:

https://www.googleapis.com/compute/v1/projects/myproject/aggregated/instances

En las bibliotecas cliente, realiza una solicitud a la función instances().aggregatedList:

def listAllInstances(auth_http, gce_service):
  request = gce_service.instances().aggregatedList(project=PROJECT_ID)
  response = request.execute(auth_http)

  print response

Para solicitar una lista de instancias dentro de una zona, realiza una solicitud GET al URI siguiente y reemplaza el proyecto con el ID del proyecto y la zona con la zona de las instancias:

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances

En las bibliotecas cliente de la API, haz una solicitud instances().list:

def listInstances(auth_http, gce_service):
  request = gce_service.instances().list(project="myproject",
    zone="us-central1-f")
  response = request.execute(auth_http)

  print response

Reduce los costos con instancias interrumpibles

Google Compute Engine ofrece instancias interrumpibles que puedes crear y ejecutar a un precio mucho más bajo que las instancias normales. Si las aplicaciones son tolerantes a errores y pueden soportar la inestabilidad de la instancia, las instancias interrumpibles pueden reducir los costos de Compute Engine de manera significativa. Consulta la documentación de las Instancias interrumpibles para obtener más información.

Configura el protocolo NTP para instancias

Muchos sistemas de software que dependen de una secuencia de eventos cuidadosa usan un reloj de sistema estable y coherente. Los registros del sistema que escriben la mayoría de los servicios incluyen una marca de tiempo, que ayuda a depurar problemas que ocurren entre varios componentes del sistema. A fin de ayudar a mantener sincronizados los relojes del sistema, las instancias de Compute Engine están preconfiguradas para usar el protocolo NTP.

Además de mantener sincronizada la hora del servidor, NTP es útil en el caso poco frecuente de un segundo bisiesto. Un segundo bisiesto es un ajuste de un segundo que se realiza al horario UTC para justificar los cambios en la rotación de la Tierra. Los segundos bisiestos no ocurren a intervalos de rutina, ya que la velocidad de rotación de la Tierra varía de manera irregular debido a eventos climáticos y geológicos. Los segundos bisiestos anteriores causaron estragos en una variedad de servicios y aplicaciones en la Web. Los servidores NTP ayudan a garantizar que todos los servidores informen la misma hora durante un segundo bisiesto.

En esta sección, se describe cómo configurar los servidores NTP de las máquinas virtuales para que se comporten de forma correcta en el caso de un segundo bisiesto.

Servidores NTP de Google y extensión de bisiestos

Los segundos bisiestos en tiempo Unix se implementan, por lo común, con la repetición del último segundo del día. Esto puede causar problemas con el software que solo espera que las marcas de tiempo aumenten. Para solucionar este problema, los servidores de tiempo en Google “extienden” el segundo adicional durante veinte horas, diez antes y diez después del evento, para que las computadoras no vean el segundo adicional como una marca de tiempo repetida. Esto reduce el riesgo en sistemas que dependen de una marca de tiempo coherente. Se recomienda que todas las instancias de máquina virtual de Compute Engine estén configuradas para usar los servicios NTP internos de Google.

Configura NTP para las instancias

Google no puede predecir cómo los servicios NTP externos, como pool.ntp.org, manejarán el segundo bisiesto. Si es posible, se recomienda que no uses fuentes NTP externas con máquinas virtuales de Compute Engine. Peor aún, el uso del servicio NTP de Google y un servicio externo puede generar cambios impredecibles en la hora del sistema. Es preferible usar una sola fuente externa de NTP que una mezcla, pero los servicios NTP externos, como pool.ntp.org, probablemente usarán pasos para manejar el segundo bisiesto. Como resultado, las máquinas virtuales pueden ver una marca de tiempo repetida.

El método más seguro es configurar las máquinas virtuales de Compute Engine para que usen un único servidor NTP: el servidor NTP interno que proporciona Google. No mezcles servidores NTP externos y servidores NTP de Google, ya que esto podría provocar un comportamiento inesperado.

Para asegurarte de que las máquinas virtuales estén configuradas de manera correcta, sigue estas instrucciones.

Linux

  1. Usa ssh para conectarte a la instancia.

    Console

    1. Dirígete a la página Instancias de VM en GCP Console.
    2. Haz clic en el botón ssh junto a la instancia que deseas configurar.

      Captura de pantalla del botón SSH

    gcloud

    Con la herramienta de línea de comandos de gcloud, ejecuta el comando siguiente:

    gcloud compute instances ssh INSTANCE
    

  2. En la instancia, ejecuta ntpq -p para verificar el estado actual de la configuración NTP:

    $ ntpq -p
    
    
         remote           refid      st t when poll reach   delay   offset  jitter
    
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    *217.162.232.173 130.149.17.8     2 u  191 1024  176   79.245    3.589  27.454
    

    Si ves un solo registro que apunta a metadata.google o metadata.google.internal, no necesitas hacer ningún cambio. Si ves varias fuentes mezcladas entre metadata.google y una fuente pública como pool.ntp.org, debes actualizar las fuentes para quitar cualquier servidor NTP externo.

    Para este ejemplo, hay dos registros, uno que apunta a metadata.google y otro que apunta a una dirección externa. Dado que existen varias fuentes, deberás actualizar los servidores NTP para quitar la dirección *217.162.232.173.

    1. Configura los servidores NTP para quitar fuentes externas.

      Para configurar los servidores NTP, edita el archivo /etc/ntp.conf en tu editor de texto favorito. Busca la sección servers de la configuración y quita todas las fuentes NTP que no sean de Google:

    $ vim /etc/ntp.conf
    
    ...
    # You do need to talk to an NTP server or two (or three).
    #server ntp.your-provider.example
    ...
    server metadata.google.internal iburst
    

    Después de editar el archivo /etc/ntp.conf, reinicia el servicio NTP. El comando de reinicio puede variar según la distribución de Linux:

    $ sudo service ntp reload
    1. Verifica la configuración. Vuelve a ejecutar el comando ntpq -p para verificar los cambios:
    $ ntpq -p
    
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    

Windows

  1. Dirígete a la página Instancias de VM en GCP Console.
  2. Haz clic en el botón RDP junto a la instancia de Windows en la que deseas iniciar sesión.

    Captura de pantalla del botón SSH

  3. Una vez que accediste, haz clic derecho en el ícono de PowerShell y selecciona Ejecutar como administrador (Run as administrator).

    Captura de pantalla del ícono de PowerShell

  4. Cuando se cargue el símbolo del sistema, ejecuta el comando siguiente para ver la configuración actual de NTP:

    PS C:\Windows\system32>w32tm /query /configuration
    [Configuration]
    ...
    Type: NTP (Local)
    NtpServer: metadata.google.internal,
    ...
    

    Si ves un solo registro que apunta a metadata.google o metadata.google.internal, no necesitas hacer ningún cambio. Si ves varias fuentes mezcladas entre metadata.google y una fuente pública, debes quitar el servidor externo. Sigue la guía de Windows para configurar el servidor NTP.

La función extensión de bisiesto de los servidores NTP de Google es un método conveniente para administrar el riesgo en la reproducción de un segundo en sistemas sensibles al tiempo. Otros servicios NTP pueden proporcionar una solución aceptable para la mayoría de los sistemas de software. Es importante no mezclar los servicios NTP de extensión de bisiestos de Google con los servicios NTP públicos de pasos.

Para sincronizar dispositivos fuera de la nube de Google con el tiempo extendido, usa Google Public NTP. Usa la misma extensión proporcionada a las instancias de máquina virtual de Compute Engine.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine