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 como se muestra a continuación 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 la máquina local a la instancia, usa el siguiente comando:

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 siguientes instrucciones 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

En las instancias de Linux, se puede usar la herramienta dmidecode para acceder a la información DMI/SMBIOS directamente en /proc/mem. Si ejecutas el siguiente comando, la herramienta dmidecode debe mostrar “Google Compute Engine” para indicar que ejecutas en Compute Engine:

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

Windows

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

Pantalla de msinfo32 en la que se muestra a Google como fabricante y modelo (haz clic para ampliar)
Pantalla de msinfo32 en la que se muestra a 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.

Controla las fallas de una instancia

Por desgracia, las instancias individuales experimentan fallas de vez en cuando. Esto puede suceder por varias razones, dentro de las que se incluyen 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 los datos de forma rutinaria.

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

En general, debes diseñar el sistema de modo que tenga la solidez suficiente 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 mediante el UUID

Cada máquina virtual tiene un identificador único universal (UUID) al que se puede acceder mediante la herramienta dmidecode para imágenes de Linux. Un UUID se calcula 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 no cambia durante la vida útil de la instancia. El UUID persistirá sin importar cuántas veces se reinicie la máquina virtual y, si la máquina virtual se borra y se vuelve a crear 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 siguiente comando 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 accedes a una instancia como administrador, puedes instalar paquetes y configurar la instancia de la misma manera que lo harías con una máquina 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 mediante gcloud compute scp como se describe en Copia archivos entre una instancia y una computadora local.

Ten en cuenta que la 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 que se intente migrar en vivo o detener y reiniciar la máquina virtual como parte de un evento de mantenimiento de infraestructura pendiente. El atributo maintenance-event se actualizará antes y después de un evento, lo que te permite detectar cuándo estos eventos son inminentes. Puedes usar esta información a fin de automatizar cualquier comando o secuencia de 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.

Obtén una lista de todas las instancias

Puedes ver una lista de todas las instancias en un proyecto si realizas una llamada 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

De forma predeterminada, gcloud compute proporciona una lista completa de todos los recursos en todas las zonas disponibles. Si deseas obtener una lista de los 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 todos los recursos o una lista de los recursos dentro de una zona. Si deseas realizar una solicitud a fin de obtener una lista completa, haz una solicitud GET al URI de aggregatedList de ese recurso y reemplaza el proyecto por tu propio ID del proyecto:

https://compute.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 las instancias dentro de una zona, realiza una solicitud GET al siguiente URI y reemplaza el proyecto por tu ID del proyecto y la zona por la zona de las instancias:

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

En las bibliotecas cliente de la API, realiza una solicitud instances().list como se muestra a continuación:

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

Compute Engine ofrece instancias interrumpibles que puedes crear y ejecutar a un precio mucho más bajo que el de las instancias normales. Si las aplicaciones son tolerantes a errores y pueden soportar la inestabilidad de estas instancias, 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 en las instancias

Muchos sistemas de software que dependen de la organización precisa de los eventos en secuencias 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 los problemas que ocurren entre distintos componentes del sistema. A fin de ayudar a mantener sincronizados los relojes del sistema, las instancias de Compute Engine se configuran con anterioridad para usar el protocolo NTP.

Además de mantener sincronizada la hora del servidor, el NTP es útil en el caso poco frecuente de un segundo bisiesto. Un segundo bisiesto es una modificación de un segundo que se realiza en el horario UTC para adecuarlo a los cambios en la rotación de la Tierra. Los segundos bisiestos no ocurren a intervalos rutinarios, 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 distintos de servicios y aplicaciones en la Web. Los servidores NTP ayudan a garantizar que todos los servidores informen la misma hora durante el evento de un segundo bisiesto.

En esta sección, se describe cómo configurar los servidores NTP en las máquinas virtuales para que funcionen de forma adecuada ante la incorporación de un segundo bisiesto.

Servidores NTP de Google y repartición de bisiesto

Los segundos bisiestos en la hora de Unix se implementan, por lo general, mediante la repetición del último segundo del día. Esto puede causar problemas en los softwares que solo esperan que las marcas de tiempo aumenten. Para solucionar este problema, los servidores de tiempo de Google “reparten” el segundo adicional entre 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 los 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 el protocolo NTP en las instancias

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

El método más seguro es configurar las máquinas virtuales de Compute Engine para que usen un solo servidor NTP: el servidor NTP interno que proporciona Google. No combines servidores NTP externos con 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. Ve a la página Instancias de VM en Cloud 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 siguiente comando:

    gcloud compute instances ssh INSTANCE
        

  2. En la instancia, ejecuta ntpq -p para verificar el estado actual de la configuración de 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 es necesario que realices ningún cambio. Si ves varias fuentes entre las que se incluyen metadata.google y una fuente pública como pool.ntp.org, debes actualizar las fuentes y 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. En el caso de que existan 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, debes editar el archivo /etc/ntp.conf en el editor de texto que prefieras. Busca la sección servers de la configuración y quita todas las fuentes de 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. Ejecuta el comando ntpq -p otra vez 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. Ve a la página Instancias de VM en Cloud Console.
  2. Haz clic en el botón RDP que se encuentra junto a la instancia de Windows a la que deseas acceder.

    Captura de pantalla del botón SSH

  3. Después de acceder, haz clic derecho en el ícono de PowerShell y selecciona Ejecutar como administrador.

    Captura de pantalla del ícono de PowerShell

  4. Cuando se cargue el símbolo del sistema, ejecuta el siguiente comando 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 es necesario que realices ningún cambio. Si ves varias fuentes entre las que se incluyen 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 de repartición de bisiesto de los servidores NTP de Google es un método útil para controlar el riesgo que implica la reproducción de un segundo en sistemas que dependen del tiempo. Otros servicios NTP pueden proporcionar un trabajo aceptable para la mayoría de los sistemas de software. Es importante no mezclar los servicios NTP de repartición de bisiesto de Google con los servicios NTP públicos de pasos.

Si deseas sincronizar dispositivos fuera de Google Cloud con la repartición de bisiesto, usa Google Public NTP. Usa la misma repartición para las instancias de máquina virtual de Compute Engine.