Instalar el entorno de invitados


Esta página describe cómo instalar manualmente el entorno invitado para instancias de máquinas virtuales (VM) que ejecutan imágenes personalizadas en Compute Engine.

En la mayoría de los casos, si utiliza máquinas virtuales creadas con imágenes públicas proporcionadas por Google, no necesita instalar un entorno invitado. Para obtener información sobre cuándo utilizar el entorno invitado, consulte Cuándo instalar o actualizar manualmente el entorno invitado .

Antes de instalar manualmente el entorno invitado, utilice el procedimiento Validar el entorno invitado para comprobar si el entorno invitado se está ejecutando en su máquina virtual. Si el entorno de invitado está disponible en su máquina virtual pero está desactualizado, actualice el entorno de invitado .

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Métodos de instalación

Hay varias formas de instalar el entorno de invitados. Elija una de las siguientes opciones:

  • Herramienta de importación . Esta es la opción recomendada. Sin embargo, tenga en cuenta que la herramienta de importación no solo instala el entorno invitado, sino que también realiza otras actualizaciones de configuración en la imagen, como configurar redes, configurar el gestor de arranque e instalar Google Cloud CLI. Para obtener instrucciones sobre cómo utilizar la herramienta de importación, consulte Cómo crear una imagen de arranque .

    La herramienta de importación admite una amplia variedad de sistemas operativos y versiones. Para obtener más información, consulte los detalles del sistema operativo .

  • Instalación manual . Elija uno de los siguientes:

Sistemas operativos compatibles

Puede instalar manualmente el entorno invitado en máquinas virtuales que usan versiones de imagen del sistema operativo que se encuentran en la etapa del ciclo de vida de disponibilidad general (GA) o del ciclo de vida de soporte extendido . Para revisar una lista de versiones de imágenes del sistema operativo y su etapa del ciclo de vida en Compute Engine, consulta Detalles del sistema operativo .

Limitaciones

No puede instalar ni utilizar manualmente la herramienta de importación para instalar entornos invitados para Fedora CoreOS y sistemas operativos optimizados para contenedores. Si necesita uno de estos sistemas operativos, le recomendamos que utilice imágenes públicas , porque se incluye un entorno invitado como parte central de todas las imágenes públicas.

Instalación del entorno de invitados

Instalar el entorno de invitados en el lugar

Utilice este método para instalar el entorno invitado si puede conectarse a la instancia de destino mediante SSH. Si no puede conectarse a la instancia para instalar el entorno invitado, puede instalarlo clonando su disco de inicio y usando un script de inicio .

Este procedimiento es útil para imágenes importadas si puede conectarse mediante autenticación basada en contraseña SSH. También podría usarse para reinstalar el entorno invitado si tiene al menos una cuenta de usuario con SSH basado en clave funcional.

CentOS/RHEL/Rocky

  1. Asegúrese de que la versión de su sistema operativo sea compatible .
  2. Determine la versión de CentOS/RHEL/Rocky Linux y cree el archivo de repositorio fuente, /etc/yum.repos.d/google-cloud.repo :

    eval $(grep VERSION_ID /etc/os-release)
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-compute-engine]
    name=Google Compute Engine
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  3. Actualizar listas de paquetes:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Instale los paquetes del entorno invitado:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie la instancia e inspeccione el registro de su consola para asegurarse de que el entorno invitado se cargue cuando se inicie la copia de seguridad.

  6. Verifique que pueda conectarse a la instancia mediante SSH .

Debian

  1. Asegúrese de que la versión de su sistema operativo sea compatible .
  2. Instale la clave GPG del repositorio público:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Determine el nombre de la distribución Debian y cree el archivo de lista de fuentes, /etc/apt/sources.list.d/google-cloud.list :

    eval $(grep VERSION_CODENAME /etc/os-release)
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
    EOM
    
  4. Actualizar listas de paquetes:

    sudo apt update
  5. Instale los paquetes del entorno invitado:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Reinicie la instancia e inspeccione el registro de su consola para asegurarse de que el entorno invitado se cargue cuando se inicie la copia de seguridad.

  7. Verifique que pueda conectarse a la instancia mediante SSH .

ubuntu

  1. Asegúrese de que la versión de su sistema operativo sea compatible .

  2. Habilite el repositorio Universe . Canonical publica paquetes para su entorno invitado en el repositorio Universe.

    sudo apt-add-repository universe
  3. Actualizar listas de paquetes:

    sudo apt update
  4. Instale los paquetes del entorno invitado:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Reinicie la instancia e inspeccione el registro de su consola para asegurarse de que el entorno invitado se cargue cuando se inicie la copia de seguridad.

  6. Verifique que pueda conectarse a la instancia mediante SSH .

LES

  1. Asegúrese de que la versión de su sistema operativo sea compatible .

  2. Activar el Módulo de Nube Pública .

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Actualizar listas de paquetes:

    sudo zypper refresh
  4. Instale los paquetes del entorno invitado:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Reinicie la instancia e inspeccione el registro de su consola para asegurarse de que el entorno invitado se cargue cuando se inicie la copia de seguridad.

  6. Verifique que pueda conectarse a la instancia mediante SSH .

ventanas

Antes de comenzar, asegúrese de que la versión de su sistema operativo sea compatible .

Para instalar el entorno invitado de Windows , ejecute los siguientes comandos en un indicador elevado de PowerShell versión 3.0 o superior. El comando Invoke-WebRequest en las instrucciones siguientes requiere una versión de PowerShell superior a 3.0.

  1. Descarga e instala GooGet .

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.18.3/googet.exe -OutFile $env:temp\googet.exe;
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources `
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet;
    Remove-Item "$env:temp\googet.exe"
    

    Durante la instalación, GooGet agrega contenido al entorno del sistema. Una vez completada la instalación, inicie una nueva consola PowerShell o proporcione la ruta completa al archivo googet.exe (C:\ProgramData\GooGet\googet.exe).

  2. Abra una nueva consola y agregue el repositorio google-compute-engine-stable .

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Instale los paquetes principales del entorno invitado de Windows.

    googet -noconfirm install google-compute-engine-windows `
    google-compute-engine-sysprep google-compute-engine-metadata-scripts `
    google-compute-engine-vss google-osconfig-agent
    
  4. Instale el paquete de entorno invitado de Windows opcional.

    googet -noconfirm install google-compute-engine-auto-updater

    Usando el comando googet .

    Para ver los paquetes disponibles, ejecute el comando googet available .

    Para ver los paquetes instalados, ejecute el comando googet installed .

    Para actualizar a la última versión del paquete, ejecute el comando googet update .

    Para ver comandos adicionales, ejecute googet help .

Clonar el disco de arranque y usar el script de inicio

Si no puede conectarse a una instancia para instalar manualmente el entorno invitado, instale el entorno invitado mediante este procedimiento, que incluye los siguientes pasos que se pueden completar en el Google Cloud consola o Cloud Shell.

Este método muestra el procedimiento solo para distribuciones de Linux. Para Windows, utilice uno de los otros dos métodos de instalación .

Utilice Cloud Shell para ejecutar este procedimiento. Si no utiliza Cloud Shell, instale el procesador JSON de línea de comandos jq . Puedes usar este procesador para filtrar la salida de la CLI de gcloud. Cloud Shell tiene jq preinstalado.

CentOS/RHEL/Rocky

  1. Asegúrese de que la versión de su sistema operativo sea compatible .

  2. Cree una nueva instancia para que sirva como instancia de rescate. Nombra esta instancia como rescate . No es necesario que esta instancia de rescate ejecute el mismo sistema operativo Linux que la instancia problemática. Este ejemplo utiliza Debian 9 en la instancia de rescate.

  3. Detenga la instancia problemática y cree una copia de su disco de arranque.

    1. Establezca un nombre de variable para la instancia problemática. Esto hace que sea más fácil hacer referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplace VM_NAME con el nombre de la instancia problemática.

    2. Detenga la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenga el nombre del disco de arranque para la instancia del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Cree una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Cree un nuevo disco a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Eliminar la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Adjunte el nuevo disco a la instancia de rescate y monte el volumen raíz para la instancia de rescate. Debido a que este procedimiento solo adjunta un disco adicional, el identificador de dispositivo del nuevo disco es /dev/sdb . CentOS/RHEL/Rocky Linux utiliza el primer volumen de un disco como volumen raíz de forma predeterminada, por lo que el identificador de volumen debe ser /dev/sdb1 . Para casos personalizados, utilice lsblk para determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctese a la instancia de rescate usando SSH :

    gcloud compute ssh rescue
  6. Ejecute los siguientes pasos en la instancia de rescate.

    1. Monte el volumen raíz del nuevo disco.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Cree el script rc.local .

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for CentOS/RHEL/Rocky Linux =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL/Rocky Linux version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL/Rocky Linux."
        exit 1
      fi
      echo "Updating repo file..."
      tee "/etc/yum.repos.d/google-cloud.repo" << EOM
      [google-compute-engine]
      name=Google Compute Engine
      baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
      enabled=1
      gpgcheck=1
      repo_gpgcheck=0
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Running yum install google-compute-engine..."
      yum install -y google-compute-engine
      rpm -q google-compute-engine
      if [[ $? -ne 0 ]]; then
        echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
        echo "Restoring a previous rc.local script."
        mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Mueva el script rc.local al volumen raíz del nuevo disco y establezca los permisos. Deje a un lado cualquier script rc.local existente. El script temporal lo reemplazará cuando finalice.

      if [ -f "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" ]; then
        sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" \
        "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      
    4. Desmonte el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Salga de la sesión SSH a la instancia de rescate.

  7. Separe el nuevo disco de la instancia de rescate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Cree una instancia para que sirva como reemplazo. Cuando cree la instancia de reemplazo, especifique el nuevo disco como disco de arranque. Puede crear la instancia de reemplazo usando el Google Cloud Consola:

    1. En la consola de Google Cloud, vaya a la página de instancias de VM .

      Ir a instancias de VM

    2. Haga clic en la instancia problemática y luego haga clic en Crear similar .

    3. Especifique un nombre para la instancia de reemplazo. En la sección Disco de arranque , haga clic en Cambiar y luego haga clic en Discos existentes . Seleccione el nuevo disco.

    4. Haga clic en Crear . La instancia de reemplazo se inicia automáticamente después de su creación.

    A medida que se inicia la instancia de reemplazo, el script temporal rc.local se ejecuta e instala el entorno invitado. Para observar el progreso de este script, inspeccione los registros de la consola en busca de líneas emitidas por el script temporal rc.local . Para ver registros, ejecute el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplace REPLACEMENT_VM_NAME con el nombre que asignó a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia automáticamente cuando finaliza el script temporal rc.local . Durante el segundo reinicio, puede inspeccionar el registro de la consola para asegurarse de que se cargue el entorno invitado.

  9. Verifique que pueda conectarse a la instancia mediante SSH .

    Cuando esté satisfecho de que la instancia de reemplazo funciona, puede detener o eliminar la instancia problemática.

Debian

  1. Asegúrese de que la versión de su sistema operativo sea compatible

  2. Cree una nueva instancia para que sirva como instancia de rescate. Nombra esta instancia como rescate . No es necesario que esta instancia de rescate ejecute el mismo sistema operativo Linux que la instancia problemática. Este ejemplo utiliza Debian 9 en la instancia de rescate.

  3. Detenga la instancia problemática y cree una copia de su disco de arranque.

    1. Establezca un nombre de variable para la instancia problemática. Esto hace que sea más fácil hacer referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplace VM_NAME con el nombre de la instancia problemática.

    2. Detenga la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenga el nombre del disco de arranque para la instancia del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Cree una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Cree un nuevo disco a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Eliminar la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Adjunte el nuevo disco a la instancia de rescate y monte el volumen raíz para la instancia de rescate. Debido a que este procedimiento solo adjunta un disco adicional, el identificador de dispositivo del nuevo disco es /dev/sdb . Debian utiliza el primer volumen de un disco como volumen raíz de forma predeterminada, por lo que el identificador del volumen debe ser /dev/sdb1 . Para casos personalizados, utilice lsblk para determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctese a la instancia de rescate usando SSH :

    gcloud compute ssh rescue
  6. Ejecute los siguientes pasos en la instancia de rescate.

    1. Monte el volumen raíz del nuevo disco.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Cree el script rc.local .

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for Debian =="
      export DEBIAN_FRONTEND=noninteractive
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      eval $(grep VERSION_CODENAME /etc/os-release)
      if [[ -z $VERSION_CODENAME ]]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for Google cloud repo."
      curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating repo file..."
      tee "/etc/apt/sources.list.d/google-cloud.list" << EOM
      deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
      deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
      EOM
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      for pkg in google-cloud-packages-archive-keyring google-compute-engine; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [[ $? -ne 0 ]]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Mueva el script rc.local al volumen raíz del nuevo disco y establezca los permisos. Deje a un lado cualquier script rc.local existente. El script temporal lo reemplazará cuando finalice.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Desmonte el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Salga de la sesión SSH a la instancia de rescate.

  7. Separe el nuevo disco de la instancia de rescate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Cree una nueva instancia para que sirva como reemplazo. Cuando cree la instancia de reemplazo, especifique el nuevo disco como disco de arranque. Puede crear la instancia de reemplazo usando el Google Cloud Consola:

    1. En la consola de Google Cloud, vaya a la página de instancias de VM .

      Ir a instancias de VM

    2. Haga clic en la instancia problemática y luego haga clic en Crear similar .

    3. Especifique un nombre para la instancia de reemplazo. En la sección Disco de arranque , haga clic en Cambiar y luego haga clic en Discos existentes . Seleccione el nuevo disco.

    4. Haga clic en Crear . La instancia de reemplazo se inicia automáticamente después de su creación.

    A medida que se inicia la instancia de reemplazo, el script temporal rc.local se ejecuta e instala el entorno invitado. Para observar el progreso de este script, inspeccione los registros de la consola en busca de líneas emitidas por el script temporal rc.local . Para ver registros, ejecute el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplace REPLACEMENT_VM_NAME con el nombre que asignó a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia automáticamente cuando finaliza el script temporal rc.local . Durante el segundo reinicio, puede inspeccionar el registro de la consola para asegurarse de que se cargue el entorno invitado.

  9. Verifique que pueda conectarse a la instancia mediante SSH .

    Cuando esté satisfecho de que la instancia de reemplazo funciona, puede detener o eliminar la instancia problemática.

ubuntu

  1. Asegúrese de que la versión de su sistema operativo sea compatible

  2. Cree una nueva instancia para que sirva como instancia de rescate. Nombra esta instancia como rescate . No es necesario que esta instancia de rescate ejecute el mismo sistema operativo Linux que la instancia problemática. Este ejemplo utiliza Debian 9 en la instancia de rescate.

  3. Detenga la instancia problemática y cree una copia de su disco de arranque.

    1. Establezca un nombre de variable para la instancia problemática. Esto hace que sea más fácil hacer referencia a la instancia en pasos posteriores.

      export PROB_INSTANCE_NAME=VM_NAME

      Reemplace VM_NAME con el nombre de la instancia problemática.

    2. Detenga la instancia problemática.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Obtenga el nombre del disco de arranque para la instancia del problema.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Cree una instantánea del disco de arranque.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Cree un nuevo disco a partir de la instantánea.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Eliminar la instantánea:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Adjunte el nuevo disco a la instancia de rescate y monte el volumen raíz para la instancia de rescate. Debido a que este procedimiento solo adjunta un disco adicional, el identificador de dispositivo del nuevo disco es /dev/sdb . Ubuntu etiqueta su volumen raíz 1 de forma predeterminada, por lo que el identificador de volumen debe ser /dev/sdb1 . Para casos personalizados, utilice lsblk para determinar el identificador de volumen.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Conéctese a la instancia de rescate usando SSH :

    gcloud compute ssh rescue
  6. Ejecute los siguientes pasos en la instancia de rescate.

    1. Monte el volumen raíz del nuevo disco.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Cree el script rc.local .

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      echo "Running apt install google-compute-engine..."
      apt install -y google-compute-engine
      if [[ $? -ne 0 ]]; then
       echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Mueva el script rc.local al volumen raíz del nuevo disco y establezca los permisos. Deje a un lado cualquier script rc.local existente. El script temporal lo reemplazará cuando finalice.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Desmonte el volumen raíz del nuevo disco.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Salga de la sesión SSH a la instancia de rescate.

  7. Separe el nuevo disco de la instancia de rescate.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Cree una nueva instancia para que sirva como reemplazo. Cuando cree la instancia de reemplazo, especifique el nuevo disco como disco de arranque. Puede crear la instancia de reemplazo usando el Google Cloud Consola:

    1. En la consola de Google Cloud, vaya a la página de instancias de VM .

      Ir a instancias de VM

    2. Haga clic en la instancia problemática y luego haga clic en Crear similar .

    3. Especifique un nombre para la instancia de reemplazo. En la sección Disco de arranque , haga clic en Cambiar y luego haga clic en Discos existentes . Seleccione el nuevo disco.

    4. Haga clic en Crear . La instancia de reemplazo se inicia automáticamente después de su creación.

    A medida que se inicia la instancia de reemplazo, el script temporal rc.local se ejecuta e instala el entorno invitado. Para observar el progreso de este script, inspeccione los registros de la consola en busca de líneas emitidas por el script temporal rc.local . Para ver registros, ejecute el siguiente comando:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Reemplace REPLACEMENT_VM_NAME con el nombre que asignó a la instancia de reemplazo.

    La instancia de reemplazo también se reinicia automáticamente cuando finaliza el script temporal rc.local . Durante el segundo reinicio, puede inspeccionar el registro de la consola para asegurarse de que se cargue el entorno invitado.

  9. Verifique que pueda conectarse a la instancia mediante SSH .

    Cuando esté satisfecho de que la instancia de reemplazo funciona, puede detener o eliminar la instancia problemática.

Actualización del entorno de invitados

Si recibe un mensaje que indica que el entorno invitado está desactualizado, actualice los paquetes de su sistema operativo.

CentOS/RHEL/Rocky

Para actualizar los sistemas operativos CentOS, RHEL y Rocky Linux, ejecute los siguientes comandos:

sudo yum makecache
sudo yum install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Debian

Para actualizar los sistemas operativos Debian, ejecute los siguientes comandos:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

ubuntu

Para actualizar los sistemas operativos Ubuntu, ejecute los siguientes comandos:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

LES

Para actualizar los sistemas operativos SLES, ejecute los siguientes comandos:

sudo zypper refresh
sudo zypper install google-guest-{agent,configs,oslogin} \
google-osconfig-agent

ventanas

Para actualizar los sistemas operativos Windows, ejecute el siguiente comando:

googet update

Validar el entorno del huésped

La presencia de un entorno invitado se puede determinar inspeccionando los registros del sistema emitidos a la consola mientras se inicia una instancia o enumerando los paquetes instalados mientras está conectado a la instancia.

Registros de consola esperados para el entorno invitado

Esta tabla resume el resultado esperado para los registros de consola emitidos por instancias con entornos invitados en funcionamiento a medida que se inician.

Sistema operativo Gestión de servicios Salida esperada
CentOS/RHEL/Rocky Linux
Debian
ubuntu
LES
OS 89 optimizado para contenedores y versiones posteriores
sistemad
google_guest_agent: GCE Agent Started (version YYYYMMDD.NN)
google_metadata_script_runner: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Sistema operativo optimizado para contenedores 85 y anteriores sistemad
Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
ventanas
GCEGuestAgent: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)

Para ver los registros de la consola de una instancia, siga estos pasos.

Consola

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

    1. Haga clic en la instancia que necesita examinar.
    2. Reinicie o restablezca la instancia .
    3. En Registros , haga clic en Puerto serie 1 (consola) .
    4. Busque el resultado esperado haciendo referencia a la tabla anterior.

nube de gcloud

  1. Reinicie o restablezca la instancia .
  2. Utilice el subcomando gcloud compute instances get-serial-port-output para conectarse mediante la CLI de Google Cloud. Por ejemplo:

    gcloud compute instances get-serial-port-output VM_NAME

    Reemplace VM_NAME con el nombre de la instancia que necesita examinar.

  3. Busque el resultado esperado haciendo referencia a la tabla anterior.

Servicios cargados para el entorno del huésped.

Esta tabla resume los servicios que se deben cargar en instancias con entornos invitados de trabajo. El comando para enumerar servicios debe ejecutarse después de conectarse a la instancia, por lo que esta verificación solo se puede realizar si tiene acceso a ella.

Sistema operativo Comando para listar servicios Salida esperada
CentOS/RHEL/Rocky Linux
Debian
sudo systemctl list-unit-files \
| grep google | grep enabled
google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
ubuntu
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
SO optimizado para contenedores
sudo systemctl list-unit-files \
| grep google
var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
LES 12+
sudo systemctl list-unit-files \
| grep google | grep enabled
google-guest-agent.service              enabled
google-osconfig-agent.service           enabled
google-shutdown-scripts.service         enabled
google-startup-scripts.service          enabled
google-oslogin-cache.timer              enabled 
ventanas
Get-Service GCEAgent
Get-ScheduledTask GCEStartup
Running    GCEAgent   GCEAgent
\          GCEStartup Ready

Paquetes instalados para el entorno de invitados.

Esta tabla resume los paquetes que deben instalarse en instancias con entornos invitados en funcionamiento. El comando para enumerar los paquetes instalados debe ejecutarse después de conectarse a la instancia, por lo que esta verificación solo se puede realizar si tiene acceso a ella.

Sistema operativo Comando para listar paquetes Salida esperada
CentOS/RHEL/Rocky Linux
rpm -qa --queryformat '%{NAME}\n' \
| grep -iE 'google|gce'
google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-cloud-sdk
google-compute-engine
Debian
apt list --installed \
| grep -i google
gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
ubuntu
apt list --installed \
| grep -i google
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)
rpm -qa --queryformat '%{NAME}\n' \
| grep -i google
google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
ventanas
googet installed
certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

¿Qué sigue?