Configuración y gestión de cloud-init para RHEL 8

Red Hat Enterprise Linux 8

Uso de cloud-init para automatizar la inicialización de las instancias de la nube

Resumen

Puede utilizar cloud-init para automatizar la inicialización de las instancias de nube. Puede instalar el paquete cloud-init en su máquina virtual, o puede elegir una imagen de Red Hat Enterprise Linux que incluya cloud-init ya instalado. Puede utilizar cloud-init con varios productos de Red Hat.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a sustituir el lenguaje problemático en nuestro código, documentación y propiedades web. Estamos empezando con estos cuatro términos: maestro, esclavo, lista negra y lista blanca. Debido a la enormidad de este esfuerzo, estos cambios se implementarán gradualmente a lo largo de varias versiones próximas. Para más detalles, consulte el mensaje de nuestro CTO Chris Wright.

Proporcionar comentarios sobre la documentación de Red Hat

Agradecemos su opinión sobre nuestra documentación. Por favor, díganos cómo podemos mejorarla. Para ello:

  • Para comentarios sencillos sobre pasajes concretos:

    1. Asegúrese de que está viendo la documentación en el formato Multi-page HTML. Además, asegúrese de ver el botón Feedback en la esquina superior derecha del documento.
    2. Utilice el cursor del ratón para resaltar la parte del texto que desea comentar.
    3. Haga clic en la ventana emergente Add Feedback que aparece debajo del texto resaltado.
    4. Siga las instrucciones mostradas.
  • Para enviar comentarios más complejos, cree un ticket de Bugzilla:

    1. Vaya al sitio web de Bugzilla.
    2. Como componente, utilice Documentation.
    3. Rellene el campo Description con su sugerencia de mejora. Incluya un enlace a la(s) parte(s) pertinente(s) de la documentación.
    4. Haga clic en Submit Bug.

Capítulo 1. Introducción a cloud-init

cloud-init es un paquete de software que automatiza la inicialización de las instancias de la nube durante el arranque del sistema. Puedes configurar cloud-init para que realice una variedad de tareas. Algunos ejemplos de tareas que puede realizar cloud-init son:

  • Configurar un nombre de host
  • Instalación de paquetes en una instancia
  • Ejecución de guiones
  • Suprimir el comportamiento por defecto de la máquina virtual

El lugar donde se obtiene la imagen para configurar cloud-init depende del uso que se le quiera dar.

  • El paquete cloud-init se instala en las imágenes de huésped KVM que se descargan desde el Portal del Cliente de Red Hat. Cuando se lanza una instancia, se habilita cloud-init. Las Imágenes de Huésped KVM que se descargan desde el Portal del Cliente de Red Hat están pensadas para ser utilizadas con Red Hat Virtualization (RHV) y Red Hat OpenStack Platform (RHOSP). También puede crear una imagen desde cero para RHV y RHOSP.
  • Otra opción es descargar una imagen ISO desde el Portal del Cliente de Red Hat o crear una. En este caso, debe instalar cloud-init en su imagen ISO.
  • Si planea utilizar una imagen con un proveedor de nube (por ejemplo, AWS o Azure), utilice Red Hat Image Builder para crear la imagen. Las imágenes de Image Builder están personalizadas para su uso con proveedores de nube específicos. Los tipos de imagen AMI, VHD y qcow2 incluyen cloud-init ya instalado. Consulte Composición de una imagen de sistema RHEL personalizada para obtener información sobre Image Builder.

La mayoría de las plataformas en la nube admiten cloud-init, aunque los procedimientos de configuración y las opciones admitidas varían. Como alternativa, puede configurar cloud-init para un entorno NoCloud.

Puede configurar cloud-init en una máquina virtual (VM) y luego utilizar esa VM como plantilla para VMs adicionales o clusters de VMs.

Productos específicos de Red Hat (por ejemplo, Red Hat Virtualization) tienen procedimientos documentados para configurar cloud-init para su uso con esos productos.

Este documento hace referencia a la documentación de cloud-init en varios lugares. Consulte la documentación de cloud-init a la que se hace referencia para obtener información completa sobre cloud-init.

Requisitos previos

Recursos adicionales

1.1. configuración de cloud-init

cloud-init utiliza instrucciones de archivos con formato YAML para realizar las tareas. Usted decide la configuración inicial que desea que cloud-init realice proporcionando instrucciones dentro de los archivos YAML. Cuando una instancia arranca, el servicio cloud-init se inicia y busca y ejecuta las instrucciones. Las tareas se completan durante el primer arranque o en los siguientes arranques de la máquina virtual, según la configuración de cloud-init.

Las tareas se definen configurando el archivo /etc/cloud/cloud.cfg y añadiendo directivas en el directorio /etc/cloud/cloud.cfg.d/.

  • El archivo cloud.cfg incluye directivas, como las de acceso y autenticación de usuarios e información del sistema.

    El archivo también incluye módulos por defecto y opcionales para cloud-init. Los módulos se ejecutan en orden dentro de tres fases que incluyen la fase de inicialización cloud-init, la fase de configuración y la fase final. Dentro del archivo cloud.cfg, los módulos para las tres fases se enumeran bajo cloud_init_modules, cloud_config_modules, y cloud_final_modules, respectivamente.

  • El directorio cloud.cfg.d es donde se pueden añadir directivas adicionales para cloud-init. Cuando se añaden directivas al directorio cloud.cfg.d, normalmente se añaden a un archivo llamado *.cfg, y siempre se incluye #cloud-config al principio del archivo.

1.2. cloud-init funciona por etapas

cloud-init funciona en cinco etapas durante el arranque del sistema. Estas etapas determinan si cloud-init se ejecuta y dónde encuentra sus fuentes de datos, entre otras tareas. A continuación se presenta un breve resumen de las etapas.

  1. La etapa generadora de cloud-init, a través del servicio systemd, determina si se ejecuta cloud-init en el arranque.
  2. Durante la etapa local, cloud-init encuentra las fuentes de datos locales y aplica la configuración de la red.
  3. Durante la etapa de red, cloud-init procesa los datos del usuario y ejecuta los módulos listados en cloud_init_modules en su archivo cloud.cfg. Puedes activar, desactivar o añadir módulos a la sección cloud_init_modules.
  4. Durante la etapa de configuración, cloud-init ejecuta los módulos listados en cloud_config_modules en su archivo cloud.cfg. Puedes activar, desactivar o añadir módulos a la sección cloud_config_modules.
  5. Durante la etapa final, cloud-init puede ejecutar lo que haya incluido en cloud_final_modules en su archivo cloud.cfg. Puede incluir instalaciones de paquetes que normalmente se ejecutan tras el arranque del sistema y también puede incluir complementos de gestión de la configuración y scripts de usuario. Puede habilitar, deshabilitar o añadir módulos a la sección cloud_final_modules.

Las cinco etapas de arranque se describen en la sección de documentación cloud-init Etapas de arranque.

1.3. los módulos cloud-init se ejecutan en fases

Cuando cloud-init se ejecuta, ejecuta los módulos dentro de cloud.cfg en orden dentro de tres fases que incluyen la fase de red (cloud_init_modules), la fase de configuración (cloud_config_modules), y la fase final (cloud_final_modules). Cuando cloud-init se ejecuta por primera vez en una VM, todos los módulos que ha configurado se ejecutan en sus respectivas fases. En una ejecución posterior de cloud-init, el hecho de que un módulo se ejecute dentro de una fase depende de la module frequency del módulo individual. Algunos módulos se ejecutan cada vez que se ejecuta cloud-init; otros módulos sólo se ejecutan la primera vez que se ejecuta cloud-init, incluso si el ID de la instancia cambia.

Nota

Un ID de instancia identifica de forma exclusiva una instancia. Cuando un ID de instancia cambia, cloud-init trata la instancia como una nueva instancia.

A continuación se describen brevemente los valores de module frequency.

  • Per instance significa que el módulo se ejecuta en el primer arranque de una instancia. Por ejemplo, si se clona una instancia o se crea una nueva instancia a partir de una imagen guardada, los módulos designados como por instancia se ejecutan de nuevo.
  • Per once significa que el módulo se ejecuta sólo una vez. Por ejemplo, si se clona una instancia o se crea una nueva instancia a partir de una imagen guardada, los módulos designados por una vez no vuelven a ejecutarse en esas instancias.
  • Per always significa que el módulo se ejecuta en cada arranque.
Nota

Puede anular la frecuencia de un módulo al configurarlo o mediante la línea de comandos.

1.4. cloud-init actúa sobre los datos del usuario, los metadatos y los datos del proveedor

cloud-init consume y actúa sobre los datos del usuario, los metadatos y los datos del proveedor.

  • Los datos de usuario incluyen las directivas que usted especifica en el archivo cloud.cfg y en el directorio cloud.cfg.d, por ejemplo, los datos de usuario pueden incluir archivos para ejecutar, paquetes para instalar y scripts de shell. Consulte la sección de documentación cloud-init Formatos de datos de usuario para obtener información sobre los tipos de datos de usuario que permite cloud-init.
  • Los metadatos incluyen datos asociados con una fuente de datos específica, por ejemplo, los metadatos pueden incluir un nombre de servidor y un ID de instancia. Si utiliza una plataforma en la nube específica, la plataforma determina dónde encuentran sus instancias los datos de usuario y los metadatos. Su plataforma puede requerir que añada metadatos y datos de usuario a un servicio HTTP; en este caso, cuando cloud-init se ejecuta consume metadatos y datos de usuario del servicio HTTP.
  • Los datos del proveedor son proporcionados opcionalmente por la organización (por ejemplo, un proveedor de la nube) e incluyen información que puede personalizar la imagen para que se adapte mejor al entorno en el que se ejecuta la imagen. cloud-init actúa sobre los datos opcionales del proveedor y los datos del usuario después de leer cualquier metadato e inicializar el sistema. Por defecto, los datos del proveedor se ejecutan en el primer arranque. Puede desactivar la ejecución de los datos del proveedor.

    Consulte la sección de documentación cloud-init Metadatos de la instancia para obtener una descripción de los metadatos; Fuentes de datos para obtener una lista de fuentes de datos; y Datos del proveedor para obtener más información sobre los datos del proveedor.

1.5. cloud-init identifica la plataforma de la nube

cloud-init intenta identificar la plataforma en la nube utilizando el script ds-identify. El script se ejecuta en el primer arranque de una instancia.

Añadir una directiva de fuente de datos puede ahorrar tiempo cuando se ejecuta cloud-init. La directiva se añade en el archivo /etc/cloud/cloud.cfg o en el directorio /etc/cloud/cloud.cfg.d. A continuación se muestra un ejemplo.

datasource_list:[Ec2]

Además de añadir la directiva para su plataforma en la nube, puede configurar aún más cloud-init añadiendo detalles de configuración adicionales, como las URL de metadatos.

datasource_list: [Ec2]
datasource:
  Ec2:
    metadata_urls: ['http://169.254.169.254']

Después de la ejecución de cloud-init, puede ver un archivo de registro (run/cloud-init/ds-identify.log) que proporciona información detallada sobre la plataforma.

Capítulo 2. Soporte de Red Hat para cloud-init

Este capítulo cubre el soporte de Red Hat para cloud-init. Incluye información sobre los productos de Red Hat que utilizan cloud-init, los módulos de cloud-init que soporta Red Hat y los directorios y archivos por defecto.

2.1. cloud-init directorios y archivos significativos

La siguiente tabla incluye directorios y archivos importantes. Revise estos directorios y archivos; le permiten realizar tareas como:

  • Configuración de cloud-init
  • Encontrar información sobre su configuración después de la ejecución de cloud-init
  • Examinar los archivos de registro
  • Encontrar plantillas

Dependiendo de su escenario y fuente de datos, puede haber archivos y directorios adicionales importantes para su configuración.

Tabla 2.1. directorios y archivos cloud-init

Directorio o archivoDescripción

/etc/cloud/cloud.cfg

El archivo cloud.cfg incluye la configuración básica de cloud-init y permite saber en qué fase se ejecuta cada módulo.

/etc/cloud/cloud.cfg.d

El directorio cloud.cfg.d es donde se pueden añadir directivas adicionales para cloud-init.

/var/lib/cloud

Cuando cloud-init se ejecuta, crea una disposición de directorios bajo /var/lib/cloud. La disposición incluye directorios y archivos que dan detalles sobre la configuración de su instancia.

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

El directorio examples incluye múltiples ejemplos. Puede utilizarlos para ayudar a modelar sus propias directivas.

/etc/cloud/templates

Este directorio incluye plantillas que puede habilitar en cloud-init para determinados escenarios. Las plantillas proporcionan la dirección para la habilitación.

/var/log/cloud-init.log

El archivo cloud-init.log proporciona información de registro útil para la depuración.

/run/cloud-init

El directorio /run/cloud-init incluye información registrada sobre su fuente de datos y el script ds-identify.

2.2. Productos de Red Hat que utilizan cloud-init

Puede utilizar cloud-init con los siguientes productos de Red Hat.

2.3. Red Hat admite estos módulos de cloud-init

Red Hat soporta la mayoría de los módulos de cloud-init. Los módulos individuales pueden contener múltiples opciones de configuración. La siguiente tabla lista todos los módulos de cloud-init que Red Hat soporta actualmente y proporciona una breve descripción y la frecuencia del módulo por defecto. Consulte Módulos en la sección de documentación de cloud-init para ver las descripciones y opciones completas de estos módulos.

Tabla 2.2. Módulos soportados de cloud-init

módulo cloud-initDescripciónFrecuencia del módulo por defecto

bootcmd

Ejecuta comandos al principio del proceso de arranque

por siempre

ca_certs

Añade certificados de CA

por ejemplo

depurar

Activa o desactiva la salida de información interna para ayudar a la depuración

por ejemplo

disable_ec2_metadata

Activa o desactiva los metadatos de AWS EC2

por siempre

configuración_del_disco

Configura tablas de partición y sistemas de archivos sencillos

por ejemplo

mensaje_final

Especifica el mensaje de salida una vez que cloud-init finaliza

por siempre

foo

El ejemplo muestra la estructura del módulo (el módulo no hace nada)

por ejemplo

growpart

Redimensiona las particiones para llenar el espacio disponible en el disco

por siempre

llaves_para_la_consola

Permite controlar las huellas dactilares y las claves que se pueden escribir en la consola

por ejemplo

paisaje

Instala y configura un cliente landscape

por ejemplo

localidad

Configura la configuración regional del sistema y la aplica a todo el sistema

por ejemplo

mcollective

Instala, configura e inicia mcollective

por ejemplo

migrante

Traslada las versiones antiguas de cloud-init a las nuevas

por siempre

montajes

Configura los puntos de montaje y los archivos de intercambio

por ejemplo

teléfono_casa

Envía datos a un host remoto después de completar el arranque

por ejemplo

cambio_de_estado_de_la_potencia

Completa el apagado y el reinicio después de que se hayan ejecutado todos los módulos de configuración

por ejemplo

marioneta

Instala y configura puppet

por ejemplo

redimensionamiento

Redimensiona un sistema de archivos para utilizar todo el espacio disponible en una partición

por siempre

resolver_conf

Configura resolv.conf

por ejemplo

rh_suscripción

Registra un sistema Red Hat Enterprise Linux

por ejemplo

datos_de_derecho_de_usuario

Añade compatibilidad con los ganchos de configuración de RightScale para cloud-init

por ejemplo

rsyslog

Configura el registro del sistema remoto mediante rsyslog

por ejemplo

runcmd

Ejecuta comandos arbitrarios

por ejemplo

sal_minion

Instala, configura e inicia salt minion

por ejemplo

scripts_per_boot

Se ejecuta por scripts de arranque

por siempre

scripts_per_instance

Ejecución de scripts por instancia

por ejemplo

scripts_per_once

Ejecuta los scripts una vez

por una vez

scripts_user

Ejecuta los scripts del usuario

por ejemplo

scripts_vendor

Ejecuta los scripts de los proveedores

por ejemplo

semilla_aleatoria

Proporciona datos de semillas aleatorias

por ejemplo

set_hostname

Establece el nombre de host y el nombre de dominio completo (FQDN)

por siempre

set_passwords

Establece las contraseñas de los usuarios y activa o desactiva la autenticación de contraseñas SSH

por ejemplo

ssh_authkey_fingerprints

Registra las huellas digitales de las claves SSH de los usuarios

por ejemplo

ssh_import_id

Importación de claves SSH

por ejemplo

ssh

Configura el SSH y las claves de host y de SSH autorizadas

por ejemplo

zona horaria

Establece la zona horaria del sistema

por ejemplo

actualizar_etc_hosts

Actualizaciones /etc/hosts

por siempre

actualizar_nombre_de_host

Actualiza el nombre de host y el FQDN

por siempre

grupos_de_usuarios

Configura usuarios y grupos

por ejemplo

escribir_archivos

Escribe archivos arbitrarios

por ejemplo

yum_add_repo

Añade la configuración del repositorio yum al sistema

por siempre

La siguiente tabla enumera los módulos que Red Hat no soporta actualmente.

Tabla 2.3. Módulos no compatibles

Módulo

apt_configure

apt_pipeline

byobu

chef

emit_upstart

grub_dpkg

ubuntu_init_switch

2.4. El archivo cloud.cfg por defecto

El archivo /etc/cloud/cloud.cfg enumera los módulos que componen la configuración básica de cloud-init.

Los módulos en el archivo son los módulos por defecto para cloud-init. Puedes configurar los módulos para tu entorno o eliminar los que no necesites. Los módulos que se incluyen en cloud.cfg no hacen necesariamente nada por aparecer en el archivo. Tiene que configurarlos individualmente si quiere que realicen acciones durante una de las fases de cloud-init.

El archivo cloud.cfg proporciona la cronología para ejecutar módulos individuales. Puede añadir módulos adicionales a cloud.cfg siempre que Red Hat soporte los módulos que desea añadir.

Lo que sigue es el contenido por defecto del archivo para Red Hat Enterprise Linux (RHEL).

Nota
  • Los módulos se ejecutan en el orden indicado en cloud.cfg. Normalmente no se cambia este orden.
  • Las directivas de cloud.cfg pueden ser anuladas por los datos del usuario.
  • Cuando se ejecuta cloud-init manualmente, se puede anular cloud.cfg con las opciones de la línea de comandos.
  • Cada módulo incluye sus propias opciones de configuración, donde se puede añadir información específica.
users: 1
 - default

disable_root: 1 2
ssh_pwauth:   0 3

mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] 4
ssh_deletekeys:   1 5
ssh_genkeytypes:  ~ 6
syslog_fix_perms: ~ 7
disable_vmware_customization: false 8

cloud_init_modules: 9
 - disk_setup
 - migrator
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - rsyslog
 - users-groups
 - ssh

cloud_config_modules: 10
 - mounts
 - locale
 - set-passwords
 - rh_subscription
 - yum-add-repo
 - package-update-upgrade-install
 - timezone
 - puppet
 - chef
 - salt-minion
 - mcollective
 - disable-ec2-metadata
 - runcmd

cloud_final_modules: 11
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

system_info:
  default_user: 12
    name: cloud-user
    lock_passwd: true
    gecos: Cloud User
    groups: [adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel 13
  paths:
    cloud_dir: /var/lib/cloud 14
    templates_dir: /etc/cloud/templates 15
  ssh_svcname: sshd 16

# vim:syntax=yaml
1
Especifica el usuario por defecto para el sistema. Consulte Usuarios y grupos para obtener más información.
2
Activa o desactiva el inicio de sesión de root. Consulte Claves autorizadas para obtener más información.
3
Especifica si ssh está configurado para aceptar la autenticación con contraseña. Consulte Establecer contraseñas para obtener más información.
4
Configura los puntos de montaje; debe ser una lista que contenga seis valores. Consulte la sección Montajes para obtener más información.
5
Especifica si se eliminan las claves SSH del host por defecto. Consulte Claves de host para obtener más información.
6
Especifica los tipos de claves a generar. Consulte la sección Claves de host para obtener más información.
7
cloud-init se ejecuta en múltiples etapas de arranque. Establezca esta opción para que cloud-init pueda registrar todas las etapas en su archivo de registro. Encuentre más información sobre esta opción en el archivo cloud-config.txt en el directorio usr/share/doc/cloud-init/examples.
8
Activa o desactiva la personalización de VMware vSphere
9
Los módulos de esta sección son servicios que se ejecutan cuando se inicia el servicio cloud-init, al principio del proceso de arranque.
10
Estos módulos se ejecutan durante la configuración de cloud-init, después del arranque inicial.
11
Estos módulos se ejecutan en la fase final de cloud-init, una vez finalizada la configuración.
12
Especifica los detalles del usuario por defecto. Consulte Usuarios y grupos para obtener más información.
13
Especifica la distribución
14
Especifica el directorio principal que contiene los subdirectorios específicos de cloud-init. Consulte Diseño de directorios para obtener más información.
15
Especifica dónde residen las plantillas
16
El nombre del servicio SSH

2.5. El directorio cloud.cfg.d

cloud-init actúa sobre las directivas que usted proporciona y configura. Normalmente, esas directivas se incluyen en el directorio cloud.cfg.d.

Nota

Aunque puede configurar los módulos añadiendo directivas de datos de usuario dentro del archivo cloud.cfg, como mejor práctica considere dejar cloud.cfg sin modificar. Agregue sus directivas al directorio /etc/cloud/cloud.cfg.d. Añadir directivas a este directorio puede facilitar futuras modificaciones y actualizaciones.

Hay varias formas de añadir directivas. Puede incluir directivas en un archivo llamado *.cfg, que incluye el encabezamiento #cloud-config. Normalmente, el directorio contendrá varios archivos *cfg. Hay otras opciones para añadir directivas, por ejemplo, puede añadir un script de datos de usuario. Consulte Formatos de datos de usuario para obtener más información.

2.6. El archivo 05_logging.cfg por defecto

El archivo 05_logging.cfg establece la información de registro para cloud-init. El directorio /etc/cloud/cloud.cfg.d incluye este archivo, junto con otras directivas cloud-init que se añaden.

cloud-init utiliza la configuración de registro en 05_logging.cfg por defecto. Lo que sigue es el contenido por defecto del archivo para Red Hat Enterprise Linux (RHEL).

## This yaml formatted config file handles setting
## logger information.  The values that are necessary to be set
## are seen at the bottom.  The top '_log' are only used to remove
## redundancy in a syslog and fallback-to-file case.
##
## The 'log_cfgs' entry defines a list of logger configs
## Each entry in the list is tried, and the first one that
## works is used.  If a log_cfg list entry is an array, it will
## be joined with '\n'.
_log:
 - &log_base |
   [loggers]
   keys=root,cloudinit

   [handlers]
   keys=consoleHandler,cloudLogHandler

   [formatters]
   keys=simpleFormatter,arg0Formatter

   [logger_root]
   level=DEBUG
   handlers=consoleHandler,cloudLogHandler

   [logger_cloudinit]
   level=DEBUG
   qualname=cloudinit
   handlers=
   propagate=1

   [handler_consoleHandler]
   class=StreamHandler
   level=WARNING
   formatter=arg0Formatter
   args=(sys.stderr,)

   [formatter_arg0Formatter]
   format=%(asctime)s - %(filename)s[%(levelname)s]: %(message)s

   [formatter_simpleFormatter]
   format=[CLOUDINIT] %(filename)s[%(levelname)s]: %(message)s
 - &log_file |
   [handler_cloudLogHandler]
   class=FileHandler
   level=DEBUG
   formatter=arg0Formatter
   args=('/var/log/cloud-init.log',)
 - &log_syslog |
   [handler_cloudLogHandler]
   class=handlers.SysLogHandler
   level=DEBUG
   formatter=simpleFormatter
   args=("/dev/log", handlers.SysLogHandler.LOG_USER)

log_cfgs:
# Array entries in this list will be joined into a string
# that defines the configuration.
#
# If you want logs to go to syslog, uncomment the following line.
# - [ *log_base, *log_syslog ]
#
# The default behavior is to just log to a file.
# This mechanism that does not depend on a system service to operate.
 - [ *log_base, *log_file ]
# A file path can also be used.
# - /etc/log.conf

# This tells cloud-init to redirect its stdout and stderr to
# 'tee -a /var/log/cloud-init-output.log' so the user can see output
# there without needing to look on the console.
output: {all: '| tee -a /var/log/cloud-init-output.log'}

Recursos adicionales

2.7. La disposición del directorio /var/lib/cloud de cloud-init

Cuando cloud-init se ejecuta por primera vez, crea un directorio que incluye información sobre su instancia y la configuración de cloud-init.

Lo que sigue es el ejemplo de distribución de directorios para cloud-init.

El directorio puede incluir directorios opcionales, como /scripts/vendor.

/var/lib/cloud/
    - data/
       - instance-id
       - previous-instance-id
       - previous-datasource
       - previous-hostname
       - result.json
       - set-hostname
       - status.json
    - handlers/
    - instance
       - boot-finished
       - cloud-config.txt
       - datasource
       - handlers/
       - obj.pkl
       - scripts/
       - sem/
       - user-data.txt
       - user-data.txt.i
       - vendor-data.txt
       - vendor-data.txt.i
    - instances/
        f111ee00-0a4a-4eea-9c17-3fa164739c55/
          - boot-finished
          - cloud-config.txt
          - datasource
          - handlers/
          - obj.pkl
          - scripts/
          - sem/
          - user-data.txt
          - user-data.txt.i
          - vendor-data.txt
          - vendor-data.txt.i
    - scripts/
       - per-boot/
       - per-instance/
       - per-once/
       - vendor/
    - seed/
    - sem/
       - config_scripts_per_once.once

Recursos adicionales

Capítulo 3. Configuración de cloud-init

Este capítulo incluye ejemplos de las tareas de configuración más comunes para cloud-init.

Su configuración de cloud-init puede requerir que añada directivas al archivo cloud.cfg y al directorio cloud.cfg.d. Por otra parte, su fuente de datos específica puede requerir que añada directivas a archivos, como un archivo de datos de usuario y un archivo de metadatos. Una fuente de datos puede requerir que cargue sus directivas en un servidor HTTP. Compruebe los requisitos de su fuente de datos y añada las directivas en consecuencia.

3.1. Creación de una máquina virtual que incluye cloud-init para un origen de datos NoCloud

Lo que sigue es un procedimiento de ejemplo para crear una nueva máquina virtual que incluya cloud-init. En este procedimiento, se crea un archivo meta-data y user-data. Su archivo meta-data incluye los detalles de la instancia. Su archivo user-data incluye información para crear un usuario y concederle acceso. A continuación, se incluyen estos archivos en una nueva imagen ISO y se adjunta el archivo ISO a una nueva máquina virtual creada a partir de una imagen de invitado KVM. En este caso, la fuente de datos es NoCloud.

Procedimiento

  1. Cree un directorio llamado cloudinitiso y muévase a él.

    $ mkdir cloudinitiso
    $ cd cloudinitiso
  2. Cree un archivo llamado meta-data. Añade la siguiente información al archivo.

    instance-id: citest
    local-hostname: citest-1
  3. Cree un archivo llamado user-data. Incluya la siguiente información en el archivo.

    #cloud-config
    password: cilogon
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...fhHQ== sample@redhat.com
    Nota

    La última línea del archivo user-data hace referencia a una clave pública SSH. Encuentre sus claves públicas SSH en ~/.ssh/id_rsa.pub. Cuando intente este procedimiento de ejemplo, modifique la línea para incluir una de sus claves públicas.

  4. Utilice el comando genisoimage para crear una imagen ISO que incluya user-data y meta-data.

    # genisoimage -output ciiso.iso -volid cidata -joliet -rock user-data meta-data
    
    I: -input-charset not specified, using utf-8 (detected in locale settings)
    Total translation table size: 0
    Total rockridge attributes bytes: 331
    Total directory bytes: 0
    Path table size(bytes): 10
    Max brk space used 0
    183 extents written (0 MB)
  5. Descargue una imagen de invitado KVM desde el Portal del Cliente de Red Hat al directorio /var/lib/libvirt/images.
  6. Cree una nueva VM a partir de la imagen huésped de KVM utilizando el comando virt-install. Incluya la imagen ISO que ha creado como archivo adjunto a la imagen.

    virt-install \
        --memory 4096 \
        --vcpus 4 \
        --name mytestcivm \
        --disk /var/lib/libvirt/images/rhel-8.1-x86_64-kvm.qcow2,device=disk,bus=virtio,format=qcow2 \
        --disk /home/sample/cloudinitiso/ciiso.iso,device=cdrom \
        --os-type Linux \
        --os-variant rhel8.0 \
        --virt-type kvm \
        --graphics none \
        --import
  7. Acceda a su imagen como cloud-user. Su contraseña es cilogon.

    citest-1 login: cloud-user
    Password:
    [cloud-user@citest-1 ~]$

Pasos de verificación

  • Compruebe el estado de cloud-init para ver si ha completado sus tareas.

    [cloud-user@citest-1 instance]$ cloud-init status
    status: done
  • cloud-init crea la disposición del directorio cloud-init bajo /var/lib/cloud cuando se ejecuta, y actualiza o cambia ciertos contenidos del directorio basándose en las directivas que has especificado.

    Por ejemplo, puede confirmar que la fuente de datos es NoCloud comprobando el archivo de la fuente de datos.

    $ cd /var/lib/cloud/instance
    $ cat datasource
    DataSourceNoCloud: DataSourceNoCloud [seed=/dev/sr0][dsmode=net]

    cloud-init copia los datos del usuario en /var/lib/cloud/instance/user-data.txt.

    $cat user-data.txt
    #cloud-config
    password: cilogon
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...fhHQ== sample@redhat.com

    Estos son ejemplos. El diseño del directorio cloud-init incluye mucha más información.

Nota

En el caso de OpenStack, la Guía de instancias e imágenes incluye información para configurar una instancia mediante cloud-init. Consulte Creación de una instancia personalizada para conocer los procedimientos específicos.

Recursos adicionales

3.2. Expiración de la contraseña de un usuario de la nube con cloud-init

Puede forzar a cloud-user a cambiar la contraseña de cloud-user en el primer inicio de sesión. Realice el siguiente procedimiento para hacer caducar una contraseña.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Cambie la línea chpasswd: {expire: False} por chpasswd: {expire: True}.

    #cloud-config
    password: mypassword
    chpasswd: {expire: True}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com

    Esto funciona para caducar la contraseña porque password y chpasswd operan con el usuario por defecto a menos que se indique lo contrario.

    Nota

    Esta es una configuración global. Si establece chpasswd en True, todos los usuarios que cree deberán cambiar sus contraseñas cuando se conecten.

3.3. Cambiar un nombre de usuario por defecto con cloud-init

Puede cambiar el nombre de usuario por defecto por otro que no sea cloud-user.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añade la línea user: <username>, sustituyendo <username> por el nuevo nombre de usuario por defecto.

    #cloud-config
    user: username
    password: mypassword
    chpasswd: {expire: False}
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com

3.4. Establecer una contraseña de root con cloud-init

Para establecer la contraseña de root, cree una lista de usuarios.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Cree una lista de usuarios en la sección chpasswd del archivo. El formato se muestra en el siguiente ejemplo.

    Nota

    Los espacios en blanco son importantes. No incluya espacios en blanco antes o después de los dos puntos en su lista de usuarios. Si incluye espacios en blanco, la contraseña se establece con un espacio en ella.

    #cloud-config
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAA...SDvz user1@yourdomain.com
      - ssh-rsa AAB...QTuo user2@yourdomain.com
    chpasswd:
      list: |
         root:myrootpassword
         cloud-user:mypassword
      expire: False
    Nota

    Si utiliza este método para establecer la contraseña del usuario, debe establecer all passwords en esta sección.

3.5. Gestión de las suscripciones de Red Hat con cloud-init

Puede utilizar la directiva rh_subscription para registrar su sistema. Los ejemplos son los siguientes. Para cada suscripción, usted editaría sus datos de usuario.

Procedimiento

El siguiente ejemplo utiliza las opciones auto-attach y service-level.

  • En rh_subscription, añada su username y password, ponga auto-attach en True, y ponga service-level en self-support.

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

    La opción service-level requiere que se utilice la opción auto-attach.

El siguiente ejemplo utiliza las opciones activation-key y org.

  • En rh_subscription, añada su número activation key y org y establezca auto-attach a True.

    rh_subscription:
      activation-key: example_key
      org: 12345
      auto-attach: True

El siguiente ejemplo añade un grupo de suscripción.

  • En rh_subscription, añada su username, password, y el número de piscina.

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

    Esta muestra es el equivalente al comando subscription-manager attach --pool=XYZ01234567.

El siguiente ejemplo establece un nombre de host del servidor en el archivo /etc/rhsm/rhsm.conf.

  • En rh_subscription, añada su username, password, server-hostname, y ponga auto-attach en True.

    rh_subscription:
      username: sample@redhat.com
      password: 'password'
      server-hostname: test.example.com
      auto-attach: True

3.6. Añadir usuarios y opciones de usuario con cloud-init

Los usuarios se crean y describen en una sección de users. Puede modificar la sección para añadir más usuarios a la configuración inicial del sistema, y puede establecer opciones de usuario adicionales.

Si añade la sección users, también debe establecer las opciones de usuario por defecto en esta sección.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añade o modifica la sección users para añadir usuarios.

    • Si quieres que cloud-user sea el usuario creado por defecto junto con los demás usuarios que especifiques, asegúrate de añadir default como primera entrada de la sección. Si no es la primera entrada, no se crea cloud-user.
    • Por defecto, los usuarios son etiquetados como unconfined_u si no hay un valor selinux-user.

      #cloud-config
      users:
        - default
        - name: user2
          gecos: User N. Ame
          selinux-user: staff_u
          groups: users,wheel
          ssh_pwauth: True
          ssh_authorized_keys:
            - ssh-rsa AA..vz user@domain.com
      chpasswd:
        list: |
          root:password
          cloud-user:mypassword
          user2:mypassword2
        expire: False
      Nota
      • El ejemplo coloca al usuario user2 en dos grupos, users y wheel.
      • A partir de cloud-init 0.7.5, la lista de grupos no admite espacios en blanco. Consulte BZ 1126365 para obtener más información.

3.7. Ejecución de los primeros comandos de arranque con cloud-init

Puedes utilizar las secciones runcmd y bootcmd para ejecutar comandos durante el arranque y la inicialización.

La sección bootcmd se ejecuta al principio del proceso de inicialización y por defecto se ejecuta en cada arranque. La sección runcmd se ejecuta cerca del final del proceso y sólo se ejecuta durante el primer arranque y la inicialización.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añade las secciones para bootcmd y runcmd; incluye los comandos que quieras que ejecute cloud-init.

    #cloud-config
    users:
      - default
      - name: user2
        gecos: User N. Ame
        groups: users
    chpasswd:
      list: |
        root:password
        fedora:myfedpassword
        user2:mypassword2
      expire: False
    bootcmd:
     - echo New MOTD >> /etc/motd
    runcmd:
     - echo New MOTD2 >> /etc/motd

3.8. Añadir sudoers adicionales con cloud-init

Puede configurar un usuario como sudoer añadiendo una entrada sudo y groups en la sección users.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añada una entrada en sudo y especifique el acceso del usuario. Por ejemplo, sudo: ALL=(ALL) NOPASSWD:ALL permite a un usuario el acceso sin restricciones.
  3. Añade una entrada en groups y especifica los grupos que incluyen al usuario.

    #cloud-config
    users:
      - default
      - name: user2
        gecos: User D. Two
        sudo: ["ALL=(ALL) NOPASSWD:ALL"]
        groups: wheel,adm,systemd-journal
        ssh_pwauth: True
        ssh_authorized_keys:
          - ssh-rsa AA...vz user@domain.com
    chpasswd:
      list: |
        root:password
        cloud-user:mypassword
        user2:mypassword2
      expire: False

3.9. Establecer una configuración de red estática con cloud-init

Puede establecer su configuración de red con cloud-init añadiendo una sección network-interfaces a sus metadatos.

Red Hat Enterprise Linux proporciona su servicio de red por defecto a través de NetworkManager, que es un demonio de control y configuración de red dinámico que mantiene los dispositivos de red y las conexiones activas cuando están disponibles. Consulte Introducción a NetworkManager para obtener más información sobre NetworkManager.

Su fuente de datos puede proporcionar una configuración de red. Consulte la sección de documentación cloud-init Fuentes de configuración de red para obtener más información.

Si no especifica ninguna configuración de red para cloud-init y no ha desactivado la configuración de red, cloud-init intenta determinar si algún dispositivo conectado tiene una conexión. Si encuentra un dispositivo conectado, genera una configuración de red que emite una petición DHCP en la interfaz. Consulte la sección de la documentación cloud-init Configuración de red de reserva para obtener más información.

Procedimiento

El siguiente ejemplo añade una configuración de red estática.

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añade una sección network-interfaces.

    network-interfaces: |
      iface eth0 inet static
      address 192.168.1.10
      network 192.168.1.0
      netmask 255.255.255.0
      broadcast 192.168.1.255
      gateway 192.168.1.254
    bootcmd:
      - ifdown eth0
      - ifup eth0
Nota

Puede desactivar una configuración de red añadiendo la siguiente información a sus metadatos.

network
  config: disabled

Recursos adicionales

3.10. Configurar sólo un usuario root con cloud-init

Puedes configurar tus datos de usuario de forma que tengas un usuario root y ningún otro usuario.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Cree una entrada para el usuario root en la sección users.

    El sencillo ejemplo que sigue incluye una sección users con sólo la opción name.

    users:
      - name: root
    chpasswd:
      list: |
        root:password
      expire: False
  3. Opcionalmente, configure las claves SSH para el usuario root.

    users:
      - name: root
        ssh_pwauth: True
        ssh_authorized_keys:
          - ssh-rsa AA..vz user@domain.com

3.11. Configuración del almacenamiento con container-storage-setup en cloud-init

Puede configurar el almacenamiento haciendo referencia a la utilidad container-storage-setup dentro del módulo write_files.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de datos de usuario para editarlo, o bien añada la siguiente directiva al directorio cloud.cfg.d.

    Nota

    Todas las directivas de usuario incluyen #cloud-config al principio del archivo para que cloud-init reconozca que el archivo contiene directivas de usuario. Cuando incluya directivas en el directorio cloud.cfg.d, nombre el archivo *.cfg, e incluya siempre #cloud-config al principio del archivo.

  2. Añada o modifique el módulo write_files para incluir la ruta de acceso a la utilidad container-storage-setup.

    El siguiente ejemplo establece el tamaño del volumen lógico raíz a 6GB en lugar de los 3GB por defecto.

    write_files:
      - path: /etc/sysconfig/docker-storage-setup
        permissions: 0644
        owner: root
        content: |
        ROOT_SIZE=6G
    Nota

    Antes de RHEL 7.4, container-storage-setup se llamaba docker-storage-setup. Si está utilizando OverlayFS para el almacenamiento, a partir de RHEL 7.4 puede utilizar ese tipo de sistema de archivos con SELinux en modo de refuerzo.

3.12. Cambiar la configuración regional del sistema con cloud-init

Puede configurar la ubicación del sistema con el módulo locale.

Procedimiento

  1. Dependiendo de los requisitos de su fuente de datos, abra su archivo de metadatos para editarlo, o bien añada la siguiente directiva al archivo cloud.cfg o al directorio cloud.cfg.d.
  2. Añade la directiva locale, especificando la ubicación. El siguiente ejemplo establece el locale a ja_JP (Japón) con codificación UTF-8.
#cloud-config
locale: ja_JP.UTF-8

Recursos adicionales

3.13. cloud-init y scripts de shell

Puede añadir valores de lista o valores de cadena a bootcmd o runcmd. También puede proporcionar un script de shell dentro de sus datos de usuario.

  • Si utiliza un valor de lista para bootcmd o runcmd, cada elemento de la lista se ejecuta a su vez utilizando execve.
  • Si se utiliza un valor de cadena, toda la cadena se ejecuta como un script de shell.
  • Si desea utilizar cloud-init para ejecutar un script de shell, puede proporcionar un script de shell (completo con shebang (#!) ) en lugar de proporcionar a cloud-init un archivo .yaml.

Consulte la sección Ejecutar comandos en el primer arranque para ver ejemplos de cómo poner scripts de shell en bootcmd y runcmd.

3.14. Evitar que cloud-init actualice los archivos de configuración

Cuando se crea o restaura una instancia a partir de una imagen de copia de seguridad, el ID de la instancia cambia. El cambio de ID de instancia puede hacer que cloud-init actualice los archivos de configuración.

Realice el siguiente procedimiento para asegurarse de que cloud-init no actualiza ciertos archivos de configuración cuando crea o restaura desde una copia de seguridad.

Procedimiento

  1. Abra el archivo /etc/cloud/cloud.cfg para editarlo.
  2. Comente o elimine la configuración que no desea que cloud-init actualice cuando restaure su instancia.

    Por ejemplo, para evitar la actualización del archivo de claves SSH, elimine -ssh de la sección cloud_init_modules.

    cloud_init_modules:
     - disk_setup
     - migrator
     - bootcmd
     - write-files
     - growpart
     - resizefs
     - set_hostname
     - update_hostname
     - update_etc_hosts
     - rsyslog
     - users-groups
     # - ssh

Pasos de verificación

Puede comprobar qué archivos de configuración ha actualizado cloud-init. Para ello, examine el archivo /var/log/cloud/cloud-init.log. Los archivos actualizados se registran durante el inicio de la instancia con mensajes que comienzan con Writing to. A continuación, un ejemplo.

2019-09-03 00:16:07,XXX - util.py[DEBUG]: Writing to /root/.ssh/authorized_keys - wb: [XXX] 554 bytes
2019-09-03 00:16:08,XXX - util.py[DEBUG]: Writing to /etc/ssh/sshd_config - wb: [XXX] 3905 bytes

3.15. Modificación de una VM creada a partir de una imagen huésped de KVM después de la ejecución de cloud-init

Esta sección proporciona un procedimiento de ejemplo para cuando quiera modificar la configuración de cloud-init antes de volver a ejecutar cloud-init. Cuando usted lanza una VM que incluye el paquete cloud-init instalado y habilitado, cloud-init se ejecuta en su estado por defecto en ese arranque inicial de su VM.

Procedimiento

  1. Inicie sesión en su máquina virtual.
  2. Añada o cambie las directivas, por ejemplo, modifique el archivo cloud.cfg en el directorio /etc/cloud o añada directivas al directorio /etc/cloud/cloud.cfg.d.
  3. Ejecute el comando cloud-init clean para limpiar los directorios y así poder volver a ejecutar cloud-init. También puede ejecutar los siguientes comandos como root para limpiar la VM.

    `rm -Rf /var/lib/cloud/instances/*`
    `rm -Rf /var/lib/cloud/instance`
    `rm -Rf /var/lib/cloud/data/*`
    Nota

    Puede guardar la imagen limpiada como una nueva imagen y utilizarla para varias máquinas virtuales. Las nuevas máquinas virtuales se ejecutan en cloud-init utilizando la configuración actualizada de cloud-init.

  4. Vuelva a ejecutar cloud-init o reinicie la máquina virtual.

    cloud-init vuelve a ejecutarse, implementando los cambios de configuración que ha realizado.

3.16. Modificación de una VM para una fuente de datos específica después de la ejecución de cloud-init

Esta sección proporciona un procedimiento de ejemplo para cuando desee modificar la configuración de cloud-init antes de volver a ejecutar cloud-init. El siguiente procedimiento utiliza OpenStack como ejemplo. Tenga en cuenta que el procedimiento varía en función de su fuente de datos.

Procedimiento

  1. Cree y lance una instancia para la plataforma OpenStack. Consulte Instancias de máquinas vir tuales para obtener información sobre la creación de instancias para OpenStack. En este ejemplo, nuestra máquina virtual incluye cloud-init, que se ejecuta al arrancar la máquina virtual.
  2. Agregue o cambie las directivas. Por ejemplo, modificar el archivo user-data.file que se almacena en el servidor HTTP de OpenStack.
  3. Limpie la máquina virtual. Ejecute los siguientes comandos como root.

    `rm -rf /etc/resolv.conf /run/cloud-init`
    `userdel -rf cloud-user`
    `hostnamectl set-hostname localhost.localdomain`
    `rm /etc/NetworkManager/conf.d/99-cloud-init.conf`
    Nota

    Puede guardar la imagen limpiada como una nueva imagen y utilizarla para varias máquinas virtuales. Las nuevas máquinas virtuales ejecutan cloud-init utilizando su configuración actualizada de cloud-init.

  4. Vuelva a ejecutar cloud-init o reinicie la máquina virtual.

    Cloud-init se vuelve a ejecutar, implementando los cambios de configuración realizados.

3.17. Solución de problemas de cloud-init

Puede solucionar los problemas de su instancia después de que se haya ejecutado cloud-init examinando su configuración y los archivos de registro. Una vez que haya identificado el problema, puede volver a ejecutar cloud-init en su instancia.

Puede ejecutar cloud-init desde la línea de comandos utilizando el comando cloud-init. Para ver la sintaxis del comando, junto con una descripción de los argumentos y subcomandos opcionales, ejecute el comando cloud-init --help. La sintaxis básica es la siguiente.

cloud-init [-h] [--version] [--file FILES] [--debug] [--force]
{init,modules,single,query,dhclient-hook,features,analyze,devel,collect-logs,clean,status}

El procedimiento que sigue ofrece ideas para identificar problemas con cloud-init y muestras para volver a ejecutar el programa.

Procedimiento

  1. Revise los archivos de configuración de cloud-init.

    1. Examine el archivo de configuración /etc/cloud/cloud.cfg. Compruebe qué módulos están incluidos en cloud_init_modules, cloud_config_modules, y cloud_final_modules.
    2. Compruebe las directivas (archivos*.cfg ) en el directorio /etc/cloud/cloud.cfg.d.
  2. Revise los archivos /var/log/cloud-init.log y /var/log/cloud-init-output.log para obtener detalles sobre un problema específico. Por ejemplo, si el problema era que la partición raíz no se extendía automáticamente, compruebe los mensajes de registro de growpart. Si el sistema de archivos no se extendió, revise los mensajes de registro para resizefs. A continuación se muestra un ejemplo de comando grep para resizefs.

    # grep resizefs /var/log/cloud-init.log
    Nota

    growpart no soporta LVM. Si su partición raíz está basada en LVM, la partición raíz no se extiende automáticamente en el primer arranque.

  3. Vuelva a ejecutar cloud-init. A continuación se presentan ejemplos de escenarios. Ejecute los comandos como root.

    • Vuelva a ejecutar cloud-init sólo con los módulos init.

      /usr/bin/cloud-init -d init
    • Vuelva a ejecutar cloud-init con todos los módulos de su configuración.

      /usr/bin/cloud-init -d módulos
    • Borrar la caché de cloud-init y forzar la ejecución de cloud-init tras el arranque.

      rm -rf /var/lib/cloud/* && /usr/bin/cloud-init -d init
    • Ejecute los siguientes comandos para limpiar los directorios y simular una instancia limpia.

      rm -Rf /var/lib/cloud/instances/*
      rm -Rf /var/lib/cloud/instance
      rm -Rf /var/lib/cloud/data/*
      reboot
    • Ejecute los siguientes comandos para volver a ejecutar cloud-init.

      cloud-init init --local
      cloud-init init

Recursos adicionales