cloud-init es una herramienta de inicialización de código abierto que proporciona capacidades de inicialización para los sistemas operativos Linux. Por ejemplo, permite inicializar contraseñas, establecer nombres de host y ejecutar un script personalizado. Si crea una imagen personalizada en sus instalaciones locales sin cloud-init instalado y necesita migrarla a la nube, debe instalar cloud-init manualmente. De lo contrario, las instancias ECS creadas a partir de esa imagen no podrán ejecutar automáticamente tareas de inicialización, como establecer el nombre de host o configurar la red. Esto afecta la eficiencia del despliegue y la configuración automatizados. En este tema se describe cómo instalar cloud-init en sistemas operativos Linux.
Para obtener más información sobre cloud-init, consulte la documentación oficial de cloud-init.
Escenarios
Todas las imágenes públicas de Alibaba Cloud incluyen cloud-init instalado de forma predeterminada. Para garantizar que las instancias ECS creadas a partir de sus imágenes personalizadas locales puedan inicializar automáticamente las configuraciones del sistema, le recomendamos seguir las sugerencias a continuación y aplicar las operaciones correspondientes según su situación real.
-
Servidores Linux que se migrarán a la nube sin cloud-init instalado
Si tiene programado migrar su servidor a Alibaba Cloud pero no cuenta con cloud-init, instálelo antes de la migración. Así garantiza que las nuevas instancias ECS ejecuten automáticamente las tareas de inicialización durante el arranque.
NotaEn los servidores que no se migrarán a la nube, instalar cloud-init podría generar una complejidad o un consumo de recursos innecesarios. Decida si instala cloud-init según las características de su entorno.
-
Servidores Linux con una versión de cloud-init anterior a la 0.7.9
Las versiones recientes de cloud-init suelen incluir más funciones y correcciones para garantizar la compatibilidad con las últimas funciones de la plataforma en la nube. Si la versión de cloud-init en su servidor es antigua, le recomendamos actualizarla a una versión posterior para asegurar una compatibilidad y seguridad óptimas.
-
Instancias ECS en ejecución en Alibaba Cloud sin cloud-init instalado
Si su instancia ECS no cuenta con cloud-init, le recomendamos instalarlo manualmente dentro de la instancia. De esta manera, la instancia podrá completar las configuraciones de inicialización.
Paso 1: Comprobar si necesita instalar o actualizar cloud-init
Inicie sesión en el servidor de origen.
-
Ejecute los siguientes comandos para comprobar si cloud-init está instalado.
Serie CentOS
rpm -qa | grep -i cloud-init pip list | grep -i cloud-initSerie Ubuntu
dpkg -l | grep -i cloud-init pip list | grep -i cloud-init-
Si no se devuelve ninguna salida o la versión es anterior a la 0.7.9: Debe Step 2: Install cloud-init.
ImportanteLa versión 0.7.9 es una edición comunitaria temprana de cloud-init y no sirve para inicializar instancias ECS. Debe actualizar a una versión posterior.
Si la versión es la 18 o posterior: No necesita instalar cloud-init. Sin embargo, cloud-init configura automáticamente la red durante la inicialización de la instancia. Si la configuración predeterminada no cumple con sus requisitos, puede deshabilitar la función de inicialización de red. Para obtener más información, consulte Disable automatic network initialization by Alibaba Cloud.
-
Si la versión es la 19.1.21: Le recomendamos actualizar a Alibaba Cloud cloud-init 23.2.2. En comparación con Alibaba Cloud cloud-init 19.1.21, la versión 23.2.2 ofrece las siguientes mejoras y funciones:
Si la versión de cloud-init de una instancia es la 23.2.2, la instancia admite el acceso a metadatos en modo de refuerzo de seguridad. Para obtener más información sobre los metadatos de la instancia, consulte Instance metadata.
Otras mejoras de funciones y rendimiento, correcciones de bugs y contribuciones de la comunidad. Para obtener más información, consulte el archivo ChangeLog.
Otros casos: No necesita instalar cloud-init. Puede ejecutar directamente las operaciones descritas en What to do next.
-
Para evitar la pérdida de datos por operaciones accidentales durante la instalación de cloud-init, le recomendamos respaldar primero los datos del servidor de origen. Por ejemplo, puede crear instantáneas.
Paso 2: Instalar cloud-init
Alibaba Cloud cloud-init 23.2.2: versión recomendada. Depende de Python 3.6 o posterior y utiliza el origen de datos
Aliyun.Alibaba Cloud cloud-init 19.1.21: depende de Python 3.6 o posterior y utiliza el origen de datos
Aliyun.-
Alibaba Cloud cloud-init 0.7.6a18: necesaria para ciertos sistemas operativos antiguos, como CentOS 6, Debian 9 y SUSE Linux Enterprise Server 12. Depende de Python 2.7 y utiliza el origen de datos
Aliyun.ImportanteLa comunidad de Python dejó de dar soporte técnico a Python 2.7. Le recomendamos usar una versión más reciente de cloud-init siempre que sea posible para evitar posibles problemas con las bibliotecas de dependencias.
Edición comunitaria de cloud-init: la mantiene la propia comunidad. La versión más reciente de Alibaba Cloud cloud-init es la 23.2.2. Si requiere una versión posterior de cloud-init, puede instalar la edición comunitaria. Para obtener más información sobre las versiones, consulte el sitio web oficial de cloud-init.
La edición comunitaria es la versión oficial del proyecto cloud-init, mientras que Alibaba Cloud cloud-init está optimizada para la plataforma de Alibaba Cloud y ofrece mejor compatibilidad con sus servicios. Por ello, le recomendamos utilizar Alibaba Cloud cloud-init. Seleccione la edición de cloud-init que va a instalar según sus necesidades reales.
(Recomendado) Alibaba Cloud cloud-init 23.2.2
La versión más reciente de Alibaba Cloud cloud-init es la 23.2.2. Esta versión se distribuye como paquetes de software. Puede instalar el paquete adecuado para la versión de su sistema operativo o compilarlo desde el paquete de código fuente.
A continuación se muestra cómo instalar cloud-init mediante la descarga e instalación de los paquetes binarios en Debian 12 y CentOS Stream 9.
Debian 12
-
Ejecute el siguiente comando para descargar el paquete de cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb -
Ejecute el siguiente comando para instalar el paquete.
sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb -
(Opcional) Para evitar que el paquete se actualice a una versión de código abierto posterior, le recomendamos ejecutar el siguiente comando para fijar la versión del paquete de cloud-init.
sudo apt-mark hold cloud-init -
Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con lo que espera.
cloud-init --version
CentOS Stream 9
-
Ejecute el siguiente comando para descargar el paquete de cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm -
Ejecute el siguiente comando para instalar el paquete.
sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm -
(Opcional) Para evitar que el paquete se actualice a una versión de código abierto posterior, le recomendamos ejecutar el siguiente comando para fijar la versión del paquete de cloud-init.
sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf' -
Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con lo que espera.
cloud-init --version
De forma predeterminada, Alibaba Cloud cloud-init 23.2.2 ya no asigna el nombre de host a private-ipv4 en el archivo /etc/hosts. Si su aplicación requiere esta configuración, configúrela manualmente. Los sistemas operativos más recientes gestionan la conectividad del nombre de host mediante el componente nss-myhostname. Este componente lo proporciona el paquete systemd-libs (en la serie Red Hat) o el paquete libnss-myhostname (en la serie Debian), y se habilita a través del archivo de configuración /etc/nsswitch.conf. Para obtener más información, consulte el manual de nss-myhostname.
Alibaba Cloud cloud-init 19.1.21
-
Asegúrese de que la biblioteca de dependencias PIP de Python esté instalada en el servidor de origen.
A continuación se muestran los comandos para instalar la biblioteca de dependencias Python3-pip en algunas distribuciones de 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 -
Ejecute el siguiente comando para descargar Alibaba Cloud cloud-init.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz -
Ejecute el siguiente comando para descomprimir el paquete de instalación de cloud-init en el directorio actual.
tar -zxvf cloud-init-19.1.21.tgz -
Acceda al directorio cloud-init e instale las bibliotecas de dependencias.
cd ./cloud-init-19.1.21 pip3 install -r ./requirements.txt -
Acceda al directorio tools de cloud-init.
cd ./tools -
Ejecute el siguiente comando para ejecutar el script deploy.sh que instala cloud-init.
sudo bash ./deploy.sh <issue> <major_version>En la siguiente tabla se describen los parámetros y algunos valores de ejemplo del script deploy.sh:
Parámetro
Descripción
Ejemplo
<issue>
El tipo de plataforma del sistema operativo. Valores válidos: centos | redhat |rhel | debian | ubuntu | opensuse | sles. Estos valores distinguen entre mayúsculas y minúsculas. sles indica SUSE/SLES.
NotaSi el sistema operativo es CentOS Stream, seleccione centos como tipo de plataforma del sistema operativo.
centos
<major_version>
El número de versión principal de la plataforma del sistema operativo.
NotaUbuntu 14 no es compatible con Alibaba Cloud cloud-init 19.1.21.
El número de versión principal de CentOS 7.6 es 7
Por ejemplo, si su sistema operativo es CentOS 7, ejecute el comando
sudo bash ./deploy.sh centos 7. -
Compruebe si cloud-init se instaló correctamente.
Si se devuelve
"description": "success", la instalación fue exitosa.{ "status_code": 0, "description": "success" } -
Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con lo que espera.
cloud-init --version
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
Las imágenes públicas de Alibaba Cloud CentOS 6, Debian 9 y SUSE Linux Enterprise Server 12 incluyen cloud-init-0.7.6a18 instalado de forma predeterminada. Si necesita ejecutar pruebas, ejecute primero el comando sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak para respaldar el archivo de configuración.
-
Ejecute el siguiente comando para comprobar que la versión del sistema operativo sea CentOS 6, Debian 9 o SUSE Linux Enterprise Server 12.
cat /etc/issue -
Asegúrese de que la biblioteca de dependencias Python PIP esté instalada en el servidor de origen.
Los siguientes ejemplos muestran los comandos para instalar la biblioteca de dependencias Python2-pip.
CentOS 6/SUSE Linux Enterprise Server 12
sudo yum -y install python2-pipDebian 9
sudo apt-get -y install python2-pip -
Ejecute los siguientes comandos para descargar y descomprimir Alibaba Cloud cloud-init 0.7.6a18.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz tar -zxvf cloud-init-0.7.6a18.tgz -
Acceda al directorio tools de cloud-init.
cd cloud-init-0.7.6a18/tools/ -
Ejecute el siguiente comando para instalar cloud-init.
sudo bash ./deploy.sh <issue> <major_version>Por ejemplo, si su sistema operativo es CentOS 6, ejecute el comando
sudo bash ./deploy.sh centos 6.La siguiente tabla describe los parámetros y valores de ejemplo del script deploy.sh:
Parámetro
Descripción
Ejemplo
<issue>
Tipo de plataforma del sistema operativo. Valores válidos: centos
debian
sles. Los valores distinguen entre mayúsculas y minúsculas. sles indica SUSE/SLES.
centos
<major_version>
Número de versión principal de la plataforma del sistema operativo.
El número de versión principal de CentOS 6.5 es 6
-
Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con sus expectativas.
cloud-init --version
Community edition cloud-init
-
Asegúrese de que Git, Python y la biblioteca de dependencias Python PIP estén instalados en el servidor de origen.
Los siguientes ejemplos muestran los comandos para instalar Git, Python 3.6 y la biblioteca de dependencias Python3-pip en algunas distribuciones de 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 -
Ejecute el siguiente comando para descargar el paquete de código fuente de cloud-init mediante Git.
git clone https://git.launchpad.net/cloud-init -
Acceda al directorio de cloud-init.
cd ./cloud-init -
Ejecute el siguiente comando para instalar todas las bibliotecas de dependencias.
sudo pip3 install -r ./requirements.txt -
Ejecute el siguiente comando para instalar cloud-init.
python3 setup.py install -
Modifique el archivo de configuración cloud.cfg.
-
Abra el archivo de configuración.
sudo vi /etc/cloud/cloud.cfgLocalice la sección
cloud_init_modules:en el archivo.# 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: -
Cambie las configuraciones anteriores a
cloud_init_modules:por el siguiente contenido.# 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:
-
-
Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con sus expectativas.
cloud-init --version
(Opcional) Paso 3: Configurar cloud-init
Deshabilitar la inicialización automática de red de Alibaba Cloud
Si su versión de cloud-init es la 18 o posterior, cloud-init inicializa automáticamente la configuración de red. La red configurada de forma automática es BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Si la configuración de red predeterminada no satisface sus requisitos de negocio, modifique el archivo de configuración de cloud-init con los siguientes pasos para personalizarla.
-
Ejecute el siguiente comando para abrir el archivo de configuración predeterminado de cloud-init y presione
ipara entrar al modo de inserción.sudo vim /etc/cloud/cloud.cfg -
Agregue la configuración disabled antes de
Example datasource configpara deshabilitar la función de configuración automática de red 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: 300Después de agregar esta configuración, cloud-init deja de gestionar los archivos de configuración de red del directorio /etc/sysconfig/network-scripts/, como
ifcfg-eth0. Usted debe gestionar estos archivos por su cuenta. Presione la tecla
Esc, introduzca:wqy luego presione la teclaEnterpara guardar y cerrar el archivo de configuración.Personalice las configuraciones de red en el directorio /etc/sysconfig/network-scripts/ según sus necesidades, como la dirección IP, la máscara de subred y la puerta de enlace.
Deshabilitar la configuración automática del nombre de host de Alibaba Cloud
De forma predeterminada, cloud-init establece automáticamente el nombre de host y actualiza el archivo /etc/hostname cuando se inicia la instancia. Si no desea que se modifique el nombre de host, modifique el archivo de configuración de cloud-init con los siguientes pasos.
-
Ejecute el siguiente comando para abrir el archivo de configuración predeterminado de cloud-init y presione
ipara entrar al modo de edición.sudo vim /etc/cloud/cloud.cfg -
Cambie
preserve_hostname: falseen el archivo de configuración porpreserve_hostname: true.# This will cause the set+update hostname module to not operate (if true) preserve_hostname: true Presione la tecla
Esc, introduzca:wqy luego presione la teclaEnterpara guardar y cerrar el archivo de configuración.
Qué hacer a continuación
Para los servidores Linux que migrará a la nube, utilice Server Migration Center (SMC). Para obtener más información, consulte Migrate servers to ECS.
-
En las instancias ECS que ejecutan imágenes personalizadas de Linux en Alibaba Cloud, reinicie el sistema para comprobar los resultados. Si el sistema configura automáticamente el nombre de host, la red y los ajustes de NTP, significa que cloud-init está instalado correctamente. Por ejemplo, ejecute los siguientes comandos para consultar el archivo de configuración de red:
sudo reboot cat /etc/sysconfig/network-scripts/ifcfg-eth0El siguiente resultado indica que el sistema configuró automáticamente los ajustes de red mediante cloud-init, como el protocolo DHCP, el dispositivo de red y el tipo de dispositivo.
BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no