Configurer et gérer cloud-init pour RHEL 9
Utiliser cloud-init pour automatiser l'initialisation des instances cloud
Résumé
- Fonctionnement de cloud-init
- Comment utiliser cloud-init pour créer des instances cloud ?
- Quelles sont les utilisations de cloud-init prises en charge par Red Hat ?
Rendre l'open source plus inclusif
Red Hat s'engage à remplacer les termes problématiques dans son code, sa documentation et ses propriétés Web. Nous commençons par ces quatre termes : master, slave, blacklist et whitelist. En raison de l'ampleur de cette entreprise, ces changements seront mis en œuvre progressivement au cours de plusieurs versions à venir. Pour plus de détails, voir le message de notre directeur technique Chris Wright.
Fournir un retour d'information sur la documentation de Red Hat
Nous apprécions vos commentaires sur notre documentation. Faites-nous savoir comment nous pouvons l'améliorer.
Soumettre des commentaires sur des passages spécifiques
- Consultez la documentation au format Multi-page HTML et assurez-vous que le bouton Feedback apparaît dans le coin supérieur droit après le chargement complet de la page.
- Utilisez votre curseur pour mettre en évidence la partie du texte que vous souhaitez commenter.
- Cliquez sur le bouton Add Feedback qui apparaît près du texte en surbrillance.
- Ajoutez vos commentaires et cliquez sur Submit.
Soumettre des commentaires via Bugzilla (compte requis)
- Connectez-vous au site Web de Bugzilla.
- Sélectionnez la version correcte dans le menu Version.
- Saisissez un titre descriptif dans le champ Summary.
- Saisissez votre suggestion d'amélioration dans le champ Description. Incluez des liens vers les parties pertinentes de la documentation.
- Cliquez sur Submit Bug.
Chapitre 1. Introduction à cloud-init
cloud-init
est un logiciel qui automatise l'initialisation des instances cloud lors du démarrage du système. Vous pouvez configurer cloud-init
pour qu'il exécute diverses tâches. Voici quelques exemples de tâches que cloud-init
peut effectuer :
- Configuration d'un nom d'hôte
- Installation de paquets sur une instance
- Exécution de scripts
- Suppression du comportement par défaut de la machine virtuelle (VM)
L'endroit où vous obtenez votre image pour configurer cloud-init
dépend de l'usage que vous comptez en faire.
-
Le paquetage
cloud-init
est installé sur les images d'invités KVM que vous téléchargez depuis le portail client de Red Hat. Lorsque vous lancez une instance,cloud-init
est activé. Les images KVM Guest que vous téléchargez à partir du portail client Red Hat sont destinées à être utilisées avec Red Hat Virtualization (RHV), Red Hat OpenStack Platform (RHOSP) et Red Hat OpenShift Virtualization. -
Vous pouvez également télécharger une image ISO RHEL à partir du portail client Red Hat pour créer votre propre image d'invité personnalisée. Dans ce cas, vous devez installer vous-même le paquetage
cloud-init
sur votre image d'invité. -
Si vous prévoyez d'utiliser une image avec un fournisseur de cloud (par exemple, AWS ou Azure), utilisez Red Hat Image Builder pour créer l'image. Les images Image Builder sont personnalisées pour être utilisées avec des fournisseurs de cloud spécifiques. Les types d'images AMI, VHD et qcow2 incluent
cloud-init
déjà installé. Reportez-vous à Composer une image système RHEL personnalisée pour obtenir des informations sur Image Builder.
La plupart des plateformes cloud prennent en charge cloud-init
, bien que les procédures de configuration et les options prises en charge varient. Vous pouvez également configurer cloud-init
pour un environnement NoCloud.
Vous pouvez configurer cloud-init
sur une VM, puis utiliser cette VM comme modèle pour d'autres VM ou grappes de VM.
Des produits spécifiques de Red Hat (par exemple, Red Hat Virtualization) ont des procédures documentées pour configurer cloud-init
afin de l'utiliser avec ces produits.
Ce document fait référence à la documentation cloud-init
à plusieurs endroits. Reportez-vous à la documentation référencée cloud-init
pour obtenir des informations complètes sur cloud-init
.
Conditions préalables
- Créez un compte sur le portail client de Red Hat.
1.1. configuration cloud-init
cloud-init
utilise des fichiers d'instructions au format YAML pour effectuer des tâches. Vous décidez de la configuration initiale que vous souhaitez que cloud-init
effectue en fournissant des instructions dans les fichiers YAML. Lorsqu'une instance démarre, le service cloud-init
démarre, recherche et exécute les instructions. Les tâches sont exécutées lors du premier démarrage ou lors des démarrages suivants de votre VM, en fonction de la configuration de cloud-init
.
Vous définissez les tâches en configurant le fichier /etc/cloud/cloud.cfg
et en ajoutant des directives dans le répertoire /etc/cloud/cloud.cfg.d/
.
Le fichier
cloud.cfg
comprend des directives, telles que celles relatives à l'accès et à l'authentification des utilisateurs et aux informations sur le système.Le fichier comprend également des modules par défaut et des modules optionnels pour
cloud-init
. Les modules sont exécutés dans l'ordre au cours de trois phases, à savoir la phase d'initialisation decloud-init
, la phase de configuration et la phase finale. Dans le fichiercloud.cfg
, les modules pour les trois phases sont répertoriés souscloud_init_modules
,cloud_config_modules
etcloud_final_modules
, respectivement.-
Le répertoire
cloud.cfg.d
est l'endroit où vous pouvez ajouter des directives supplémentaires pourcloud-init
. Lorsque vous ajoutez des directives au répertoirecloud.cfg.d
, vous les ajoutez généralement à un fichier nommé*.cfg
, et vous incluez toujours#cloud-config
au début du fichier.
1.2. cloud-init fonctionne par étapes
cloud-init
fonctionne en cinq étapes lors du démarrage du système. Ces étapes déterminent si cloud-init
s'exécute et où il trouve ses sources de données, entre autres tâches. Les étapes sont les suivantes :
-
L'étape du générateur
cloud-init
, par l'intermédiaire du servicesystemd
, détermine sicloud-init
doit être exécuté au démarrage. -
Au cours de l'étape locale,
cloud-init
trouve les sources de données locales et applique la configuration du réseau. -
Pendant la phase de réseau,
cloud-init
traite les données de l'utilisateur et exécute les modules énumérés souscloud_init_modules
dans votre fichiercloud.cfg
. Vous pouvez activer, désactiver ou ajouter des modules à la sectioncloud_init_modules
. -
Pendant la phase de configuration,
cloud-init
exécute les modules répertoriés souscloud_config_modules
dans votre fichiercloud.cfg
. Vous pouvez activer, désactiver ou ajouter des modules à la sectioncloud_config_modules
. -
Au cours de la dernière étape,
cloud-init
peut exécuter ce que vous avez inclus souscloud_final_modules
dans votre fichiercloud.cfg
. Vous pouvez inclure des installations de paquets que vous exécutez généralement après le démarrage d'un système, ainsi que des plug-ins de gestion de la configuration et des scripts utilisateur. Vous pouvez activer, désactiver ou ajouter des modules à la sectioncloud_final_modules
.
Les cinq étapes de démarrage sont décrites dans la section " Boot Stages" de la documentation du site cloud-init
.
1.3. les modules cloud-init s'exécutent par phases
Lorsque cloud-init
fonctionne, il exécute les modules de cloud.cfg
dans l'ordre, en trois phases :
-
La phase de réseau (
cloud_init_modules
) -
La phase de configuration (
cloud_config_modules
) -
La phase finale (
cloud_final_modules
)
Lorsque cloud-init
s'exécute pour la première fois sur une VM, tous les modules que vous avez configurés s'exécutent dans leurs phases respectives. Lors d'une exécution ultérieure de cloud-init
, l'exécution d'un module dans une phase dépend de module frequency du module individuel. Certains modules s'exécutent à chaque fois que cloud-init
s'exécute ; d'autres ne s'exécutent qu'à la première exécution de cloud-init
, même si l'ID de l'instance change.
Un identifiant d'instance identifie de manière unique une instance. Lorsqu'un ID d'instance change, cloud-init
traite l'instance comme une nouvelle instance.
Les valeurs possibles de module frequency sont les suivantes :
-
Per instance
signifie que le module s'exécute au premier démarrage d'une instance. Par exemple, si vous clonez une instance ou créez une nouvelle instance à partir d'une image sauvegardée, les modules désignés par instance s'exécutent à nouveau. -
Per once
signifie que le module ne s'exécute qu'une seule fois. Par exemple, si vous clonez une instance ou créez une nouvelle instance à partir d'une image sauvegardée, les modules désignés par une fois ne s'exécutent pas à nouveau sur ces instances. -
Per always
signifie que le module s'exécute à chaque démarrage.
Vous pouvez modifier la fréquence d'un module lorsque vous configurez le module ou en utilisant la ligne de commande.
1.4. cloud-init agit sur les données de l'utilisateur, les métadonnées et les données du fournisseur
cloud-init
consomme et agit sur les données de l'utilisateur, les métadonnées et les données du fournisseur.
-
Les données utilisateur comprennent les directives que vous spécifiez dans le fichier
cloud.cfg
et dans le répertoirecloud.cfg.d
. Par exemple, les données utilisateur peuvent comprendre des fichiers à exécuter, des paquets à installer et des scripts shell. Reportez-vous à la section Formats de données utilisateur de la documentationcloud-init
pour plus d'informations sur les types de données utilisateur autorisés parcloud-init
. -
Les métadonnées comprennent les données associées à une source de données spécifique. Par exemple, les métadonnées peuvent comprendre le nom du serveur et l'identifiant de l'instance. Si vous utilisez une plateforme en nuage spécifique, celle-ci détermine où vos instances trouvent les données utilisateur et les métadonnées. Votre plateforme peut exiger que vous ajoutiez des métadonnées et des données utilisateur à un service HTTP ; dans ce cas, lorsque
cloud-init
s'exécute, il consomme les métadonnées et les données utilisateur du service HTTP. Les données du fournisseur sont facultativement fournies par l'organisation (par exemple, un fournisseur de cloud) et comprennent des informations qui peuvent personnaliser l'image pour mieux l'adapter à l'environnement dans lequel elle s'exécute.
cloud-init
agit sur les données facultatives du fournisseur et les données de l'utilisateur après avoir lu toutes les métadonnées et initialisé le système. Par défaut, les données du fournisseur sont exécutées au premier démarrage. Vous pouvez désactiver l'exécution des données fournisseur.Reportez-vous à la section Documentation
cloud-init
Métadonnées d'instance pour une description des métadonnées ; Sources de données pour une liste des sources de données ; et Données du fournisseur pour plus d'informations sur les données du fournisseur.
1.5. cloud-init identifie la plateforme cloud
cloud-init
tente d'identifier la plate-forme en nuage à l'aide du script ds-identify
. Le script s'exécute au premier démarrage d'une instance.
L'ajout d'une directive sur les sources de données peut faire gagner du temps lors de l'exécution de cloud-init
. Vous devez ajouter la directive dans le fichier /etc/cloud/cloud.cfg
ou dans le répertoire /etc/cloud/cloud.cfg.d
. Par exemple, vous pouvez ajouter une directive dans le fichier ou dans le répertoire :
liste_des_données :[Ec2]
Outre l'ajout de la directive pour votre plateforme cloud, vous pouvez configurer davantage cloud-init
en ajoutant des détails de configuration supplémentaires, tels que des URL de métadonnées.
datasource_list: [Ec2] datasource: Ec2: metadata_urls: ['http://169.254.169.254']
Après l'exécution de cloud-init
, vous pouvez consulter un fichier journal (run/cloud-init/ds-identify.log
) qui fournit des informations détaillées sur la plate-forme.
1.6. Ressources supplémentaires
Chapitre 2. Prise en charge de cloud-init par Red Hat
Ce chapitre couvre la prise en charge de cloud-init
par Red Hat. Il comprend des informations sur les produits Red Hat qui utilisent cloud-init
, les modules cloud-init
pris en charge par Red Hat et les répertoires et fichiers par défaut.
2.1. répertoires et fichiers importants de cloud-init
Le tableau suivant comprend des répertoires et des fichiers importants. Passez en revue ces répertoires et fichiers ; ils vous permettent d'effectuer des tâches telles que :
-
Configuration
cloud-init
-
Recherche d'informations sur votre configuration après l'exécution de
cloud-init
- Examen des fichiers journaux
- Recherche de modèles
En fonction de votre scénario et de votre source de données, il peut y avoir des fichiers et des répertoires supplémentaires importants pour votre configuration.
Tableau 2.1. répertoires et fichiers cloud-init
Répertoire ou fichier | Description |
---|---|
|
Le fichier |
|
Le répertoire |
|
Lorsque |
|
Le répertoire |
|
Ce répertoire comprend des modèles que vous pouvez activer dans |
|
Le fichier |
|
Le répertoire |
2.2. Produits Red Hat qui utilisent cloud-init
Vous pouvez utiliser cloud-init
avec les produits Red Hat suivants.
-
Red Hat Virtualization. Une fois que vous avez installé
cloud-init
sur une VM, vous pouvez créer un modèle et exploiter les fonctions decloud-init
pour toutes les VM créées à partir de ce modèle. Reportez-vous à la section Utilisation de Cloud-Init pour automatiser la configuration des machines virtuelles pour plus d'informations sur l'utilisation decloud-init
avec les machines virtuelles. -
Red Hat OpenStack Platform. Vous pouvez utiliser
cloud-init
pour vous aider à configurer des images pour OpenStack. Pour plus d'informations, reportez-vous au Guide des instances et des images. -
Red Hat CloudForms. Vous pouvez utiliser
cloud-init
pour provisionner des machines virtuelles pour Red Hat CloudForms. Reportez-vous à Modèles de personnalisation pour le provisionnement de machines virtuelles et d'instances pour plus d'informations. -
Red Hat Satellite. Vous pouvez utiliser
cloud-init
avec Red Hat Satellite. Reportez-vous à Préparation d'images Cloud-init dans Red Hat Virtualization pour plus d'informations. -
Red Hat OpenShift. Vous pouvez utiliser
cloud-init
lorsque vous créez des VM pour OpenShift. Reportez-vous à la section Création de machines virtuelles pour plus d'informations.
2.3. Red Hat prend en charge ces modules cloud-init
Red Hat prend en charge la plupart des modules cloud-init
. Les modules individuels peuvent contenir plusieurs options de configuration. Le tableau suivant répertorie tous les modules cloud-init
actuellement pris en charge par Red Hat et fournit une brève description ainsi que la fréquence par défaut du module. Reportez-vous à Modules dans la section Documentation de cloud-init pour obtenir des descriptions complètes et des options pour ces modules.
Tableau 2.2. Modules cloud-init pris en charge
module cloud-init | Description | Fréquence par défaut du module |
---|---|---|
bootcmd | Exécute des commandes au début du processus de démarrage | par toujours |
ca_certs | Ajoute des certificats d'autorité de certification | par instance |
débogage | Active ou désactive la sortie d'informations internes pour faciliter le débogage | par instance |
disable_ec2_metadata | Active ou désactive les métadonnées AWS EC2 | par toujours |
disk_setup | Configure des tables de partition et des systèmes de fichiers simples | par instance |
message_final |
Spécifie le message de sortie une fois que | par toujours |
foo | L'exemple montre la structure du module (le module ne fait rien) | par instance |
partie croissante | Redimensionne les partitions pour remplir l'espace disque disponible | par toujours |
clés_vers_console | Permet de contrôler les empreintes digitales et les clés qui peuvent être écrites sur la console | par instance |
paysage | Installe et configure un client paysage | par instance |
lieu | Configure les paramètres linguistiques du système et les applique à l'ensemble du système | par instance |
mcollectif |
Installe, configure et démarre | par instance |
migrateur |
Déplacement des anciennes versions de | par toujours |
montures | Configure les points de montage et les fichiers d'échange | par instance |
téléphone_domicile | Envoi de données à un hôte distant une fois le démarrage terminé | par instance |
changement_d'état_de_puissance | Achève l'arrêt et le redémarrage après l'exécution de tous les modules de configuration | par instance |
marionnette | Installe et configure puppet | par instance |
redimensionnements | Redimensionne un système de fichiers afin d'utiliser tout l'espace disponible sur une partition | par toujours |
resolv_conf |
Configure | par instance |
rh_subscription | Enregistre un système Red Hat Enterprise Linux | par instance |
droits_données_utilisateur |
Ajout de la prise en charge des crochets de configuration RightScale pour | par instance |
rsyslog |
Configure la journalisation du système à distance en utilisant | par instance |
runcmd | Exécute des commandes arbitraires | par instance |
sel_minion |
Installe, configure et démarre | par instance |
scripts_par_boot | Exécution par scripts de démarrage | par toujours |
scripts_par_instance | Exécute des scripts par instance | par instance |
scripts_par_once | Exécute les scripts une seule fois | par fois |
scripts_utilisateur | Exécute les scripts de l'utilisateur | par instance |
scripts_vendeur | Exécute les scripts du fournisseur | par instance |
seed_random | Fournit des données d'amorçage aléatoires | par instance |
set_hostname | Définit le nom d'hôte et le nom de domaine complet (FQDN) | par toujours |
set_passwords | Définit les mots de passe des utilisateurs et active ou désactive l'authentification par mot de passe SSH | par instance |
ssh_authkey_fingerprints | Enregistre les empreintes digitales des clés SSH des utilisateurs | par instance |
ssh_import_id | Importation de clés SSH | par instance |
ssh | Configure SSH, l'hôte et les clés SSH autorisées | par instance |
fuseau horaire | Définit le fuseau horaire du système | par instance |
update_etc_hosts |
Mises à jour | par toujours |
update_hostname | Mise à jour du nom d'hôte et du FQDN | par toujours |
groupes_utilisateurs | Configuration des utilisateurs et des groupes | par instance |
écrire_fichiers | Écriture de fichiers arbitraires | par instance |
yum_add_repo | Ajoute la configuration du référentiel dnf au système | par toujours |
Le tableau suivant répertorie les modules que Red Hat ne prend pas en charge actuellement.
Tableau 2.3. Modules non pris en charge
Module |
---|
apt_configure |
apt_pipeline |
byobu |
chef |
emit_upstart |
grub_dpkg |
ubuntu_init_switch |
2.4. Le fichier cloud.cfg par défaut
Le fichier /etc/cloud/cloud.cfg
énumère les modules qui constituent la configuration de base de cloud-init
.
Les modules contenus dans le fichier sont les modules par défaut de cloud-init
. Vous pouvez configurer les modules en fonction de votre environnement ou supprimer les modules dont vous n'avez pas besoin. Les modules inclus dans cloud.cfg
ne font pas nécessairement quelque chose en étant listés dans le fichier. Vous devez les configurer individuellement si vous souhaitez qu'ils effectuent des actions au cours de l'une des phases de cloud-init
.
Le fichier cloud.cfg
fournit la chronologie de l'exécution des modules individuels. Vous pouvez ajouter des modules supplémentaires à cloud.cfg
tant que Red Hat prend en charge les modules que vous souhaitez ajouter.
Le contenu par défaut du fichier pour Red Hat Enterprise Linux (RHEL) est le suivant :
-
Les modules s'exécutent dans l'ordre indiqué à l'adresse
cloud.cfg
. En règle générale, vous ne modifiez pas cet ordre. -
Les directives
cloud.cfg
peuvent être remplacées par des données utilisateur. -
Lorsque vous exécutez
cloud-init
manuellement, vous pouvez remplacercloud.cfg
par des options de ligne de commande. - Chaque module comprend ses propres options de configuration, dans lesquelles vous pouvez ajouter des informations spécifiques.
users: 1 - default disable_root: 1 2 ssh_pwauth: 0 3 mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] 4 ssh_deletekeys: 1 5 ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519'] 6 syslog_fix_perms: ~ 7 disable_vmware_customization: false 8 cloud_init_modules: 9 - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups - ssh cloud_config_modules: 10 - mounts - locale - set-passwords - rh_subscription - dnf-add-repo - package-update-upgrade-install - timezone - puppet - chef - salt-minion - mcollective - disable-ec2-metadata - runcmd cloud_final_modules: 11 - rightscale_userdata - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change system_info: default_user: 12 name: cloud-user lock_passwd: true gecos: Cloud User groups: [adm, systemd-journal] sudo: ["ALL=(ALL) NOPASSWD:ALL"] shell: /bin/bash distro: rhel 13 paths: cloud_dir: /var/lib/cloud 14 templates_dir: /etc/cloud/templates 15 ssh_svcname: sshd 16 # vim:syntax=yaml
- 1
- Spécifie l'utilisateur par défaut du système. Pour plus d'informations, reportez-vous à la section Utilisateurs et groupes.
- 2
- Active ou désactive la connexion de la racine. Pour plus d'informations, voir Clés autorisées.
- 3
- Indique si
ssh
est configuré pour accepter l'authentification par mot de passe. Pour plus d'informations, reportez-vous à la section Définir les mots de passe. - 4
- Configure les points de montage ; doit être une liste contenant six valeurs. Pour plus d'informations, voir Montages.
- 5
- Indique s'il faut supprimer les clés SSH d'hôte par défaut. Pour plus d'informations, reportez-vous à la section Clés d'hôte.
- 6
- Spécifie les types de clés à générer. Pour plus d'informations, reportez-vous à la section Clés d'hôte. Notez que pour RHEL 8.4 et les versions antérieures, la valeur par défaut de cette ligne est
~
. - 7
cloud-init
s'exécute à plusieurs étapes du démarrage. Définissez cette option pour quecloud-init
puisse enregistrer toutes les étapes dans son fichier journal. Pour plus d'informations sur cette option, consultez le fichiercloud-config.txt
dans le répertoireusr/share/doc/cloud-init/examples
.- 8
- Active ou désactive la personnalisation de VMware vSphere
- 9
- Les modules de cette section sont des services qui s'exécutent lorsque le service
cloud-init
démarre, au début du processus de démarrage. - 10
- Ces modules s'exécutent pendant la configuration de
cloud-init
, après le démarrage initial. - 11
- Ces modules sont exécutés dans la phase finale de
cloud-init
, après la fin de la configuration. - 12
- Spécifie les détails de l'utilisateur par défaut. Pour plus d'informations, reportez-vous à la section Utilisateurs et groupes.
- 13
- Spécifie la distribution
- 14
- Spécifie le répertoire principal qui contient les sous-répertoires spécifiques à
cloud-init
. Pour plus d'informations, reportez-vous à la section Disposition des répertoires. - 15
- Spécifie l'emplacement des modèles
- 16
- Le nom du service SSH
Ressources supplémentaires
2.5. Le répertoire cloud.cfg.d
cloud-init
agit en fonction des directives que vous fournissez et configurez. En général, ces directives sont incluses dans le répertoire cloud.cfg.d
.
Bien que vous puissiez configurer les modules en ajoutant des directives de données utilisateur dans le fichier cloud.cfg
, il est préférable de ne pas modifier cloud.cfg
. Ajoutez vos directives au répertoire /etc/cloud/cloud.cfg.d
. L'ajout de directives dans ce répertoire peut faciliter les modifications et les mises à jour futures.
Il existe plusieurs façons d'ajouter des directives. Vous pouvez inclure des directives dans un fichier nommé *.cfg
, qui comprend l'en-tête #cloud-config
. En règle générale, le répertoire contient plusieurs fichiers *cfg
. Il existe d'autres options pour ajouter des directives, par exemple, vous pouvez ajouter un script de données utilisateur. Pour plus d'informations, reportez-vous à la section Formats de données utilisateur.
Ressources supplémentaires
2.6. Le fichier 05_logging.cfg par défaut
Le fichier 05_logging.cfg
définit les informations de journalisation pour cloud-init
. Le répertoire /etc/cloud/cloud.cfg.d
comprend ce fichier, ainsi que d'autres directives cloud-init
que vous ajoutez.
cloud-init
utilise par défaut la configuration de journalisation dans 05_logging.cfg
. Le contenu par défaut du fichier pour Red Hat Enterprise Linux (RHEL) est le suivant :
## This yaml formatted config file handles setting ## logger information. The values that are necessary to be set ## are seen at the bottom. The top '_log' are only used to remove ## redundancy in a syslog and fallback-to-file case. ## ## The 'log_cfgs' entry defines a list of logger configs ## Each entry in the list is tried, and the first one that ## works is used. If a log_cfg list entry is an array, it will ## be joined with '\n'. _log: - &log_base | [loggers] keys=root,cloudinit [handlers] keys=consoleHandler,cloudLogHandler [formatters] keys=simpleFormatter,arg0Formatter [logger_root] level=DEBUG handlers=consoleHandler,cloudLogHandler [logger_cloudinit] level=DEBUG qualname=cloudinit handlers= propagate=1 [handler_consoleHandler] class=StreamHandler level=WARNING formatter=arg0Formatter args=(sys.stderr,) [formatter_arg0Formatter] format=%(asctime)s - %(filename)s[%(levelname)s]: %(message)s [formatter_simpleFormatter] format=[CLOUDINIT] %(filename)s[%(levelname)s]: %(message)s - &log_file | [handler_cloudLogHandler] class=FileHandler level=DEBUG formatter=arg0Formatter args=('/var/log/cloud-init.log',) - &log_syslog | [handler_cloudLogHandler] class=handlers.SysLogHandler level=DEBUG formatter=simpleFormatter args=("/dev/log", handlers.SysLogHandler.LOG_USER) log_cfgs: # Array entries in this list will be joined into a string # that defines the configuration. # # If you want logs to go to syslog, uncomment the following line. # - [ *log_base, *log_syslog ] # # The default behavior is to just log to a file. # This mechanism that does not depend on a system service to operate. - [ *log_base, *log_file ] # A file path can also be used. # - /etc/log.conf # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'}
Ressources supplémentaires
2.7. La structure du répertoire cloud-init /var/lib/cloud
Lorsque cloud-init
s'exécute pour la première fois, il crée un répertoire qui contient des informations sur votre instance et la configuration de cloud-init
.
Le répertoire peut inclure des répertoires optionnels, tels que /scripts/vendor
.
Voici un exemple de structure de répertoire pour cloud-init
.
/var/lib/cloud/ - data/ - instance-id - previous-instance-id - previous-datasource - previous-hostname - result.json - set-hostname - status.json - handlers/ - instance - boot-finished - cloud-config.txt - datasource - handlers/ - obj.pkl - scripts/ - sem/ - user-data.txt - user-data.txt.i - vendor-data.txt - vendor-data.txt.i - instances/ f111ee00-0a4a-4eea-9c17-3fa164739c55/ - boot-finished - cloud-config.txt - datasource - handlers/ - obj.pkl - scripts/ - sem/ - user-data.txt - user-data.txt.i - vendor-data.txt - vendor-data.txt.i - scripts/ - per-boot/ - per-instance/ - per-once/ - vendor/ - seed/ - sem/ - config_scripts_per_once.once
Ressources supplémentaires
Chapitre 3. Configuration de cloud-init
Ce chapitre présente des exemples des tâches de configuration les plus courantes pour cloud-init
.
Votre configuration cloud-init
peut exiger que vous ajoutiez des directives au fichier cloud.cfg
et au répertoire cloud.cfg.d
. Par ailleurs, votre source de données spécifique peut exiger que vous ajoutiez des directives à des fichiers, tels qu'un fichier de données utilisateur et un fichier de métadonnées. Une source de données peut exiger que vous téléchargiez vos directives sur un serveur HTTP. Vérifiez les exigences de votre source de données et ajoutez les directives en conséquence.
3.1. Création d'une machine virtuelle incluant cloud-init pour une source de données NoCloud
Pour créer une nouvelle machine virtuelle (VM) qui inclut cloud-init
, voir la procédure suivante. Dans cette procédure, vous créez un fichier meta-data
et user-data
.
-
Votre fichier
meta-data
contient les détails de l'instance. -
Votre fichier
user-data
contient des informations permettant de créer un utilisateur et de lui accorder un accès.
Ensuite, vous incluez ces fichiers dans une nouvelle image ISO, et vous attachez le fichier ISO à une nouvelle VM que vous créez à partir d'une image d'invité KVM. Dans ce scénario, la source de données est NoCloud.
Procédure
Créer un répertoire nommé
cloudinitiso
et s'y installer.$ mkdir cloudinitiso $ cd cloudinitiso
Créez un fichier nommé
meta-data
. Ajoutez les informations suivantes au fichier.instance-id: citest local-hostname: citest-1
Créez un fichier nommé
user-data
. Incluez les informations suivantes dans le fichier.#cloud-config password: cilogon chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...fhHQ== sample@redhat.com
NoteLa dernière ligne du fichier
user-data
fait référence à une clé publique SSH. Vous trouverez vos clés publiques SSH à l'adresse~/.ssh/id_rsa.pub
. Lorsque vous essayez cet exemple de procédure, modifiez la ligne pour inclure l'une de vos clés publiques.Utilisez la commande
genisoimage
pour créer une image ISO comprenantuser-data
etmeta-data
.# genisoimage -output ciiso.iso -volid cidata -joliet -rock user-data meta-data I: -input-charset not specified, using utf-8 (detected in locale settings) Total translation table size: 0 Total rockridge attributes bytes: 331 Total directory bytes: 0 Path table size(bytes): 10 Max brk space used 0 183 extents written (0 MB)
-
Téléchargez une image d'invité KVM depuis le portail client de Red Hat dans le répertoire
/var/lib/libvirt/images
. Créez une nouvelle VM à partir de l'image KVM Guest à l'aide de la commande
virt-install
. Joignez l'image ISO que vous avez créée en tant que pièce jointe à l'image.virt-install \ --memory 4096 \ --vcpus 4 \ --name mytestcivm \ --disk /var/lib/libvirt/images/rhel-8.1-x86_64-kvm.qcow2,device=disk,bus=virtio,format=qcow2 \ --disk /home/sample/cloudinitiso/ciiso.iso,device=cdrom \ --os-type Linux \ --os-variant rhel9.0 \ --virt-type kvm \ --graphics none \ --import
Connectez-vous à votre image en tant que
cloud-user
. Votre mot de passe estcilogon
.citest-1 login: cloud-user Password: [cloud-user@citest-1 ~]$
Vérification
Vérifier l'état de
cloud-init
pour s'assurer qu'il a terminé ses tâches.[cloud-user@citest-1 instance]$ cloud-init status status: done
cloud-init
crée la structure du répertoirecloud-init
sous/var/lib/cloud
lorsqu'il s'exécute, et met à jour ou modifie le contenu de certains répertoires en fonction des directives que vous avez spécifiées.Par exemple, vous pouvez confirmer que la source de données est
NoCloud
en vérifiant le fichier de la source de données.$ cd /var/lib/cloud/instance $ cat datasource DataSourceNoCloud: DataSourceNoCloud [seed=/dev/sr0][dsmode=net]
cloud-init
copie les données de l'utilisateur dans/var/lib/cloud/instance/user-data.txt
.$cat user-data.txt #cloud-config password: cilogon chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...fhHQ== sample@redhat.com
Il s'agit d'exemples. La présentation du répertoire
cloud-init
contient beaucoup plus d'informations.
Pour OpenStack, la section Création et gestion des instances comprend des informations sur la configuration d'une instance à l'aide de cloud-init
. Voir Création d'une instance personnalisée pour les procédures spécifiques.
Ressources supplémentaires
3.2. Expirer le mot de passe d'un utilisateur du nuage avec cloud-init
Vous pouvez forcer cloud-user
à changer le mot de passe cloud-user
lors de la première connexion. Effectuez la procédure suivante pour faire expirer un mot de passe.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Remplacer la ligne
chpasswd: {expire: False}
parchpasswd: {expire: True}
.#cloud-config password: mypassword chpasswd: {expire: True} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com
Cela permet d'expirer le mot de passe, car
password
etchpasswd
fonctionnent avec l'utilisateur par défaut, sauf indication contraire.NoteIl s'agit d'un paramètre global. Lorsque vous définissez
chpasswd
surTrue
, tous les utilisateurs que vous créez doivent modifier leur mot de passe lorsqu'ils se connectent.
3.3. Modifier un nom d'utilisateur par défaut avec cloud-init
Vous pouvez changer le nom d'utilisateur par défaut en quelque chose d'autre que cloud-user
.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Ajoutez la ligne
user: <username>
, en remplaçant <username> par le nouveau nom d'utilisateur par défaut.#cloud-config user: username password: mypassword chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com
3.4. Définir un mot de passe root avec cloud-init
Pour définir le mot de passe root, créez une liste d'utilisateurs.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Créez une liste d'utilisateurs dans la section
chpasswd
du fichier. Le format est présenté dans l'exemple suivant.NoteLes espaces blancs sont importants. N'incluez pas d'espace blanc avant ou après les deux points dans votre liste d'utilisateurs. Si vous incluez des espaces, le mot de passe est défini avec un espace.
#cloud-config ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...SDvz user1@yourdomain.com - ssh-rsa AAB...QTuo user2@yourdomain.com chpasswd: list: | root:myrootpassword cloud-user:mypassword expire: False
NoteSi vous utilisez cette méthode pour définir le mot de passe utilisateur, vous devez définir all passwords dans cette section.
3.5. Gérer les abonnements Red Hat avec cloud-init
Vous pouvez utiliser la directive rh_subscription
pour enregistrer votre système. Voici quelques exemples. Pour chaque abonnement, vous devez modifier les données de l'utilisateur.
Procédure
L'exemple suivant utilise les options auto-attach
et service-level
.
Sous
rh_subscription
, ajoutez vosusername
etpassword
, définissezauto-attach
commeTrue
, etservice-level
commeself-support
.rh_subscription: username: sample@redhat.com password: 'mypassword' auto-attach: True service-level: self-support
NoteL'option
service-level
nécessite l'utilisation de l'optionauto-attach
.
L'exemple suivant utilise les options activation-key
et org
.
Sous
rh_subscription
, ajoutez vos numérosactivation key
etorg
et définissezauto-attach
àTrue
.rh_subscription: activation-key: example_key org: 12345 auto-attach: True
L'exemple suivant ajoute un pool d'abonnement.
Sous
rh_subscription
, ajoutez votreusername
,password
et le numéro de la piscine.rh_subscription: username: sample@redhat.com password: 'password' add-pool: XYZ01234567
NoteCet échantillon est l'équivalent de la commande
subscription-manager attach --pool=XYZ01234567
.
L'exemple suivant définit un nom d'hôte de serveur dans le fichier /etc/rhsm/rhsm.conf
.
Sous
rh_subscription
, ajoutez vosusername
,password
,server-hostname
, et définissezauto-attach
àTrue
.rh_subscription: username: sample@redhat.com password: 'password' server-hostname: test.example.com auto-attach: True
3.6. Ajouter des utilisateurs et des options d'utilisateur avec cloud-init
Vous créez et décrivez les utilisateurs dans une section users
. Vous pouvez modifier la section pour ajouter des utilisateurs à la configuration initiale du système et définir des options supplémentaires pour les utilisateurs.
Si vous ajoutez la section users
, vous devez également définir les options utilisateur par défaut dans cette section.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Ajouter ou modifier la section
users
pour ajouter des utilisateurs.-
Si vous souhaitez que
cloud-user
soit l'utilisateur par défaut créé avec les autres utilisateurs que vous spécifiez, veillez à ajouterdefault
comme première entrée de la section. S'il ne s'agit pas de la première entrée,cloud-user
n'est pas créé. Par défaut, les utilisateurs sont étiquetés comme
unconfined_u
s'il n'y a pas de valeurselinux-user
.#cloud-config users: - default - name: user2 gecos: User N. Ame selinux-user: staff_u groups: users,wheel ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com chpasswd: list: | root:password cloud-user:mypassword user2:mypassword2 expire: False
Note-
L'exemple place l'utilisateur
user2
dans deux groupes,users
etwheel
.
-
L'exemple place l'utilisateur
-
Si vous souhaitez que
3.7. Exécution des commandes de démarrage avec cloud-init
Vous pouvez utiliser les sections runcmd
et bootcmd
pour exécuter des commandes pendant le démarrage et l'initialisation.
La section bootcmd
s'exécute au début du processus d'initialisation et s'exécute par défaut à chaque démarrage. La section runcmd
s'exécute vers la fin du processus et n'est exécutée que lors du premier démarrage et de l'initialisation.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Ajoutez les sections pour
bootcmd
etruncmd
; incluez les commandes que vous voulez quecloud-init
exécute.#cloud-config users: - default - name: user2 gecos: User N. Ame groups: users chpasswd: list: | root:password fedora:myfedpassword user2:mypassword2 expire: False bootcmd: - echo New MOTD >> /etc/motd runcmd: - echo New MOTD2 >> /etc/motd
3.8. Ajouter des sudoers supplémentaires avec cloud-init
Vous pouvez configurer un utilisateur en tant que sudoer en ajoutant une entrée sudo
et groups
à la section users
.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.-
Ajoutez une entrée
sudo
et spécifiez l'accès de l'utilisateur. Par exemple,sudo: ALL=(ALL) NOPASSWD:ALL
permet à un utilisateur d'avoir un accès illimité. Ajoutez une entrée
groups
et spécifiez les groupes qui incluent l'utilisateur.#cloud-config users: - default - name: user2 gecos: User D. Two sudo: ["ALL=(ALL) NOPASSWD:ALL"] groups: wheel,adm,systemd-journal ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA...vz user@domain.com chpasswd: list: | root:password cloud-user:mypassword user2:mypassword2 expire: False
3.9. Mise en place d'une configuration réseau statique avec cloud-init
Vous pouvez configurer votre réseau avec cloud-init
en ajoutant une section network-interfaces
à vos métadonnées.
Red Hat Enterprise Linux fournit son service de réseau par défaut via NetworkManager, qui est un démon dynamique de contrôle et de configuration du réseau qui maintient les périphériques et les connexions réseau en place et actifs lorsqu'ils sont disponibles.
Votre source de données peut fournir une configuration réseau. Pour plus d'informations, reportez-vous à la section Sources de configuration réseau de la documentation cloud-init
.
Si vous ne spécifiez aucune configuration réseau pour cloud-init
et que vous n'avez pas désactivé la configuration réseau, cloud-init
tente de déterminer si les périphériques connectés disposent d'une connexion. S'il trouve un périphérique connecté, il génère une configuration réseau qui émet une requête DHCP sur l'interface. Pour plus d'informations, reportez-vous à la section Configuration réseau de secours de la documentation de cloud-init
.
Procédure
L'exemple suivant ajoute une configuration réseau statique.
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Ajouter une section
network-interfaces
.network: version: 1 config: - type: physical name: eth0 subnets: - type: static address: 192.168.1.10/24 gateway: 192.168.1.254
Vous pouvez désactiver une configuration réseau en ajoutant les informations suivantes à vos métadonnées.
network config: disabled
Ressources supplémentaires
3.10. Configurer uniquement un utilisateur root avec cloud-init
Vous pouvez configurer vos données d'utilisateur de manière à ce qu'il y ait un utilisateur root et aucun autre utilisateur.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Créez une entrée pour l'utilisateur
root
dans la sectionusers
.L'exemple simple qui suit inclut une section
users
avec uniquement l'optionname
.users: - name: root chpasswd: list: | root:password expire: False
Optionnellement, configurez les clés SSH pour l'utilisateur root.
users: - name: root ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AA..vz user@domain.com
3.11. Configurer le stockage avec container-storage-setup dans cloud-init
Vous pouvez configurer le stockage en faisant référence à l'utilitaire container-storage-setup
dans le module write_files
.
Procédure
En fonction des exigences de votre source de données, ouvrez votre fichier de données utilisateur pour l'éditer ou ajoutez la directive suivante au répertoire
cloud.cfg.d
.NoteToutes les directives utilisateur incluent
#cloud-config
en tête de fichier afin quecloud-init
reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoirecloud.cfg.d
, nommez le fichier*.cfg
et incluez toujours#cloud-config
en tête du fichier.Ajoutez ou modifiez le module
write_files
pour inclure le chemin d'accès à l'utilitairecontainer-storage-setup
.L'exemple suivant définit la taille du volume logique racine à 6 Go au lieu des 3 Go par défaut.
write_files: - path: /etc/sysconfig/docker-storage-setup permissions: 0644 owner: root content: | ROOT_SIZE=6G
NoteAvant RHEL 7.4, container-storage-setup s'appelait docker-storage-setup. Si vous utilisez OverlayFS pour le stockage, à partir de RHEL 7.4, vous pouvez désormais utiliser ce type de système de fichiers avec SELinux en mode d'application.
3.12. Changer les paramètres linguistiques du système avec cloud-init
Vous pouvez configurer l'emplacement du système à l'aide du module locale
.
Procédure
-
Selon les exigences de votre source de données, ouvrez votre fichier de métadonnées pour l'éditer ou ajoutez la directive suivante au fichier
cloud.cfg
ou au répertoirecloud.cfg.d
. -
Ajoutez la directive
locale
, en spécifiant l'emplacement. L'exemple suivant définitlocale
comme étantja_JP
(Japon) avec l'encodageUTF-8
.
#cloud-config locale: ja_JP.UTF-8
Ressources supplémentaires
3.13. cloud-init et scripts shell
Vous pouvez ajouter des valeurs de liste ou des valeurs de chaîne à bootcmd
ou runcmd
. Vous pouvez également fournir un script shell dans vos données d'utilisateur.
-
Si vous utilisez une valeur de liste pour
bootcmd
ouruncmd
, chaque élément de la liste est exécuté à son tour à l'aide deexecve
. - Si vous utilisez une valeur de chaîne, la chaîne entière est exécutée comme un script shell.
-
Si vous souhaitez utiliser
cloud-init
pour exécuter un script shell, vous pouvez fournir un script shell (avec shebang (# !) ) au lieu de fournir àcloud-init
un fichier.yaml
.
Reportez-vous à la section Exécuter des commandes au premier démarrage pour savoir comment placer des scripts shell dans bootcmd
et runcmd
.
3.14. Empêcher cloud-init de mettre à jour les fichiers de configuration
Lorsque vous créez ou restaurez une instance à partir d'une image de sauvegarde, l'ID de l'instance change. La modification de l'ID de l'instance peut amener cloud-init
à mettre à jour les fichiers de configuration.
Effectuez la procédure suivante pour vous assurer que cloud-init
ne met pas à jour certains fichiers de configuration lorsque vous créez ou restaurez une sauvegarde.
Procédure
-
Ouvrez le fichier
/etc/cloud/cloud.cfg
pour le modifier. Commentez ou supprimez la configuration que vous ne voulez pas que
cloud-init
mette à jour lorsque vous restaurez votre instance.Par exemple, pour éviter de mettre à jour le fichier de clés SSH, supprimez
-ssh
de la sectioncloud_init_modules
.cloud_init_modules: - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups # - ssh
Vérification
Vous pouvez vérifier quels fichiers de configuration cloud-init
a mis à jour. Pour ce faire, examinez le fichier /var/log/cloud/cloud-init.log
. Les fichiers mis à jour sont enregistrés lors du démarrage de l'instance dans des messages commençant par Writing to
. Par exemple, les fichiers mis à jour sont enregistrés lors du démarrage de l'instance avec des messages commençant par :
2019-09-03 00:16:07,XXX - util.py[DEBUG]: Writing to /root/.ssh/authorized_keys - wb: [XXX] 554 bytes 2019-09-03 00:16:08,XXX - util.py[DEBUG]: Writing to /etc/ssh/sshd_config - wb: [XXX] 3905 bytes
3.15. Modifier une VM créée à partir d'une image d'invité KVM après l'exécution de cloud-init
Pour modifier votre configuration cloud-init
avant de réexécuter cloud-init
, suivez la procédure suivante. Lorsque vous lancez une VM dans laquelle le paquetage cloud-init
est installé et activé, cloud-init
s'exécute dans son état par défaut lors du démarrage initial de votre VM.
Procédure
- Connectez-vous à votre VM.
-
Ajouter ou modifier des directives, par exemple, modifier le fichier
cloud.cfg
dans le répertoire/etc/cloud
ou ajouter des directives dans le répertoire/etc/cloud/cloud.cfg.d
. Exécutez la commande
cloud-init clean
pour nettoyer les répertoires afin quecloud-init
puisse être réexécuté. Vous pouvez également exécuter les commandes suivantes en tant que root pour nettoyer la VM.`rm -Rf /var/lib/cloud/instances/*` `rm -Rf /var/lib/cloud/instance` `rm -Rf /var/lib/cloud/data/*`
NoteVous pouvez enregistrer l'image nettoyée en tant que nouvelle image et utiliser cette image pour plusieurs machines virtuelles. Les nouvelles machines virtuelles exécutent
cloud-init
en utilisant votre configurationcloud-init
mise à jour.Réexécutez
cloud-init
ou redémarrez la VM.cloud-init
s'exécute à nouveau, en appliquant les changements de configuration que vous avez apportés.
3.16. Modifier une VM pour une source de données spécifique après l'exécution de cloud-init
Pour modifier votre configuration cloud-init
avant de réexécuter cloud-init
, consultez la procédure suivante. Cette procédure utilise OpenStack comme exemple. Notez que les étapes exactes que vous devez effectuer varient en fonction de votre source de données.
Procédure
-
Créer et lancer une instance pour la plateforme OpenStack. Pour plus d'informations sur la création d'instances pour OpenStack, voir Créer une instance. Dans cet exemple, notre machine virtuelle inclut
cloud-init
, qui s'exécute au démarrage de la machine virtuelle. -
Ajouter ou modifier des directives. Par exemple, modifier le fichier
user-data.file
qui est stocké sur le serveur HTTP OpenStack. Nettoyez la machine virtuelle. Exécutez les commandes suivantes en tant que root.
`rm -rf /etc/resolv.conf /run/cloud-init` `userdel -rf cloud-user` `hostnamectl set-hostname localhost.localdomain` `rm /etc/NetworkManager/conf.d/99-cloud-init.conf`
NoteVous pouvez enregistrer l'image nettoyée en tant que nouvelle image et utiliser cette image pour plusieurs machines virtuelles. Les nouvelles machines virtuelles exécutent
cloud-init
en utilisant votre configurationcloud-init
mise à jour.Réexécutez
cloud-init
ou redémarrez la machine virtuelle.Cloud-init est réexécuté et met en œuvre les modifications de configuration que vous avez apportées.
3.17. Dépannage de cloud-init
Vous pouvez dépanner votre instance après l'exécution de cloud-init
en examinant votre configuration et vos fichiers journaux. Une fois le problème identifié, vous pouvez réexécuter cloud-init
sur votre instance.
Vous pouvez exécuter cloud-init
à partir de la ligne de commande en utilisant la commande cloud-init
. Pour afficher la syntaxe de la commande, ainsi qu'une description des arguments facultatifs et des sous-commandes, exécutez la commande cloud-init --help
. La syntaxe de base est la suivante.
cloud-init [-h] [--version] [--file FILES] [--debug] [--force] {init,modules,single,query,dhclient-hook,features,analyze,devel,collect-logs,clean,status}
La procédure suivante propose des idées pour identifier les problèmes avec cloud-init
et des exemples pour réexécuter le programme.
Procédure
Examinez les fichiers de configuration de
cloud-init
.-
Examinez le fichier de configuration
/etc/cloud/cloud.cfg
. Vérifiez quels modules sont inclus souscloud_init_modules
,cloud_config_modules
, etcloud_final_modules
. -
Vérifier les directives (fichiers
*.cfg
) dans le répertoire/etc/cloud/cloud.cfg.d
.
-
Examinez le fichier de configuration
Consultez les fichiers
/var/log/cloud-init.log
et/var/log/cloud-init-output.log
pour obtenir des détails sur un problème spécifique. Par exemple, si le problème est que la partition racine n'a pas été automatiquement étendue, consultez les messages du journalgrowpart
. Si le système de fichiers n'a pas été étendu, consultez les messages deresizefs
. Par exemple, si le système de fichiers n'a pas été étendu, vérifiez les messages du journal :# grep resizefs /var/log/cloud-init.log
Notegrowpart
ne prend pas en charge LVM. Si votre partition racine est basée sur LVM, la partition racine n'est pas automatiquement étendue au premier démarrage.Réexécuter
cloud-init
. Voici des exemples de scénarios. Exécutez les commandes en tant que root.Réexécuter
cloud-init
avec seulement les modules init./usr/bin/cloud-init -d init
Relancez
cloud-init
avec tous les modules de votre configuration./usr/bin/cloud-init -d modules
Supprimer le cache de
cloud-init
et forcercloud-init
à s'exécuter après le démarrage.rm -rf /var/lib/cloud/* && /usr/bin/cloud-init -d init
Exécutez les commandes suivantes pour nettoyer les répertoires et simuler une instance propre.
rm -Rf /var/lib/cloud/instances/* rm -Rf /var/lib/cloud/instance rm -Rf /var/lib/cloud/data/* reboot
Exécutez les commandes suivantes pour réexécuter
cloud-init
.cloud-init init --local cloud-init init
Ressources supplémentaires