cloud-init est un outil d'initialisation open source qui fournit des fonctionnalités d'initialisation pour les systèmes d'exploitation Linux, telles que l'initialisation des mots de passe, la définition des noms d'hôte et l'exécution de scripts personnalisés. Si une image personnalisée que vous créez sur site ne dispose pas de cloud-init et doit être migrée vers le cloud, vous devez installer manuellement cloud-init. Dans le cas contraire, les instances ECS créées à partir de l'image personnalisée ne peuvent pas effectuer automatiquement les tâches d'initialisation, telles que la définition des noms d'hôte et la configuration des réseaux, ce qui affecte l'efficacité du déploiement et de la configuration automatisés. Cette rubrique décrit comment installer cloud-init sur les systèmes d'exploitation Linux.
Pour plus d'informations sur cloud-init, consultez la documentation officielle de cloud-init.
Scénarios
Toutes les images publiques Alibaba Cloud sont livrées avec cloud-init installé par défaut. Pour garantir que les instances ECS créées à partir de vos images personnalisées sur site puissent initialiser automatiquement les configurations système, nous vous recommandons de suivre les suggestions ci-dessous et d'effectuer les opérations correspondantes en fonction de votre situation réelle.
-
Serveurs Linux à migrer vers le cloud sans cloud-init installé
Si votre serveur doit être migré vers Alibaba Cloud mais ne dispose pas de cloud-init, installez cloud-init avant la migration afin de garantir que les nouvelles instances ECS puissent effectuer automatiquement les tâches d'initialisation au démarrage.
RemarquePour les serveurs qui ne doivent pas être migrés vers le cloud, l'installation de cloud-init peut introduire une complexité ou une utilisation des ressources inutile. Décidez s'il convient d'installer cloud-init en fonction de votre environnement réel.
-
Serveurs Linux dont la version de cloud-init est antérieure à 0.7.9
Les nouvelles versions de cloud-init contiennent généralement davantage de fonctionnalités et de correctifs pour assurer la compatibilité avec les dernières fonctionnalités de la plateforme cloud. Si la version de cloud-init sur votre serveur est ancienne, nous vous recommandons de mettre à niveau vers une version plus récente afin de garantir une compatibilité et une sécurité optimales.
-
Instances ECS exécutées sur Alibaba Cloud sans cloud-init installé
Si votre instance ECS ne dispose pas de cloud-init, nous vous recommandons d'installer manuellement cloud-init à l'intérieur de l'instance afin de garantir qu'elle puisse compléter les configurations d'initialisation.
Étape 1 : Vérifier si vous devez installer ou mettre à niveau cloud-init
Connectez-vous au serveur source.
-
Exécutez les commandes suivantes pour vérifier si cloud-init est installé.
Série CentOS
rpm -qa | grep -i cloud-init pip list | grep -i cloud-initSérie Ubuntu
dpkg -l | grep -i cloud-init pip list | grep -i cloud-init-
Si aucune sortie n'est renvoyée ou si la version est antérieure à 0.7.9 : Vous devez Étape 2 : Installer cloud-init.
ImportantLa version 0.7.9 est une première édition communautaire de cloud-init et ne peut pas être utilisée pour initialiser les instances ECS. Vous devez effectuer une mise à niveau vers une version ultérieure.
Si la version est 18 ou ultérieure : Vous n'avez pas besoin d'installer cloud-init. Toutefois, cloud-init configure automatiquement le réseau lors de l'initialisation de l'instance. Si la configuration par défaut ne répond pas à vos exigences, vous pouvez désactiver la fonctionnalité d'initialisation du réseau. Pour plus d'informations, consultez Désactiver l'initialisation automatique du réseau par Alibaba Cloud.
-
Si la version est 19.1.21 : Nous vous recommandons de mettre à niveau vers Alibaba Cloud cloud-init 23.2.2. Par rapport à Alibaba Cloud cloud-init 19.1.21, Alibaba Cloud cloud-init 23.2.2 offre les améliorations et fonctionnalités suivantes :
Si la version de cloud-init d'une instance est 23.2.2, l'instance prend en charge l'accès aux métadonnées en mode de renforcement de la sécurité. Pour plus d'informations sur les métadonnées d'instance, consultez Métadonnées d'instance.
Autres améliorations de fonctionnalités, améliorations des performances, corrections de bugs et contributions de la communauté. Pour plus d'informations, consultez le fichier ChangeLog.
Autres cas : Vous n'avez pas besoin d'installer cloud-init. Vous pouvez directement effectuer les opérations décrites dans Étapes suivantes.
-
Pour éviter la perte de données causée par des opérations accidentelles lors de l'installation de cloud-init, nous vous recommandons de sauvegarder d'abord les données du serveur source, par exemple en créant des snapshots.
Étape 2 : Installer cloud-init
Alibaba Cloud cloud-init 23.2.2 : version recommandée. Cette version dépend de Python 3.6 ou ultérieur et utilise la source de données
Aliyun.Alibaba Cloud cloud-init 19.1.21 : cette version dépend de Python 3.6 ou ultérieur et utilise la source de données
Aliyun.-
Alibaba Cloud cloud-init 0.7.6a18 : cette version est requise pour certains systèmes d'exploitation plus anciens, tels que CentOS 6, Debian 9 et SUSE Linux Enterprise Server 12. Elle dépend de Python 2.7 et utilise la source de données
Aliyun.ImportantLa communauté Python a cessé le support technique de Python 2.7. Nous vous recommandons d'utiliser une version plus récente de cloud-init chaque fois que possible afin d'éviter les problèmes potentiels liés aux bibliothèques de dépendances.
cloud-init édition communautaire : l'édition communautaire de cloud-init est maintenue par la communauté. La dernière version d'Alibaba Cloud cloud-init est la 23.2.2. Si vous avez besoin d'une version plus récente de cloud-init, vous pouvez installer l'édition communautaire. Pour plus d'informations sur les versions, consultez le site officiel de cloud-init.
L'édition communautaire de cloud-init correspond à la version officielle du projet cloud-init, tandis qu'Alibaba Cloud cloud-init est optimisé pour la plateforme Alibaba Cloud et offre un meilleur support pour les services de cette plateforme. Par conséquent, nous vous recommandons d'utiliser Alibaba Cloud cloud-init. Choisissez l'édition de cloud-init à installer en fonction de vos besoins réels.
(Recommandé) Alibaba Cloud cloud-init 23.2.2
La dernière version d'Alibaba Cloud cloud-init est la 23.2.2. Cette version est distribuée sous forme de packages logiciels. Vous pouvez installer le package adapté à votre version de système d'exploitation ou procéder à l'installation depuis le package source.
Les exemples suivants montrent comment installer cloud-init en téléchargeant et en installant les packages binaires sur Debian 12 et CentOS Stream 9.
Debian 12
-
Exécutez la commande suivante pour télécharger le package cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb -
Exécutez la commande suivante pour installer le package.
sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb -
(Facultatif) Pour empêcher la mise à jour ou la mise à niveau du package vers une version open source plus récente, nous vous recommandons d'exécuter la commande suivante afin de figer la version du package cloud-init.
sudo apt-mark hold cloud-init -
Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.
cloud-init --version
CentOS Stream 9
-
Exécutez la commande suivante pour télécharger le package cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm -
Exécutez la commande suivante pour installer le package.
sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm -
(Facultatif) Pour empêcher la mise à jour ou la mise à niveau du package vers une version open source plus récente, nous vous recommandons d'exécuter la commande suivante afin de figer la version du package cloud-init.
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf' -
Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.
cloud-init --version
Par défaut, Alibaba Cloud cloud-init 23.2.2 ne mappe plus le nom d'hôte à private-ipv4 dans le fichier /etc/hosts. Si votre activité nécessite cette configuration, configurez-la manuellement. Les systèmes d'exploitation plus récents implémentent la connectivité du nom d'hôte via le composant nss-myhostname, fourni par le package systemd-libs (série Red Hat) ou le package libnss-myhostname (série Debian) et activé via le fichier de configuration /etc/nsswitch.conf. Pour plus d'informations, consultez le manuel nss-myhostname.
Alibaba Cloud cloud-init 19.1.21
-
Assurez-vous que la bibliothèque de dépendances Python PIP est installée sur le serveur source.
Les exemples suivants présentent les commandes utilisées pour installer la bibliothèque de dépendances python3-pip sur certaines distributions Linux.
CentOS/Red Hat Enterprise Linux
sudo yum -y install python3-pipUbuntu/Debian
sudo apt-get -y install python3-pipOpenSUSE/SUSE
sudo zypper -n install python3-pip -
Exécutez la commande suivante pour télécharger Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz -
Exécutez la commande suivante pour décompresser le package d'installation de cloud-init dans le répertoire actuel.
tar -zxvf cloud-init-19.1.21.tgz -
Accédez au répertoire cloud-init et installez les bibliothèques de dépendances.
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt -
Accédez au répertoire tools de cloud-init.
cd ./tools -
Exécutez la commande suivante pour lancer le script deploy.sh qui installe cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Le tableau suivant décrit les paramètres et les valeurs d'exemple du script deploy.sh :
Paramètre
Description
Exemple
<issue>
Type de plateforme du système d'exploitation. Valeurs valides : centos | redhat |rhel | debian | ubuntu | opensuse | sles. Les valeurs sont sensibles à la casse. sles indique SUSE/SLES.
RemarqueSi le système d'exploitation est CentOS Stream, sélectionnez centos comme type de plateforme du système d'exploitation.
centos
<major_version>
Numéro de version majeure de la plateforme du système d'exploitation.
RemarqueUbuntu 14 ne prend pas en charge Alibaba Cloud cloud-init 19.1.21.
Le numéro de version majeure de CentOS 7.6 est 7
Par exemple, si votre système d'exploitation est CentOS 7, exécutez la commande
sudo bash ./deploy.sh centos 7. -
Vérifiez si cloud-init est installé.
Si
"description": "success"est renvoyé, l'installation a réussi.{ "status_code": 0, "description": "success" } -
Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.
cloud-init --version
Les scripts shell d'exemple ci-dessous illustrent la procédure d'installation de cloud-init Alibaba Cloud sur différentes distributions Linux. Adaptez ces scripts à votre système d'exploitation avant de lancer l'installation.
CentOS 7/8
# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"
Red Hat Enterprise Linux 7/8
# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
yum -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"
Ubuntu 16/18/20
# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get install python36 python3-pip -y
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"
Debian 9/10
# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
apt-get -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"
SUSE 12/15
# Check and install python3-pip
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"
OpenSUSE 15
# Check and install python3-pip
if ! python3 -c 'import setuptools'>& /dev/null; then
zypper -n install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh opensuse "$issue_major"
Alibaba Cloud cloud-init 0.7.6a18
Les images publiques Alibaba Cloud pour CentOS 6, Debian 9 et SUSE Linux Enterprise Server 12 intègrent par défaut cloud-init-0.7.6a18. Pour effectuer des tests, commencez par sauvegarder le fichier de configuration en exécutant la commande sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak.
-
Vérifiez que le système d'exploitation est bien CentOS 6, Debian 9 ou SUSE Linux Enterprise Server 12 en exécutant la commande suivante :
cat /etc/issue -
Assurez-vous que la bibliothèque de dépendances Python PIP est installée sur le serveur source.
Les exemples ci-dessous présentent les commandes d'installation de la bibliothèque de dépendances Python2-pip.
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pip -
Téléchargez et décompressez Alibaba Cloud cloud-init 0.7.6a18 en exécutant les commandes suivantes :
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz tar -zxvf cloud-init-0.7.6a18.tgz -
Accédez au répertoire tools de cloud-init.
cd cloud-init-0.7.6a18/tools/ -
Installez cloud-init en exécutant la commande suivante :
sudo bash ./deploy.sh <issue> <major_version>Par exemple, pour un système d'exploitation CentOS 6, exécutez la commande
sudo bash ./deploy.sh centos 6.Le tableau suivant détaille les paramètres et fournit des exemples de valeurs pour le script deploy.sh :
Paramètre
Description
Exemple
<issue>
Type de plateforme du système d'exploitation. Valeurs possibles : centos
debian
sles. Les valeurs sont sensibles à la casse. sles correspond à SUSE/SLES.
centos
<major_version>
Numéro de version majeure de la plateforme du système d'exploitation.
La version majeure de CentOS 6.5 est 6
-
Vérifiez que la version de cloud-init correspond à vos attentes en exécutant la commande suivante :
cloud-init --version
Community edition cloud-init
-
Assurez-vous que Git, Python et la bibliothèque de dépendances Python PIP sont installés sur le serveur source.
Les exemples ci-dessous présentent les commandes d'installation de Git, Python 3.6 et de la bibliothèque de dépendances Python3-pip sur certaines distributions Linux.
CentOS/Red Hat Enterprise Linux
sudo yum -y install git python36 python3-pipUbuntu/Debian
sudo apt-get -y install git python3 python3-pipOpenSUSE/SUSE
sudo zypper -n install git python36 python3-pip -
Téléchargez le package source cloud-init via Git en exécutant la commande suivante :
git clone https://git.launchpad.net/cloud-init -
Accédez au répertoire cloud-init.
cd ./cloud-init -
Installez toutes les bibliothèques de dépendances en exécutant la commande suivante :
sudo pip3 install -r ./requirements.txt -
Installez cloud-init en exécutant la commande suivante :
python3 setup.py install -
Modifiez le fichier de configuration cloud.cfg.
-
Ouvrez le fichier de configuration.
sudo vi /etc/cloud/cloud.cfgRepérez la section
cloud_init_modules:dans le fichier.# The top level settings are used as module # and system configuration. # A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below users: - default # If this is set, 'root' will not be able to ssh in and they # will get a message to login instead as the default $user disable_root: true # This will cause the set+update hostname module to not operate (if true) preserve_hostname: false # Example datasource config # datasource: # Ec2: # metadata_urls: [ 'blah.com' ] # timeout: 5 # (defaults to 50 seconds) # max_wait: 10 # (defaults to 120 seconds) # The modules that run in the 'init' stage cloud_init_modules: -
Remplacez les configurations situées avant
cloud_init_modules:par le contenu suivant :# Example datasource config # The top level settings are used as module # and system configuration. # A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below users: - default user: name: root lock_passwd: False # If this is set, 'root' will not be able to ssh in and they # will get a message to login instead as the above $user disable_root: false # This will cause the set+update hostname module to not operate (if true) preserve_hostname: false syslog_fix_perms: root:root datasource_list: [ AliYun ] # Example datasource config datasource: AliYun: support_xen: false timeout: 5 # (defaults to 50 seconds) max_wait: 60 # (defaults to 120 seconds) # metadata_urls: [ 'blah.com' ] # The modules that run in the 'init' stage cloud_init_modules:
-
-
Vérifiez que la version de cloud-init correspond à vos attentes en exécutant la commande suivante :
cloud-init --version
(Facultatif) Étape 3 : Configurer cloud-init
Désactiver l'initialisation automatique du réseau par Alibaba Cloud
À partir de la version 18, cloud-init initialise automatiquement la configuration réseau. La configuration réseau générée automatiquement est BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Si la configuration réseau par défaut ne répond pas à vos besoins métier, personnalisez-la en modifiant le fichier de configuration cloud-init selon la procédure suivante.
-
Ouvrez le fichier de configuration cloud-init par défaut en exécutant la commande suivante, puis appuyez sur
ipour passer en mode insertion.sudo vim /etc/cloud/cloud.cfg -
Ajoutez la configuration disabled avant
Example datasource configafin de désactiver la fonctionnalité de configuration réseau automatique de cloud-init.network: config: disabled# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true network: config: disabled # If you use datasource_list array, keep array items in a single line. # If you use multi line array, ds-identify script won't read array items. datasource_list: [ AliYun ] # Example datasource config datasource: AliYun: timeout: 5 max_wait: 300Une fois cette configuration ajoutée, cloud-init ne gère plus les fichiers de configuration réseau situés dans le répertoire /etc/sysconfig/network-scripts/, tels que
ifcfg-eth0. Vous devez gérer ces fichiers manuellement. Appuyez sur la touche
Esc, saisissez:wq, puis appuyez sur la toucheEnterpour enregistrer et fermer le fichier de configuration.Personnalisez les configurations réseau dans le répertoire /etc/sysconfig/network-scripts/ selon vos besoins (adresse IP, masque de sous-réseau, passerelle, etc.).
Désactiver la configuration automatique du nom d'hôte par Alibaba Cloud
Par défaut, cloud-init définit automatiquement le nom d'hôte et met à jour le fichier /etc/hostname au démarrage de l'instance. Pour empêcher toute modification du nom d'hôte, modifiez le fichier de configuration cloud-init en suivant la procédure ci-dessous.
-
Ouvrez le fichier de configuration cloud-init par défaut en exécutant la commande suivante, puis appuyez sur
ipour passer en mode édition.sudo vim /etc/cloud/cloud.cfg -
Remplacez
preserve_hostname: falseparpreserve_hostname: truedans le fichier de configuration.# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true Appuyez sur la touche
Esc, saisissez:wq, puis appuyez sur la toucheEnterpour enregistrer et fermer le fichier de configuration.
Étapes suivantes
Pour migrer des serveurs Linux vers le cloud, utilisez Server Migration Center (SMC). Pour plus d'informations, consultez la rubrique Migrer des serveurs vers ECS.
-
Pour les instances ECS exécutant des images Linux personnalisées sur Alibaba Cloud, redémarrez le système afin de vérifier les résultats. Si le système configure automatiquement le nom d'hôte, le réseau et les paramètres NTP, cela signifie que cloud-init est installé. Par exemple, exécutez les commandes suivantes pour afficher le fichier de configuration réseau :
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0La sortie suivante indique que le système a automatiquement configuré les paramètres réseau (protocole DHCP, périphérique réseau, type de périphérique, etc.) via cloud-init.
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no