Ce document explique comment utiliser des scripts de démarrage pour démarrer une instance de machine virtuelle (VM) et ses programmes associés dans Google Distributed Cloud (GDC) avec isolation physique.
Un script de démarrage est un outil d'automatisation qui effectue des tâches pendant le processus de démarrage de la VM. Utilisez des scripts de démarrage pour automatiser les tâches de configuration et de déploiement de VM sur des instances nouvelles ou existantes, ce qui vous permet de gagner du temps et de réduire les efforts de configuration manuelle.
Ce document s'adresse aux développeurs des groupes d'administrateurs de plate-forme ou d'opérateurs d'applications qui souhaitent utiliser des scripts de démarrage pour les VM dans un environnement Distributed Cloud. Pour en savoir plus, consultez la documentation sur les audiences pour GDC sous air gap.
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 d'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 d'API Management pour remplacer
MANAGEMENT_API_SERVERdans ces instructions.
Demander des rôles IAM
Pour utiliser des scripts de démarrage pour une VM, contactez l'administrateur de projet IAM pour demander les rôles suivants sur votre projet :
Administrateur de projet de machine virtuelle (
project-vm-admin) : créez, modifiez, listez et supprimez des VM dans l'espace de noms du projet.Administrateur de secrets (
secret-admin) : permet d'obtenir, de lister, de créer, de mettre à jour, de supprimer, de corriger et de surveiller les secrets Kubernetes dans l'espace de noms du projet. Utilisez ce rôle pour spécifier les secrets des scripts de démarrage. Vous n'avez pas besoin de ce rôle pour spécifier des scripts de démarrage en texte brut.
Tous les rôles de VM doivent être liés à l'espace de noms du projet dans lequel réside la VM. Suivez la procédure pour valider votre accès.
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 en texte clair ou en tant que 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 de privilèges racine par défaut.
- Dans le secret Kubernetes, le nom de
scriptSecretRefdans la VMspecdoit 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_NAMEConsultez la procédure de création d'une VM décrite 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 pour 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 d'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 cadre du script de démarrage CLEAR_TEXT_SCRIPT_NAMENom du script de démarrage en texte clair. 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 nouvel 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 d'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 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 d'effectuer 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 du script de démarrage commencent par ce qui suit :
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...