Un script de démarrage effectue des tâches pendant le processus de démarrage d'une machine virtuelle (VM). Cette page vous explique comment utiliser des scripts de démarrage sur des instances de VM.
Avant de commencer
Pour utiliser les commandes de l'interface de ligne de commande (CLI) gdcloud
, assurez-vous d'avoir téléchargé, installé et configuré la CLI gdcloud
.
Toutes les commandes pour Distributed Cloud utilisent la CLI gdcloud
ou kubectl
et nécessitent un environnement de système d'exploitation (OS).
Obtenir le chemin d'accès au fichier kubeconfig
Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :
Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.
Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer
MANAGEMENT_API_SERVER
dans ces instructions.
Demander des autorisations et un accès
Pour effectuer les tâches listées sur cette page, vous devez disposer du rôle Administrateur VirtualMachine du projet. Suivez les étapes pour vérifier votre accès ou demandez à votre administrateur IAM de projet de vous attribuer le rôle Administrateur de machines virtuelles du projet (project-vm-admin
) dans l'espace de noms du projet dans lequel réside la VM.
Transmettre un script de démarrage
Vous pouvez utiliser des scripts bash ou non-bash comme scripts de démarrage. Pour ce faire, incluez #!/bin/…
au début du script pour indiquer l'interpréteur du script.
Par exemple, pour utiliser un script de démarrage Python 3, ajoutez #! /usr/bin/python3
au début du script.
Google Distributed Cloud (GDC) air-gapped exécute les scripts de démarrage par ordre alphabétique, en fonction du nom de chaque script de démarrage.
Le tableau suivant indique le format de script à utiliser en fonction de la taille de votre script :
Taille du script | Format du script |
---|---|
Scripts jusqu'à 2 048 octets | Effacer le texte |
Scripts de plus de 2 048 octets | Secret Kubernetes |
Définir un script de démarrage
Pour utiliser un script de démarrage, vous devez ajouter le champ startupScripts
au champ spec
de la VM. Dans ce champ, vous pouvez spécifier plusieurs scripts de démarrage sous forme de texte clair ou de secret Kubernetes.
L'exemple suivant spécifie les scripts de démarrage en texte clair et un secret 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==
Tenez compte des points suivants :
- Le script de démarrage s'exécute à chaque démarrage.
- Le script de démarrage dispose des droits racine par défaut.
- Dans le secret Kubernetes, le nom de
scriptSecretRef
dans lespec
de la VM doit correspondre au champmetadata.name
. - Dans le secret Kubernetes, spécifiez le contenu du script de démarrage en ajoutant une clé
script
au champdata
.
Créer une VM avec un script de démarrage
Ces instructions s'appliquent, quelle que soit l'image que vous utilisez pour créer votre VM. Effectuer les actions suivantes :
Pour créer un script de démarrage en tant que secret Kubernetes, exécutez la commande suivante :
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
Suivez les étapes de création d'une VM décrites sur la page Créer une VM. À l'étape 1, ajoutez le ou les scripts de démarrage au champ
spec
avant d'exécuter la commande permettant de créer une VM.Cet exemple définit un script de démarrage avec du texte clair et un secret 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
Ces variables sont définies comme suit :
Variable Définition MANAGEMENT_API_SERVER
Fichier kubeconfig du serveur de l'API Management. PROJECT
Projet Distributed Cloud dans lequel vous souhaitez créer la VM. VM_NAME
Nom de la VM. FILE_NAME
Nom du fichier dans lequel stocker le script de démarrage. STARTUP_SCRIPT_CONTENT
Commandes à exécuter dans le script de démarrage CLEAR_TEXT_SCRIPT_NAME
Nom du script de démarrage en texte brut. CLEAR_TEXT_SCRIPT
Script en texte clair que vous définissez. SECRET_NAME
Nom du secret Kubernetes. SECRET_SCRIPT_NAME
Nom du script de démarrage en tant que secret Kubernetes. Suivez les étapes ci-dessous pour créer une VM.
Voici un exemple de création d'une VM avec des scripts de démarrage qui ajoutent un utilisateur à l'aide d'un secret Kubernetes et de texte clair.
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
Dans l'exemple, les variables sont définies comme suit :
Variable Définition MANAGEMENT_API_SERVER
Fichier kubeconfig du serveur de l'API Management. PROJECT
Projet Distributed Cloud dans lequel vous souhaitez créer la VM. VM_NAME
Nom de la nouvelle VM. VM_BOOT_DISK_NAME
Nom du nouveau disque de démarrage de la VM. BOOT_DISK_IMAGE_NAME
Nom de l'image à utiliser pour le nouveau disque de démarrage de la VM. BOOT_DISK_SIZE
Taille du disque de démarrage, par exemple 20G
.
Cette valeur doit toujours être supérieure ou égale à la valeurminimumDiskSize
de l'image de disque de démarrage.BOOT_DISK_AUTO_DELETE
true
oufalse
, indiquant si le disque de démarrage est automatiquement supprimé lorsque l'instance de VM est supprimée.MACHINE_TYPE
Type de machine prédéfini pour la nouvelle VM. Pour sélectionner un type de machine disponible, exécutez la commande suivante :
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
Mettre à jour une VM existante avec un script de démarrage
Vous pouvez également mettre à jour une VM existante avec un script de démarrage. La VM doit être arrêtée avant que vous effectuiez la mise à jour.
Suivez la procédure pour mettre à jour les propriétés de la VM et mettez à jour le champ spec
avec le script de démarrage que vous souhaitez exécuter.
Afficher le résultat d'un script de démarrage
- Suivez la procédure pour vous connecter à une VM.
Exécutez la commande suivante dans la VM invitée pour obtenir les journaux du script de démarrage que vous avez exécuté :
sudo journalctl -u cloud-final
Les journaux de script de démarrage commencent par le texte suivant :
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...