Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2025-11-11 GMT+08:00

Instalación de Cloud-Init

Escenarios

Para asegurarse de que puede usar la función de inyección de datos de usuario para inyectar información personalizada inicial en los ECS creados a partir de una imagen privada (como configurar la ECS contraseña de inicio de sesión), instale Cloud-Init en el ECS utilizado para crear la imagen.

  • Es necesario descargar Cloud-Init desde su sitio web oficial. Por lo tanto, debe vincular una EIP al ECS.
  • Si Cloud-Init no está instalado, no puede configurar un ECS. Como resultado, solo puede usar la contraseña del archivo de imagen para iniciar sesión en los ECS creados.
  • De forma predeterminada, los ECS creados a partir de una imagen pública tienen Cloud-Init instalado. No es necesario instalar o configurar Cloud-Init en dichos ECS.
  • Para los ECS creados con un archivo de imagen externo, instale y configure Cloud-Init realizando las operaciones de esta sección. Para ver cómo configurar Cloud-Init, consulte Configuración de Cloud-Init.

Cloud-Init es un software de código abierto. Si la versión instalada tiene vulnerabilidades de seguridad, se recomienda actualizarla a la versión más reciente.

Prerrequisitos

  • Una EIP ha sido vinculada al ECS.
  • Ha iniciado sesión en el ECS.
  • El modo de obtención de la dirección IP del ECS es DHCP.

Procedimiento

  1. Comprueba si se ha instalado Cloud-Init.

    Para obtener más información, véase Comprobar si se ha instalado Cloud-Init.

  2. Instale Cloud-Init.

    Puede instalar Cloud-Init de cualquiera de las siguientes maneras: (Recomendado) Instalar Cloud-Init usando el paquete de instalación oficial, Instalar Cloud-Init usando el paquete oficial de código fuente y pip y Instalar Cloud-Init usando el código fuente oficial de GitHub.

Comprobar si se ha instalado Cloud-Init

Realice las operaciones proporcionadas aquí para comprobar si se ha instalado Cloud-Init. Los métodos para comprobar si Cloud-Init está instalado varían en función de los sistemas operativos.

  • Si se encuentra en un entorno de Python 3, ejecute el siguiente comando para comprobar si Cloud-Init está instalado (Ubuntu22.0.4 se usa como ejemplo):

    which cloud-init

    • Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
      /usr/bin/cloud-init
    • Si se muestra información similar a la siguiente, Cloud-Init no está instalado:
      /usr/bin/which: no cloud-init in (/usr/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
  • Si estás en un entorno de Python 2, ejecuta el siguiente comando para comprobar si Cloud-Init está instalado (CentOS 6 se usa como ejemplo):

    which cloud-init

    • Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
      cloud-init-0.7.5-10.el6.centos.2.x86_64
    • Si no se devuelve ninguna información, Cloud-Init no está instalado.

      Para confirmar que Cloud-Init realmente no está instalado, se recomienda ejecutar rpm -qa |grep cloud-init para comprobar de nuevo. Si cualquiera de which cloud-init y rpm -qa |grep cloud-init muestra que Cloud-Init se ha instalado, Cloud-Init está instalado.

Si se ha instalado Cloud-Init, realice las siguientes operaciones:
  • Compruebe si se utiliza el certificado SSH en el sistema operativo ECS. Si el certificado ya no se utiliza, elimínelo.
    • Si el certificado se almacena en un directorio de usuario root, por ejemplo, /$path/$to/$root/.ssh/autorized_keys, ejecute los siguientes comandos:

      cd /root/.ssh

      rm authorized_keys

    • Si el certificado no está almacenado en un directorio de usuario root, por ejemplo, /$path/$to/$none-root/.ssh/autorized_keys, ejecute los siguientes comandos:

      cd /home/centos/.ssh

      rm authorized_keys

  • Ejecute el siguiente comando para eliminar la caché generada por Cloud-Init y asegúrese de que la ECS creada a partir de la imagen privada se puede iniciar con el certificado:

    sudo rm -rf /var/lib/cloud/*

No reinicie el ECS después de realizar la configuración. De lo contrario, necesita configurarlo de nuevo.

(Recomendado) Instalar Cloud-Init usando el paquete de instalación oficial

El método de instalación de Cloud-Init en un ECS varía dependiendo del sistema operativo. Realice las operaciones de instalación como usuario root.

A continuación se describe cómo instalar Cloud-Init en un ECS que ejecute SUSE Linux, CentOS, Fedora, Debian y Ubuntu. Para otros tipos de sistemas operativos, instale el tipo requerido de Cloud-Init. Por ejemplo, necesita instalar coreos-cloudinit en los ECS que ejecutan CoreOS.

  • SUSE Linux

    Rutas de acceso para obtener el paquete de instalación de Cloud-Init para SUSE Linux

    https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/

    http://download.opensuse.org/repositories/Cloud:/Tools/

    Seleccione el paquete de instalación de repositorio necesario en las rutas proporcionadas.

    Tome SUSE Enterprise Linux Server 12 como ejemplo. Realice los siguientes pasos para instalar Cloud-Init:

    1. Inicie sesión en el ECS utilizado para crear una imagen privada de Linux.
    2. Ejecute el siguiente comando para instalar el origen de instalación de red para SUSE Enterprise Linux Server 12:

      zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_12_SP3/Cloud:Tools.repo

    3. Ejecute el siguiente comando para actualizar el origen de instalación de red:

      zypper refresh

    4. Ejecute el siguiente comando para instalar Cloud-Init:

      zypper install cloud-init

    5. Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:
      • SUSE 11

        chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on

        service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status

      • SUSE 12 y openSUSE 12/13/42

        systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

        systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      Para SUSE y openSUSE, realice los siguientes pasos para deshabilitar el cambio dinámico del nombre de ECS:

      1. Ejecute el siguiente comando para abrir el archivo dhcp usando el editor vi:

        vi etc/sysconfig/network/dhcp

      2. Cambie el valor de DHCLIENT_SET_HOSTNAME en el archivo dhcp a no.
  • CentOS
    Tabla 1 enumera las rutas de instalación de Cloud-Init para CentOS. Seleccione el paquete de instalación requerido en las siguientes direcciones.
    Tabla 1 Direcciones del paquete de instalación de Cloud-Init

    Tipo de sistema operativo

    Versión

    Cómo obtenerlo

    CentOS

    6 32-bit

    https://archives.fedoraproject.org/pub/archive/epel/6/i386/

    6 64-bit

    https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/

    7 64-bit

    https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/

    1. Ejecute los siguientes comandos para instalar Cloud-Init:

      yum install Cloud-Init installation package address/epel-release-x-y.noarch.rpm

      yum install cloud-init

      La dirección del paquete de instalación de Cloud-Init indica la dirección del paquete de instalación de Cloud-Init epel-release, y x-y indica la versión de Cloud-Init epel-release requerida por el sistema operativo actual. Reemplácelos con los valores reales según Tabla 1.

      • Tome CentOS 6 de 64 bits como ejemplo. Si la versión es 6.8, el comando es el siguiente:

        yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm

      • Tome CentOS 7 de 64 bits como ejemplo. Si la versión es 7.14, el comando es el siguiente:

        yum install https://archives.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm

    2. Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

  • Fedora

    Antes de instalar Cloud-Init, asegúrese de que la dirección de origen de instalación de red se ha configurado para el sistema operativo comprobando si el archivo /etc/yum.repo.d/fedora.repo contiene la dirección de origen de instalación del paquete de software. Si el archivo no contiene la dirección, configure la dirección siguiendo las instrucciones en el sitio web oficial de Fedora.

    1. Ejecute el siguiente comando para instalar Cloud-Init:

      yum install cloud-init

    2. Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

  • Debian y Ubuntu

    Antes de instalar Cloud-Init, asegúrese de que la dirección de origen de instalación de red se ha configurado para el sistema operativo comprobando si el archivo /etc/apt/sources.list contiene la dirección de origen de instalación del paquete de software. Si el archivo no contiene la dirección, configure la dirección siguiendo las instrucciones en el sitio web oficial de Debian o Ubuntu.

    1. Ejecute los siguientes comandos para instalar Cloud-Init:

      apt-get update

      apt-get install cloud-init

    2. Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    Cloud-Init-23.2.2 se utiliza como ejemplo para describir cómo instalar Cloud-Init en CentOS, Fedora, Ubuntu, Debian y SUSE.

    Descargue el paquete de código fuente cloud-init-23.2.2.tar.gz desde https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz.

  • Centos 7/Fedora Server 36

    Asegúrese de que Python 3 se ha instalado.

    1. Comprueba si se ha instalado Cloud-Init. Si se muestra algún resultado de comando, se ha instalado Cloud-Init.
      cloud-init -v
    2. Elimine el directorio de caché de Cloud-Init.
      rm -rf /var/lib/cloud/*
    3. Instale paquetes de dependencias de Cloud-Init.
      yum install python3-pip -y
      yum install python3-devel
    4. Descargue el paquete Cloud-Init.
      wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz
    5. Descomprima el paquete Cloud-Init.
      tar -zxvf cloud-init 23.2.2.tar.gz
    6. Vaya al directorio cloud-init-23.2.2 e instale bibliotecas dependientes:
      cd cloud-init23.2.2
      pip3 install -r requirements.txt
    7. Instale Cloud-Init.
      python3 setup.py build
      python3 setup.py install --init-system system
    8. (Opcional) Deshabilite la capacidad de configuración de red de Cloud-Init modificando el archivo /etc/cloud/cloud.cfg.
      vi /etc/cloud/cloud.cfg

      Agregue el siguiente contenido al archivo:

      network:
        config: disabled
    9. Reinicie Cloud-Init y compruebe su estado.
      systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    10. Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
    11. Comprueba si Cloud-Init se está ejecutando correctamente.
      cloud-init -v
      cloud-init init --local 

  • Ubuntu22.0.4/Debian 11

    Asegúrese de que Python 3 se ha instalado.

    1. Compruebe y elimine los archivos de configuración redundantes de Cloud-Init.
      rm -rf /var/lib/cloud/*
      rm -f /var/log/cloud-init*

      Elimine todos los archivos excepto los archivos de configuración relacionados con el registro del directorio /etc/cloud/cloud.cfg.d/.

    2. Actualice su lista de paquetes y compruebe si Wget está instalado. Si no lo es, instálelo.
      sudo apt update
      sudo apt install wget 
    3. Instale paquetes de dependencias.
      apt-get install cloud-guest-utils -y
      apt-get install python3-pip -y
      apt-get install python3-devel
    4. Descargue el paquete Cloud-Init.
      wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz
    5. Descomprima el paquete Cloud-Init.
      tar -zxvf cloud-init 23.2.2.tar.gz
    6. Vaya al directorio cloud-init.
      cd cloud-init
    7. Instalar bibliotecas dependientes.
      pip3 install -r requirements.txt
    8. Instale Cloud-Init.
      python3 setup.py install
    9. (Opcional) Desactive la capacidad de configuración de red de Cloud-Init.

      Debe hacerlo cuando la versión de Cloud-Init sea 0.7.9 o posterior y desee configurar la red.

      1. Abra el archivo /etc/cloud/cloud.cfg.

      vi /etc/cloud/cloud.cfg

      2. Ingrese i y configure network. (Si no hay tal elemento de configuración, agréguelo.)

      network:
        config: disabled
    10. Reinicie Cloud-Init y compruebe su estado.
      systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
    11. Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
    12. Comprueba si Cloud-Init se está ejecutando correctamente.
      cloud-init -v
      cloud-init init --local

  • SUSE Enterprise Linux Server 15

    Asegúrese de que Python 3 se ha instalado.

    1. Vea repositorios de SUSE existentes.
      zypper lr
    2. Elimine los repositorios de SUSE.
      zypper rr No. of repositories listed in 1
    3. Configure un repositorio de SUSE.
      zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_15_SP4/Cloud:Tools.repo
    4. Actualice el repositorio de SUSE.
      zypper refresh
    5. Instale Cloud-Init.
      zypper install cloud-init
    6. Ejecuta cloud-init -v. Si se muestran mensajes de error similares a los siguientes, instale los paquetes de dependencias.

      pip install requests pyyaml oauthlib jsonschema jsonpatch jinja2 configobj
    7. Comprueba si Cloud-Init se ha instalado correctamente. Si aparece el siguiente mensaje de error, configure datasource_list en /etc/cloud/cloud.cfg.
      datasource_list: [ OpenStack ]
      datasource:
        OpenStack:
          metadata_urls: ['http://169.254.169.254']
          max_wait: 120
          timeout: 5
          apply_network_config: false
    8. Modifique el archivo de configuración, reinicie Cloud-Init y compruebe el estado de Cloud-Init.
      systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 
      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
    9. Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

    10. Comprueba si Cloud-Init se está ejecutando correctamente.
      cloud-init -v
      cloud-init init --local

Instalar Cloud-Init usando el paquete oficial de código fuente y pip

Las siguientes operaciones usan Cloud-Init 0.7.9 como ejemplo para describir cómo instalar Cloud-Init.

  1. Descargue el paquete de código fuente cloud-init-0.7.9.tar.gz (se recomienda la versión 0.7.9) y súbalo al directorio /home/ del ECS.

    Descargue cloud-init-0.7.9.tar.gz desde la siguiente ruta:

    https://launchpad.net/cloud-init/trunk/0.7.9/+download/cloud-init-0.7.9.tar.gz

  2. Cree un archivo pip.conf en el directorio ~/.pip/ y edite el siguiente contenido:

    Si el directorio ~/.pip/ no existe, ejecute el comando mkdir ~/.pip para crearlo.

    [global]
    index-url  = https://<$mirror>/simple/
    trusted-host = <$mirror>

    Reemplace <$mirror> con un origen PyPI de red pública.

    Fuente de PyPI de la red pública https://pypi.python.org/

  3. Ejecute el siguiente comando para instalar el paquete de código fuente de Cloud-Init descargado (seleccione --upgrade según sea necesario durante la instalación):

    pip install [--upgrade] /home/cloud-init-0.7.9.tar.gz

    Para obtener más información sobre cómo instalar un paquete de código fuente de Cloud-Init, consulte Documentación de Cloud-Init.

  4. Ejecute el comando cloud-init -v. Cloud-Init se instala correctamente si se muestra la siguiente información:
    cloud-init 0.7.9
  5. Habilite Cloud-Init para que se inicie automáticamente al iniciar el sistema.
    • Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:

      chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final

      chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on

      service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status

    • Si el sistema operativo utiliza Systemd para gestionar el inicio automático de servicios, ejecute los siguientes comandos:

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

Si instalas Cloud-Init usando el paquete de código fuente oficial y pip, presta atención a lo siguiente:

  1. Agregar usuario syslog al grupo adm durante la instalación. Si existe usuario syslog, agréguelo al grupo adm. Para algunos sistemas operativos (como CentOS y SUSE), es posible que el usuario syslog no exista. Ejecute los siguientes comandos para crear usuario de syslog y agregarlo al grupo adm:

    useradd syslog

    groupadd adm

    usermod -g adm syslog

  2. Cambie el valor de distro en system_info en el archivo /etc/cloud/cloud.cfg basado en la versión de lanzamiento del sistema operativo, como distro: ubuntu, distro: sles, distro: debian, y distro: fedora.

Instalar Cloud-Init usando el código fuente oficial de GitHub

Puede obtener el código fuente de Cloud-Init de GitHub en https://github.com/canonical/cloud-init/

  1. Ejecute los siguientes comandos para descargar el paquete de código fuente y copiarlo a la carpeta /tmp/CLOUD-INIT :

    wget https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip

    mkdir /tmp/CLOUD-INIT

    cp cloud-init-0.7.6.zip /tmp/CLOUD-INIT

    cd /tmp/CLOUD-INIT

  2. Ejecute el siguiente comando para descomprimir el paquete:

    unzip cloud-init-0.7.6.zip

  3. Ejecute el siguiente comando para ingresar a la carpeta cloud-init-0.7.6:

    cd cloud-init-0.7.6

  4. (Opcional) Si la versión de Cloud-Init es 18.3 a 22.3, ejecute los siguientes comandos:

    sed -i '/VALID_DMI_ASSET_TAGS =/a\VALID_DMI_ASSET_TAGS += ["HUAWEICLOUD"]' cloudinit/sources/DataSourceOpenStack.py

    cat cloudinit/sources/DataSourceOpenStack.py | grep VALID_DMI_ASSET_TAGS

    Si se muestra la siguiente información, la ejecución se realiza correctamente.

  5. Instale Cloud-Init. Los comandos varían según el tipo de sistema operativo.
    • Para CentOS 6.x o SUSE 11.x, ejecute los siguientes comandos:

      python setup.py build

      python setup.py install --init-system sysvinit

    • Para CentOS 7.x o SUSE 12.x, ejecute los siguientes comandos:

      python setup.py build

      python setup.py install --init-system systemd

    Agregar usuario syslog al grupo adm durante la instalación. Si existe usuario syslog, agréguelo al grupo adm. Para algunos sistemas operativos (como CentOS y SUSE), es posible que el usuario syslog no exista. Ejecute los siguientes comandos para crear usuario de syslog y agregarlo al grupo adm:

    useradd syslog

    groupadd adm

    usermod -g adm syslog

  6. Habilite Cloud-Init para que se inicie automáticamente al iniciar el sistema.
    • Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:

      chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final

      chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on

      service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status

    • Si el sistema operativo utiliza Systemd para gestionar el inicio automático de servicios, ejecute los siguientes comandos:

      systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

      systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

  7. Ejecute los siguientes comandos para comprobar si se ha instalado Cloud-Init:

    cloud-init -v

    cloud-init init --local

    Cloud-Init se instala correctamente si se muestra la siguiente información:

    cloud-init 0.7.6