Usar una secuencia de comandos de inicio en VMs de Windows

Una secuencia de comandos de inicio realiza tareas durante el proceso de arranque de una máquina virtual (VM). En este documento se indican los pasos que debes seguir para usar secuencias de comandos de inicio en instancias de VM.

Una secuencia de comandos de inicio es una herramienta de automatización que realiza tareas durante el proceso de arranque de la VM. Usa secuencias de comandos de inicio para automatizar las tareas de configuración e implementación de máquinas virtuales en instancias nuevas o ya creadas, lo que te ahorrará tiempo y reducirá el esfuerzo de configuración manual.

Este documento está dirigido a los desarrolladores de grupos de administradores de plataformas u operadores de aplicaciones que quieran usar secuencias de comandos de inicio para máquinas virtuales en un entorno de Distributed Cloud. Para obtener más información, consulta Audiencias de la documentación aislada de GDC.

Antes de empezar

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

Obtener la ruta del archivo kubeconfig

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

  1. Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.

  2. Usa la ruta al archivo kubeconfig del servidor de la API Management para sustituir MANAGEMENT_API_SERVER en estas instrucciones.

Solicitar roles de gestión de identidades y accesos

Para usar secuencias de comandos de inicio en una VM, ponte en contacto con el administrador de gestión de identidades y accesos de tu proyecto para solicitar los siguientes roles en tu proyecto:

  • Administrador de proyectos de máquinas virtuales (project-vm-admin): crea, modifica, enumera y elimina VMs en el espacio de nombres del proyecto.

  • Administrador de secretos (secret-admin): puede obtener, listar, crear, actualizar, eliminar, parchear y monitorizar secretos de Kubernetes en el espacio de nombres del proyecto. Usa este rol para especificar secretos de secuencias de comandos de inicio. No necesitas este rol para especificar secuencias de comandos de inicio de texto sin formato.

Todos los roles de VM deben enlazarse al espacio de nombres del proyecto en el que reside la VM. Sigue los pasos para verificar tu acceso.

Formatear nombres de secuencias de comandos de inicio de Windows

Los scripts de inicio de las VMs Windows deben seguir un formato de nomenclatura específico con el nombre del script y la extensión del archivo añadidos, separados por guiones. Por ejemplo, create-directory-ps1, donde create-directory es el nombre de la secuencia de comandos y ps1 es la extensión del archivo. Entre los formatos incorrectos se incluyen el uso de puntos en lugar de guiones y la omisión de la extensión de 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 del símbolo del sistema.
  • bat: contiene comandos por lotes.

Ejecutar secuencias de comandos de inicio de Windows en orden

Puedes usar varias secuencias de comandos de inicio. El tipo de archivo que contiene la secuencia de comandos influye en el orden de ejecución de cada secuencia de comandos. En la siguiente tabla se muestra el orden de ejecución de las secuencias de comandos de inicio de Windows:

Script de Windows Orden de ejecución
Secuencia de comandos de PowerShell Se ejecuta en cada arranque.
Secuencia de comandos por lotes Segundo en cada arranque.
Script de comandos Tercero en cada arranque.

Si dos secuencias de comandos de inicio tienen la misma extensión de archivo, se ejecutan en función de la extensión y el nombre del archivo, por 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 que beta-script-ps1.

En la siguiente especificación de VM se muestra 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
# …

Transferir una secuencia de comandos de inicio

Distributed Cloud 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 guion que debes usar en función del tamaño del guion:

Tamaño de la secuencia de comandos Formato de secuencia de comandos
Scripts de hasta 2048 bytes Borrar texto
Scripts de más de 2048 bytes Secreto de Kubernetes

Definir una secuencia de comandos de inicio

Para usar una secuencia de comandos de inicio, debes añadir el campo startupScripts a la máquina virtual spec campo. En este campo, puedes especificar varias secuencias de comandos de inicio como texto sin formato o como secreto de Kubernetes.

En el siguiente ejemplo se especifican las secuencias de comandos de inicio como texto no cifrado 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==

Tenga en cuenta lo siguiente:

  • La secuencia de comandos de inicio se ejecuta en cada arranque.
  • La secuencia de comandos de inicio tiene privilegios de root 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 añadiendo una clave script al campo data.

Crear una VM 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 Crear una VM con una secuencia de comandos de inicio.