Configurer et gérer cloud-init pour RHEL 9

Red Hat Enterprise Linux 9

Utiliser cloud-init pour automatiser l'initialisation des instances cloud

Red Hat Customer Content Services

Résumé

Vous pouvez créer efficacement plusieurs instances cloud de RHEL en utilisant le package cloud-init. Cela permet un déploiement cohérent et reproductible de RHEL sur une variété de plates-formes en nuage. Les chapitres suivants fournissent des informations sur :
  • 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

  1. 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.
  2. Utilisez votre curseur pour mettre en évidence la partie du texte que vous souhaitez commenter.
  3. Cliquez sur le bouton Add Feedback qui apparaît près du texte en surbrillance.
  4. Ajoutez vos commentaires et cliquez sur Submit.

Soumettre des commentaires via Bugzilla (compte requis)

  1. Connectez-vous au site Web de Bugzilla.
  2. Sélectionnez la version correcte dans le menu Version.
  3. Saisissez un titre descriptif dans le champ Summary.
  4. Saisissez votre suggestion d'amélioration dans le champ Description. Incluez des liens vers les parties pertinentes de la documentation.
  5. 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

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 de cloud-init, la phase de configuration et la phase finale. Dans le fichier cloud.cfg, les modules pour les trois phases sont répertoriés sous cloud_init_modules, cloud_config_modules et cloud_final_modules, respectivement.

  • Le répertoire cloud.cfg.d est l'endroit où vous pouvez ajouter des directives supplémentaires pour cloud-init. Lorsque vous ajoutez des directives au répertoire cloud.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 :

  1. L'étape du générateur cloud-init, par l'intermédiaire du service systemd, détermine si cloud-init doit être exécuté au démarrage.
  2. Au cours de l'étape locale, cloud-init trouve les sources de données locales et applique la configuration du réseau.
  3. Pendant la phase de réseau, cloud-init traite les données de l'utilisateur et exécute les modules énumérés sous cloud_init_modules dans votre fichier cloud.cfg. Vous pouvez activer, désactiver ou ajouter des modules à la section cloud_init_modules.
  4. Pendant la phase de configuration, cloud-init exécute les modules répertoriés sous cloud_config_modules dans votre fichier cloud.cfg. Vous pouvez activer, désactiver ou ajouter des modules à la section cloud_config_modules.
  5. Au cours de la dernière étape, cloud-init peut exécuter ce que vous avez inclus sous cloud_final_modules dans votre fichier cloud.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 section cloud_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 :

  1. La phase de réseau (cloud_init_modules)
  2. La phase de configuration (cloud_config_modules)
  3. 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.

Note

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.
Note

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épertoire cloud.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 documentation cloud-init pour plus d'informations sur les types de données utilisateur autorisés par cloud-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 fichierDescription

/etc/cloud/cloud.cfg

Le fichier cloud.cfg comprend la configuration de base de cloud-init et permet de savoir dans quelle phase chaque module s'exécute.

/etc/cloud/cloud.cfg.d

Le répertoire cloud.cfg.d est l'endroit où vous pouvez ajouter des directives supplémentaires pour cloud-init.

/var/lib/cloud

Lorsque cloud-init s'exécute, il crée une structure de répertoire sous /var/lib/cloud. La structure comprend des répertoires et des fichiers qui donnent des précisions sur la configuration de votre instance.

/usr/share/doc/cloud-init/examples

Le répertoire examples contient de nombreux exemples. Vous pouvez les utiliser pour modéliser vos propres directives.

/etc/cloud/templates

Ce répertoire comprend des modèles que vous pouvez activer dans cloud-init pour certains scénarios. Les modèles fournissent des indications pour l'activation.

/var/log/cloud-init.log

Le fichier cloud-init.log fournit des informations utiles pour le débogage.

/run/cloud-init

Le répertoire /run/cloud-init contient des informations enregistrées sur votre source de données et le script ds-identify.

2.2. Produits Red Hat qui utilisent cloud-init

Vous pouvez utiliser cloud-init avec les produits Red Hat suivants.

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-initDescriptionFré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 cloud-init est terminé

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 mcollective

par instance

migrateur

Déplacement des anciennes versions de cloud-init vers des versions plus récentes

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 resolv.conf

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 cloud-init

par instance

rsyslog

Configure la journalisation du système à distance en utilisant rsyslog

par instance

runcmd

Exécute des commandes arbitraires

par instance

sel_minion

Installe, configure et démarre salt minion

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 /etc/hosts

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 :

Note
  • 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 remplacer cloud.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 que cloud-init puisse enregistrer toutes les étapes dans son fichier journal. Pour plus d'informations sur cette option, consultez le fichier cloud-config.txt dans le répertoire usr/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

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.

Note

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.

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

  1. Créer un répertoire nommé cloudinitiso et s'y installer.

    $ mkdir cloudinitiso
    $ cd cloudinitiso
  2. Créez un fichier nommé meta-data. Ajoutez les informations suivantes au fichier.

    instance-id: citest
    local-hostname: citest-1
  3. 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
    Note

    La 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.

  4. Utilisez la commande genisoimage pour créer une image ISO comprenant user-data et meta-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)
  5. Téléchargez une image d'invité KVM depuis le portail client de Red Hat dans le répertoire /var/lib/libvirt/images.
  6. 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
  7. Connectez-vous à votre image en tant que cloud-user. Votre mot de passe est cilogon.

    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épertoire cloud-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.

Note

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.

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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. Remplacer la ligne chpasswd: {expire: False} par chpasswd: {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 et chpasswd fonctionnent avec l'utilisateur par défaut, sauf indication contraire.

    Note

    Il s'agit d'un paramètre global. Lorsque vous définissez chpasswd sur True, 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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. 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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. Créez une liste d'utilisateurs dans la section chpasswd du fichier. Le format est présenté dans l'exemple suivant.

    Note

    Les 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
    Note

    Si 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 vos username et password, définissez auto-attach comme True, et service-level comme self-support.

    rh_subscription:
      username: sample@redhat.com
      password: 'mypassword'
      auto-attach: True
      service-level: self-support
    Note

    L'option service-level nécessite l'utilisation de l'option auto-attach.

L'exemple suivant utilise les options activation-key et org.

  • Sous rh_subscription, ajoutez vos numéros activation key et org et définissez auto-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 votre username, password et le numéro de la piscine.

    rh_subscription:
      username: sample@redhat.com
      password: 'password'
      add-pool: XYZ01234567
    Note

    Cet é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 vos username, password, server-hostname, et définissez auto-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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. 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 à ajouter default 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 valeur selinux-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 et wheel.

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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. Ajoutez les sections pour bootcmd et runcmd; incluez les commandes que vous voulez que cloud-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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. 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é.
  3. 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.

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. 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
Note

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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. Créez une entrée pour l'utilisateur root dans la section users.

    L'exemple simple qui suit inclut une section users avec uniquement l'option name.

    users:
      - name: root
    chpasswd:
      list: |
        root:password
      expire: False
  3. 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

  1. 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.

    Note

    Toutes les directives utilisateur incluent #cloud-config en tête de fichier afin que cloud-init reconnaisse le fichier comme contenant des directives utilisateur. Lorsque vous incluez des directives dans le répertoire cloud.cfg.d, nommez le fichier *.cfg et incluez toujours #cloud-config en tête du fichier.

  2. Ajoutez ou modifiez le module write_files pour inclure le chemin d'accès à l'utilitaire container-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
    Note

    Avant 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

  1. 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épertoire cloud.cfg.d.
  2. Ajoutez la directive locale, en spécifiant l'emplacement. L'exemple suivant définit locale comme étant ja_JP (Japon) avec l'encodage UTF-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 ou runcmd, chaque élément de la liste est exécuté à son tour à l'aide de execve.
  • 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

  1. Ouvrez le fichier /etc/cloud/cloud.cfg pour le modifier.
  2. 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 section cloud_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

  1. Connectez-vous à votre VM.
  2. 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.
  3. Exécutez la commande cloud-init clean pour nettoyer les répertoires afin que cloud-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/*`
    Note

    Vous 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 configuration cloud-init mise à jour.

  4. 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

  1. 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.
  2. Ajouter ou modifier des directives. Par exemple, modifier le fichier user-data.file qui est stocké sur le serveur HTTP OpenStack.
  3. 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`
    Note

    Vous 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 configuration cloud-init mise à jour.

  4. 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

  1. Examinez les fichiers de configuration de cloud-init.

    1. Examinez le fichier de configuration /etc/cloud/cloud.cfg. Vérifiez quels modules sont inclus sous cloud_init_modules, cloud_config_modules, et cloud_final_modules.
    2. Vérifier les directives (fichiers*.cfg ) dans le répertoire /etc/cloud/cloud.cfg.d.
  2. 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 journal growpart. Si le système de fichiers n'a pas été étendu, consultez les messages de resizefs. 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
    Note

    growpart 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.

  3. 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 forcer cloud-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

Note légale

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.