Todos los productos
Search
Centro de documentos

Elastic Compute Service:Install cloud-init

Última actualización: Sep 07, 2026

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.

    Nota

    En 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

  1. Inicie sesión en el servidor de origen.

  2. Ejecute los siguientes comandos para comprobar si cloud-init está instalado.

    Serie CentOS

    rpm -qa | grep -i cloud-init 
    pip list | grep -i cloud-init

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

      Importante

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

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

    Importante

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

En la siguiente tabla se muestran las URL de descarga de los paquetes de software para cada sistema operativo:

Tipo de sistema operativo

Versión del sistema operativo

Paquete binario

Suma de comprobación MD5SUM

Paquete de código fuente

Debian

12

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-23.2.2-8.tar.gz

11

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb.md5sum

CentOS Stream

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Fedora

42

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora42/cloud-init-23.2.2-8.fc42.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora42/cloud-init-23.2.2-8.fc42.noarch.rpm.md5sum

41

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora41/cloud-init-23.2.2-8.fc41.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora41/cloud-init-23.2.2-8.fc41.noarch.rpm.md5sum

40

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm.md5sum

39

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm.md5sum

38

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm.md5sum

AlmaLinux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Rocky Linux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Ubuntu

24

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb.md5sum

22

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb.md5sum

20

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb.md5sum

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

  1. 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
  2. Ejecute el siguiente comando para instalar el paquete.

    sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb
  3. (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
  4. Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con lo que espera.

    cloud-init --version

CentOS Stream 9

  1. 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
  2. Ejecute el siguiente comando para instalar el paquete.

    sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm
  3. (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'
  4. Ejecute el siguiente comando para comprobar si la versión de cloud-init cumple con lo que espera.

    cloud-init --version
Nota

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

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

    Ubuntu/Debian

    sudo apt-get -y install python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install python3-pip
  2. 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
  3. 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
  4. Acceda al directorio cloud-init e instale las bibliotecas de dependencias.

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. Acceda al directorio tools de cloud-init.

    cd ./tools
  6. 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.

    Nota

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

    Nota

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

  7. Compruebe si cloud-init se instaló correctamente.

    Si se devuelve "description": "success", la instalación fue exitosa.

    {
      "status_code": 0,
      "description": "success"
    }
  8. 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

Nota

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.

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

    Debian 9

    sudo apt-get -y install python2-pip
  3. 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
  4. Acceda al directorio tools de cloud-init.

    cd cloud-init-0.7.6a18/tools/
  5. 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

  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

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

    Ubuntu/Debian

    sudo apt-get -y install git python3 python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install git python36 python3-pip
  2. 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
  3. Acceda al directorio de cloud-init.

    cd ./cloud-init
  4. Ejecute el siguiente comando para instalar todas las bibliotecas de dependencias.

    sudo pip3 install -r ./requirements.txt
  5. Ejecute el siguiente comando para instalar cloud-init.

    python3 setup.py install
  6. Modifique el archivo de configuración cloud.cfg.

    1. Abra el archivo de configuración.

      sudo vi /etc/cloud/cloud.cfg

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

  1. Ejecute el siguiente comando para abrir el archivo de configuración predeterminado de cloud-init y presione i para entrar al modo de inserción.

    sudo vim /etc/cloud/cloud.cfg
  2. Agregue la configuración disabled antes de Example datasource config para 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: 300

    Despué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.

  3. Presione la tecla Esc, introduzca :wq y luego presione la tecla Enter para guardar y cerrar el archivo de configuración.

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

  1. Ejecute el siguiente comando para abrir el archivo de configuración predeterminado de cloud-init y presione i para entrar al modo de edición.

    sudo vim /etc/cloud/cloud.cfg
  2. Cambie preserve_hostname: false en el archivo de configuración por preserve_hostname: true.

    # This will cause the set+update hostname module to not operate (if true)
    preserve_hostname: true
  3. Presione la tecla Esc, introduzca :wq y luego presione la tecla Enter para 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-eth0

    El 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

Preguntas frecuentes

  • ¿Qué debo hacer si faltan bibliotecas de dependencias al instalar cloud-init con Python 3?

    Cada imagen puede requerir bibliotecas distintas. Instale las bibliotecas faltantes mediante pip y vuelva a instalar cloud-init.

  • ¿Qué debo hacer si cloud-init funciona de manera anómala y muestra un mensaje de error?

    Si el gestor de paquetes predeterminado del sistema (como yum) y el gestor pip instalaron versiones distintas de las bibliotecas de dependencias, pueden surgir conflictos de versiones que provoquen un funcionamiento anómalo de cloud-init. Se recomienda descargar las bibliotecas de dependencias necesarias según los mensajes de error.

    Mensaje de error

    Causa

    Comando de solución de problemas

    no setuptools module in python

    Falta el módulo setuptools de Python

    Tomando Python 3.6 como ejemplo:

    • CentOS/Red Hat: yum -y install python3-pip

    • Ubuntu/Debian: apt-get -y install python3-pip

    • OpenSUSE/SUSE: zypper -n install python3-pip

    File "/home/testuser/cloud-init/cloudinit/log.py", line 19, in <module>
          import six
      ImportError: No module named six  )

    Falta la biblioteca de dependencias six

    pip3 install six
    File "/home/testuser/cloud-init/cloudinit/url_helper.py", line 20, in <module>
          import oauthlib.oauth1 as oauth1
      ImportError: No module named oauthlib.oauth1  )

    Falta la biblioteca de dependencias oauthlib

    pip3 install oauthlib

    El mensaje de error no especifica la biblioteca de dependencias faltante

    El mensaje de error no tiene correspondencia

    Con base en las bibliotecas listadas en el archivo requirements.txt de cloud-init, ejecute el siguiente comando para instalar todas las bibliotecas de dependencias:

    pip3 install -r requirements.txt
  • ¿Qué debo hacer si una nueva versión de Python 3 instalada en la instancia provoca que cloud-init funcione de manera anómala?

    Si instala una nueva versión de Python 3 (como Python 3.9) en la instancia y la establece como versión predeterminada (es decir, crea un enlace simbólico para la nueva versión de Python 3, por ejemplo, ln -s /usr/bin/python3.9 /usr/bin/python3), el cloud-init instalado funcionará de manera anómala. Por ejemplo, al ejecutar cloud-init --version se mostrará el siguiente error:

    $cloud-init --version
    Traceback (most recent call last):
      File "/usr/local/bin/cloud-init", line 33, in <module>
        sys.exit(load_entry_point('cloud-init==19.1.9', 'console_scripts', 'cloud-init')())
      File "/usr/local/bin/cloud-init", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/lib64/python3.9/importlib/metadata.py", line 524, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/lib64/python3.9/importlib/metadata.py", line 187, in from_name
        raise PackageNotFoundError(name)
    importlib.metadata.PackageNotFoundError: cloud-init

    Utilice cualquiera de los siguientes métodos para resolver este problema:

    • Método 1: Reinstale cloud-init con la nueva versión de Python 3.

    • Método 2: Modifique el archivo ejecutable de cloud-init para cambiar la ruta del intérprete de Python a la versión anterior de Python 3. Tomando Python 3.6 como ejemplo, siga estos pasos para modificar el intérprete en el archivo ejecutable de cloud-init:

      1. Ejecute el siguiente comando para abrir el archivo de cloud-init.

        vim   /usr/local/bin/cloud-init
      2. Presione i para entrar al modo de edición y cambie el contenido después de #! al inicio del archivo por la ruta de Python 3.6.

        Después de la modificación, la línea #! quedará así:

        #!/usr/bin/python3.6
      3. Presione la tecla Esc para salir del modo de edición, introduzca :wq y luego presione Enter para guardar y salir del archivo.

  • ¿Qué debo hacer si los datos de usuario especificados en los metadatos de la instancia durante su creación no se ejecutan o fallan tras instalar cloud-init?

    1. Ejecute el siguiente comando dentro de la instancia para comprobar si user-data existe en los metadatos de la instancia.

      curl http://100.100.100.200/latest/user-data

      Descripción del resultado de la comprobación:

      • Si user-data está configurado, se devuelve la información correspondiente. Continúe con el siguiente paso para solucionar el problema.

      • Si no se devuelve ninguna información, user-data no está configurado.

    2. Utilice los siguientes métodos para identificar por qué user-data no se ejecuta o falla.

      • Compruebe si el formato de user-data es correcto.

        cloud-init se encarga de ejecutar user-data. Asegúrese de que el formato de los datos sea correcto. Por ejemplo, la primera línea de user-data debe comenzar con #!. Para obtener más información, consulte Customize instance initialization configurations.

      • Consulte los resultados de ejecución de user-data en el archivo de registro de cloud-init /var/log/cloud-init.log y resuelva el problema con base en los mensajes de error.

        El siguiente ejemplo muestra la información registrada en el archivo de registro:

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • Consulte la salida estándar y la salida de error estándar del proceso de ejecución de user-data.

        En systemd, la herramienta de inicialización del sistema Linux, cloud-final.service ejecuta user-data. Ejecute el siguiente comando para consultar la salida estándar y la salida de error estándar del proceso de ejecución de user-data, y resuelva el problema con base en dicha salida.

        journalctl -u cloud-final.service
      • Si ninguno de los métodos anteriores permite identificar por qué user-data no se ejecuta o falla, se recomienda copiar el contenido de user-data a un host local para depurarlo y comprobar si se ejecuta correctamente.

  • ¿Qué debo hacer si las configuraciones de inicialización del sistema y los scripts de datos de usuario de la instancia no se ejecutan como se espera tras instalar cloud-init?

    1. Ejecute los siguientes comandos para comprobar si los cuatro servicios de cloud-init están configurados para iniciarse con el sistema.

      systemctl is-enabled cloud-init-local.service
      systemctl is-enabled cloud-init.service
      systemctl is-enabled cloud-config.service
      systemctl is-enabled cloud-final.service

      Si se devuelve un mensaje de error o disabled, cloud-init no está configurado para iniciarse con el sistema.

    2. Ejecute los siguientes comandos para configurar cloud-init de modo que se inicie con el sistema.

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • ¿Qué debo hacer si la partición raíz no se expande automáticamente dentro de la instancia después de ampliar el disco del sistema durante la creación de la instancia?

    cloud-init admite la expansión automática de particiones en instancias Linux. Asegúrese de que la herramienta growpart esté instalada en el sistema y de que el archivo cloud.cfg esté configurado correctamente.

    1. Ejecute el siguiente comando para comprobar si la herramienta growpart está instalada en el sistema.

      which growpart
    2. (Requisito condicional) Si la herramienta no está instalada, ejecute los siguientes comandos para instalarla.

      • Familia RHEL:

        sudo yum -y install cloud-utils-growpart
      • Familia Debian:

        sudo apt -y install cloud-guest-utils
    3. Ejecute el siguiente comando para comprobar si el archivo /etc/cloud/cloud.cfg contiene el siguiente contenido.

      cat /etc/cloud/cloud.cfg

      Asegúrese de que la frecuencia de growpart y resizefs sea once-per-instance:

      # The modules that run in the 'init' stage
      cloud_init_modules:
       - migrator
       - source-address
       - pip-source
       - seed_random
       - bootcmd
       - write-files
       - [ growpart, once-per-instance ]
       - [ resizefs, once-per-instance ]
       - set_hostname
       - update_hostname
       - update_etc_hosts
       - rsyslog
       - users-groups
       - ssh
    4. (Requisito condicional) Si el contenido no existe, agréguelo al archivo /etc/cloud/cloud.cfg.

  • ¿Qué debo hacer si el nuevo nombre de host no surte efecto después de actualizarlo en la consola y reiniciar una instancia ECS cuya versión de cloud-init es 0.7.6a16 o anterior?

    • Descripción del problema

      Después de actualizar el nombre de host en la consola de ECS y reiniciar la instancia ECS, el nuevo nombre de host no se aplica. Al ejecutar el comando cloud-init --version, se observa que la versión de cloud-init es 0.7.6a16 o anterior.

    • Causa

      Cuando cloud-init actualiza el nombre de host mediante el módulo update_hostname, ejecuta el comando hostname para obtener el nombre de host actual del sistema. Luego lee el archivo /var/lib/cloud/data/previous-hostname para obtener el nombre de host almacenado en la caché de datos de cloud-init y comprueba si ambos coinciden. Si coinciden, actualiza el nombre de host. Si no coinciden, cloud-init asume que el nombre de host se modificó manualmente y no lo actualiza.

      En los sistemas operativos de la familia Red Hat, se procesa el salto de línea del archivo /var/lib/cloud/data/previous-hostname al leerlo, pero no se procesa el salto de línea en la salida del comando hostname. Como resultado, ambos valores difieren y el nombre de host no se actualiza.

    • Solución

      Utilice cualquiera de las siguientes soluciones para resolver este problema:

      • Actualice la versión de cloud-init. Para obtener más información, consulte Step 2: Install cloud-init.

        • Si utiliza CentOS 6 o anterior, emplee cloud-init 0.7.6a18.

        • Si utiliza CentOS 7, emplee cloud-init 19.1.21.

        • Si utiliza CentOS 8 o posterior, se recomienda emplear cloud-init 23.2.2 o posterior.

      • Procese el salto de línea manualmente.

        Modifique manualmente el archivo defectuoso de cloud-init cloudinit/distros/rhel.py (obtenga la ruta del archivo ejecutando el comando find / -name rhel.py). Consulte distros/rhel.py: _read_hostname() missing strip on "hostname" para procesar el salto de línea en la salida del comando hostname. El siguiente ejemplo muestra cómo procesar el salto de línea:

        diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py
        index 0b68414e..65176e99 100644
        --- a/cloudinit/distros/rhel.py
        +++ b/cloudinit/distros/rhel.py
        @@ -143,6 +143,7 @@ class Distro(distros.Distro):
                     return util.load_file(filename).strip()
                 elif self.uses_systemd():
                     (out, _err) = util.subp(['hostname'])
        +            out = out.strip()
                     if len(out):
                         return out
                     else: