Una secuencia de comandos de inicio realiza tareas durante el proceso de inicio de una máquina virtual (VM). En esta página se indican los pasos que debes seguir para usar secuencias de comandos de inicio en instancias de VM.
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:
Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.
Usa la ruta al archivo kubeconfig del servidor de la API Management para sustituir
MANAGEMENT_API_SERVER
en estas instrucciones.
Solicitar permisos y acceso
Para realizar las tareas que se indican en esta página, debes tener el rol de administrador de máquinas virtuales de proyecto. Sigue los pasos para verificar tu acceso o pide al administrador de gestión de identidades y accesos de proyectos que te asigne el rol Administrador de máquinas virtuales de proyectos (project-vm-admin
) en el espacio de nombres del proyecto en el que se encuentra la VM.
Transferir una secuencia de comandos de inicio
Puedes usar secuencias de comandos bash o de otro tipo como secuencias de comandos de inicio. Para ello, incluye #!/bin/…
al principio de la secuencia de comandos para indicar el intérprete de la secuencia de comandos.
Por ejemplo, para usar una secuencia de comandos de inicio de Python 3, añade #! /usr/bin/python3
al principio de la secuencia de comandos.
Google Distributed Cloud (GDC) air-gapped 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 de su tamaño:
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
al campo spec
de la máquina virtual. En este campo, puede 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 sin cifrar y un secreto de Kubernetes:
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
name: "my-vm"
spec:
…
startupScripts:
- name: hello-world
script: |
#!/bin/bash
echo hello
- name: add-user
scriptSecretRef:
name: add-user
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: add-user
data:
script:
IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==
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 superusuario predeterminados.
- En el secreto de Kubernetes, el nombre de
scriptSecretRef
de la VMspec
debe coincidir con el campometadata.name
. - En el secreto de Kubernetes, especifica el contenido del script de inicio añadiendo una clave
script
al campodata
.
Crear una VM con una secuencia de comandos de inicio
Estas instrucciones se aplican independientemente de la imagen que uses para crear tu máquina virtual. Haz lo siguiente:
Para crear una secuencia de comandos de inicio como un secreto de Kubernetes, ejecuta el siguiente comando:
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n PROJECT generic SECRET_NAME --from-file=script=FILE_NAME
rm FILE_NAME
Sigue los pasos para crear una VM que se describen en la página Crear una VM. En el paso 1, añade la secuencia de comandos de inicio o las secuencias de comandos al campo
spec
antes de ejecutar el comando para crear una VM.En este ejemplo se define una secuencia de comandos de inicio con texto sin formato y un secreto de Kubernetes:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: … startupScripts: - name: CLEAR_TEXT_SCRIPT_NAME script: | #!/bin/bash CLEAR_TEXT_SCRIPT - name: SECRET_SCRIPT_NAME scriptSecretRef: name: SECRET_NAME
Estas variables se definen de la siguiente manera:
Variable Definición MANAGEMENT_API_SERVER
El archivo kubeconfig del servidor de la API Management. PROJECT
El proyecto de Distributed Cloud en el que quieres crear la VM. VM_NAME
El nombre de la VM. FILE_NAME
Nombre del archivo en el que se almacenará la secuencia de comandos de inicio. STARTUP_SCRIPT_CONTENT
Los comandos que se ejecutan como parte de la secuencia de comandos de inicio CLEAR_TEXT_SCRIPT_NAME
Nombre de la secuencia de comandos de inicio de texto sin formato. CLEAR_TEXT_SCRIPT
La secuencia de comandos de texto sin formato que definas. SECRET_NAME
Nombre del secreto de Kubernetes. SECRET_SCRIPT_NAME
Nombre de la secuencia de comandos de inicio como secreto de Kubernetes. Sigue estos pasos para crear una VM.
A continuación, se muestra un ejemplo de cómo crear una máquina virtual con secuencias de comandos de inicio que añadan un nuevo usuario mediante un secreto de Kubernetes y texto sin formato.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: VM_BOOT_DISK_NAME spec: source: image: name: BOOT_DISK_IMAGE_NAME namespace: vm-system size: BOOT_DISK_SIZE --- apiVersion: v1 kind: Secret type: Opaque metadata: name: add-user data: script: IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg== --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: virtualMachineType: MACHINE_TYPE disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true autoDelete: BOOT_DISK_AUTO_DELETE startupScripts: - name: add-user scriptSecretRef: name: add-user - name: add-to-sudoers script: | #!/bin/bash usermod -aG sudo user EOF
En el ejemplo, las variables se definen de la siguiente manera:
Variable Definición MANAGEMENT_API_SERVER
El archivo kubeconfig del servidor de la API Management. PROJECT
El proyecto de Distributed Cloud en el que quieres crear la VM. VM_NAME
Nombre de la nueva VM. VM_BOOT_DISK_NAME
Nombre del nuevo disco de arranque de la VM. BOOT_DISK_IMAGE_NAME
Nombre de la imagen que se usará para el disco de arranque de la nueva VM. BOOT_DISK_SIZE
Tamaño del disco de arranque, como 20G
.
Este valor siempre debe ser mayor o igual que elminimumDiskSize
de la imagen del disco de arranque.BOOT_DISK_AUTO_DELETE
true
ofalse
, que indica si el disco de arranque se elimina automáticamente cuando se elimina la instancia de máquina virtual.MACHINE_TYPE
El tipo de máquina predefinido de la nueva VM. Para seleccionar un tipo de máquina disponible, ejecuta este comando:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
Actualizar una VM con una secuencia de comandos de inicio
También puedes actualizar una VM con una secuencia de comandos de inicio. La máquina virtual debe estar apagada para poder realizar la actualización.
Sigue los pasos para actualizar las propiedades de la VM
y actualiza el campo spec
con la secuencia de comandos de inicio que quieras ejecutar.
Ver la salida de una secuencia de comandos de inicio
- Sigue los pasos para conectarte a una máquina virtual.
Ejecuta el siguiente comando en la máquina virtual invitada para obtener los registros de la secuencia de comandos de inicio que has ejecutado:
sudo journalctl -u cloud-final
Los registros de la secuencia de comandos de inicio empiezan con lo siguiente:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...