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_SERVERdans 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) sous air gap exécute les scripts de démarrage dans l'ordre dans lequel ils apparaissent dans le tableau startupScripts.
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 l'
scriptSecretRefdans lespecde la VM doit correspondre au champmetadata.name. - Dans le secret Kubernetes, spécifiez le contenu du script de démarrage en ajoutant une clé
scriptau 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 EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic SECRET_NAME \ --from-file=script=FILE_NAMErm FILE_NAMESuivez 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
specavant 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_NAMECes variables sont définies comme suit :
Variable Définition MANAGEMENT_API_SERVERFichier kubeconfig du serveur de l'API Management. PROJECTProjet Distributed Cloud dans lequel vous souhaitez créer la VM. VM_NAMENom de la VM. FILE_NAMENom du fichier dans lequel stocker le script de démarrage. STARTUP_SCRIPT_CONTENTCommandes à exécuter dans le script de démarrage CLEAR_TEXT_SCRIPT_NAMENom du script de démarrage en texte brut. CLEAR_TEXT_SCRIPTScript en texte clair que vous définissez. SECRET_NAMENom du secret Kubernetes. SECRET_SCRIPT_NAMENom 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 \ -n PROJECT \ apply -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 EOFDans l'exemple, les variables sont définies comme suit :
Variable Définition MANAGEMENT_API_SERVERFichier kubeconfig du serveur de l'API Management. PROJECTProjet Distributed Cloud dans lequel vous souhaitez créer la VM. VM_NAMENom de la nouvelle VM. VM_BOOT_DISK_NAMENom du nouveau disque de démarrage de la VM. BOOT_DISK_IMAGE_NAMENom de l'image à utiliser pour le nouveau disque de démarrage de la VM. BOOT_DISK_SIZETaille du disque de démarrage, par exemple 20G.
Cette valeur doit toujours être supérieure ou égale à la valeurminimumDiskSizede l'image de disque de démarrage.BOOT_DISK_AUTO_DELETEtrueoufalse, indiquant si le disque de démarrage est automatiquement supprimé lorsque l'instance de VM est supprimée.MACHINE_TYPEType 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-finalLes journaux de script de démarrage commencent par le texte suivant :
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...