Usa una secuencia de comandos de inicio en VM de Windows

Una secuencia de comandos de inicio realiza tareas durante el proceso de inicio de una máquina virtual (VM). En esta página, se proporcionan los pasos que debes seguir para usar secuencias de comandos de inicio en instancias de VM.

Antes de comenzar

Para usar los comandos de la interfaz de línea de comandos (CLI) de gdcloud, asegúrate de haber descargado, instalado y configurado la CLI de gdcloud. Todos los comandos para el dispositivo aislado de GDC usan la CLI de gdcloud o kubectl, y requieren un entorno de sistema operativo (SO).

Obtén la ruta de acceso del archivo kubeconfig

Para ejecutar comandos en el servidor de la API de Management, asegúrate de tener los siguientes recursos:

  1. Ubica el nombre del servidor de la API de Management o pregúntale a tu administrador de la plataforma (PA) cuál es el nombre del servidor.

  2. Accede y genera el archivo kubeconfig para el servidor de la API de Management si no tienes uno.

  3. Usa la ruta de acceso para reemplazar MANAGEMENT_API_SERVER{"</var>"}} en estas instrucciones.

Solicita permisos y acceso

Para realizar las tareas que se indican en esta página, debes tener el rol de administrador de la VM del proyecto. Sigue los pasos para verificar tu acceso o para que el administrador de IAM del proyecto te asigne el rol de administrador de máquinas virtuales del proyecto (project-vm-admin) en el espacio de nombres del proyecto en el que reside la VM.

Formatea los nombres de las secuencias de comandos de inicio de Windows

Las secuencias de comandos de inicio para las VMs de Windows deben seguir un formato de nomenclatura específico con el nombre de la secuencia de comandos y la extensión de archivo anexados, separados por guiones. Por ejemplo, create-directory-ps1, con create-directory como nombre de la secuencia de comandos y ps1 como extensión de archivo. Los formatos incorrectos incluyen el uso de puntos en lugar de guiones y la omisión de la extensión del archivo, como create-directory.ps1 y create-directory.

A continuación, se muestran las extensiones de archivo que se deben usar para las secuencias de comandos de inicio de Windows:

  • ps1: Contiene comandos de PowerShell.
  • cmd: Contiene comandos por lotes para el intérprete de Símbolo del sistema.
  • bat: Contiene comandos por lotes.

Ejecuta las secuencias de comandos de inicio de Windows en orden

Puedes usar múltiples secuencias de comandos de inicio. El tipo de archivo que contiene la secuencia de comandos afecta el orden en que se ejecuta cada secuencia de comandos. En la siguiente tabla, se muestra el orden de ejecución de las secuencias de comandos de inicio de Windows:

Secuencia de comandos de Windows Orden de ejecución
Secuencia de comandos de PowerShell Primero en cada inicio.
Secuencia de comandos por lotes Segundo en cada inicio
Secuencia de comandos Tercero en cada inicio

Si dos secuencias de comandos de inicio tienen la misma extensión de archivo, se ejecutan según la extensión y el nombre del archivo en orden alfabético. Por ejemplo, si los nombres de tus secuencias de comandos de inicio son alpha-script-ps1 y beta-script-ps1, alpha-script-ps1 se ejecuta antes de beta-script-ps1.

En la siguiente especificación de VM de ejemplo, se muestran el orden y la estructura de la secuencia de comandos de inicio de Windows en el campo startupScripts:

...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: hello-world-bat
    script: |-
      ECHO "Hello World!"
  - name: list-directories-cmd
    script: |-
      dir C:\Windows  > files.txt
...

Pasa una secuencia de comandos de inicio

El dispositivo aislado de GDC ejecuta las secuencias de comandos de inicio en orden alfabético, según el nombre de cada secuencia de comandos de inicio.

En la siguiente tabla, se muestra el formato de secuencia de comandos que debes usar según el tamaño de tu secuencia de comandos:

Tamaño del script Formato de secuencia de comandos
Secuencias de comandos de hasta 2,048 bytes Borrar texto
Secuencias de comandos de más de 2,048 bytes Secret de Kubernetes

Define una secuencia de comandos de inicio

Para usar una secuencia de comandos de inicio, debes agregar el campo startupScripts al campo spec de la VM. En este campo, puedes especificar varias secuencias de comandos de inicio como texto sin formato o como un secreto de Kubernetes.

En el siguiente ejemplo, se especifican las secuencias de comandos de inicio como texto sin encriptar y un secreto de Kubernetes:

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "vm-test"
spec:
  ...
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: list-directories-cmd
    scriptSecretRef:
      name: list-directories
---

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: list-directories
data: 
  script:
    ZGlyIEM6XFdpbmRvd3MgID4gZmlsZXMudHh0Cg==

Revisa las siguientes consideraciones:

  • La secuencia de comandos de inicio se ejecuta en cada inicio.
  • La secuencia de comandos de inicio tiene privilegios de raíz predeterminados.
  • En el secreto de Kubernetes, el nombre de scriptSecretRef en la VM spec debe coincidir con el campo metadata.name.
  • En el secreto de Kubernetes, especifica el contenido de la secuencia de comandos de inicio agregando una clave script al campo data.

Crea una VM nueva con una secuencia de comandos de inicio de Windows

Para crear una VM con una secuencia de comandos de inicio de Windows, sigue los pasos que se indican en Crea una VM nueva con una secuencia de comandos de inicio.