GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Qué es Cloud-Init?

Introducción

Las instancias de nube se basan en imágenes de nube predeterminadas. Dado que cada instancia utiliza un sistema operativo de plantilla, depende del usuario configurar y configurar una instancia única utilizando los datos del usuario.

En lugar de configurar cada uno después de que se ejecute, existe una herramienta de código abierto que automatiza la inicialización:cloud-init .

¿Qué es cloud-init?

Cloud-init es un servicio utilizado para personalizar sistemas operativos basados ​​en Linux en la nube. Le permite personalizar máquinas virtuales proporcionadas por un proveedor de la nube modificando la configuración genérica del sistema operativo en el arranque. Canonical inicialmente desarrolló cloud-init para Ubuntu, pero se expandió a la mayoría de los principales sistemas operativos Linux y FreeBSD. Actualmente, admite oficialmente 8 sistemas operativos Unix:Ubuntu, Arch Linux, CentOS, Red Hat, FreeBSD, Fedora, Gentoo Linux y openSUSE.

El servicio se utiliza como un estándar de la industria para la inicialización en etapa temprana de una máquina virtual una vez que se ha aprovisionado. Por lo tanto, le permite configurar una máquina virtual para que funcione según sea necesario en el primer arranque.

La mayoría de los proveedores tienen el servicio preinstalado en las imágenes del sistema operativo Unix. Al crear una máquina virtual con el panel de proveedores de la nube, lo más probable es que tenga un cloud-init o datos de usuario sección para especificar la configuración deseada.

Cloud-init se usa para instalar paquetes, configurar usuarios y seguridad, escribir archivos y realizar otras tareas que desea que se manejen automáticamente en el primer arranque o en los posteriores.

¿Cómo funciona cloud-init?

Cloud-init es un servicio que configura su instancia de VM con la configuración deseada y el software listo para usar. El servicio se inicia en el arranque y utiliza los metadatos proporcionados por el proveedor de la nube o el usuario directo.

Lo hace mediante la ejecución de scripts, más comúnmente desde cloud-config expediente. Por lo tanto, para cambiar cualquier configuración predeterminada, debe editar el archivo de configuración de la nube en su imagen de VM. Este es un archivo YAML que sigue las reglas básicas de sintaxis YAML, como:

  • Las relaciones entre elementos se definen mediante sangrías con espacios en blanco .
  • Un carácter de tubería (| ) antes de que un texto indique que debe interpretarse tal cual.
  • Los bloques de texto están sangrados .
  • Un guion inicial (- ) identifica a los miembros de una lista.
  • Un dos puntos (: ) + espacio + valor se utiliza para crear entradas de matrices asociativas.

Puede agregar el archivo de configuración de la nube:

  1. En la interfaz del plano de control, al seleccionar opciones adicionales. El proveedor tendrá un cloud-init o Datos de usuario opción donde puede pegar el archivo de configuración.
  2. A través de un archivo en el objeto JSON en una solicitud de API.

Capacidades de inicio en la nube

El servicio cloud-init se usa para una variedad de cosas, que incluyen:

  • Agregar usuarios y grupos.
  • Escribir archivos arbitrarios.
  • Agregar repositorios YUM.
  • Ejecución de comandos en el primer arranque.

Para aprender la sintaxis utilizada para cada capacidad, lea las subsecciones a continuación.

Agregar usuarios y grupos usando cloud-init

Para agregar usuarios y grupos a una VM durante el aprovisionamiento, use la siguiente sintaxis en su archivo de configuración de la nube:

#cloud-config
# Add groups to the system.
groups:
  - group_name: [member1,member2]
# Add users to the system.
users:
 - default
 - name: User’s login name.
   gecos: User’s real name.
   primary_group: The primary group the user belongs to. If omitted, a new group is created under the user’s name.
   groups: Additional groups to which you want to add the user.
   selinux_user: The SELinux user for the user's login. If omitted, the system selects the default SELinux user.
   expiredate: 'year-month-day' - Data when the user’s account should be disabled.
   ssh_import_id: SSH IDs which you want to import.
   lock_passwd: Use true or false to define whether you want to lock the password to disable password login. By default, the value is set to true.
   inactive: 'x' - The number of days until the account is disabled after a password expires.
   passwd: The hash of the password you want to use.
   ssh_authorized_keys: Add keys to user’s authorized keys file:
      - <ssh pub key 1>
      - <ssh pub key 2>
   system: Use true or false to define the new user as a system user.
   sudo: Use sudo rule string(s) to define the user privileges. The user has no privileges by default, but it can accept one or multiple sudo rule strings. For example, add ALL=(ALL) NOPASSWD:ALL to give the user unrestricted access. To prevent sudo access, type: False.
  - snapuser: Specify the email for your Ubuntu SSO account to allow snap to import a username and public keys into the system.

No necesita incluir todas las opciones al agregar un nuevo usuario. Las configuraciones enumeradas anteriormente se aplican solo si el usuario es nuevo. Si el usuario ya existe, el sistema solo modifica las siguientes opciones:

  • texto_sin formato_contraseña
  • hashed_passwd
  • bloquear_contraseña
  • sudo
  • ssh_autorizadas_claves
  • ssh_redirect_user

Escribir archivos arbitrarios

Puede escribir archivos arbitrarios utilizando la sintaxis de configuración de yaml. El contenido puede codificarse (base64 o gzip) y especificarse en texto plano o binario. Antes de que los datos se escriban en la ruta definida, se decodifican. El módulo es compatible con todas las distribuciones y tiene un módulo de frecuencia de una vez por instancia.

Para escribir archivos arbitrarios con cloud-init, use la siguiente sintaxis:

#cloud-config
# Write out arbitrary files
write_files:
  path: The file path to which the content is added.
  content: The content you want to add to the path.
  owner: The user/group that has ownership. By default, the owner is root:root.
  permissions: The permission of the specified path, defined with the appropriate octal string. The default permission is ‘0644’.
  append: Use true or false to choose whether to append the specified content to an existing file if the path provided exists. The default value is false.

Agregar repositorios YUM

Es posible que deba configurar un repositorio de yum para asegurarse de que está utilizando los paquetes correctos para instalar el software deseado. Utilice cloud-init para agregar configuraciones de repositorio de yum al sistema. El archivo de configuración se agrega a /etc/yum.repos.d .

Para agregar una configuración de repositorio yum, use la sintaxis:

yum_repos:
  <repo_name>:
            baseurl: Repository URL.
            name: Repository name.
            enabled: true/false
            + any other repository configuration option

Ejecución de comandos en el primer arranque

Para ejecutar comandos arbitrarios al principio del proceso de arranque, puede usar el bootcmd o ejecutar cmd módulo.

bootcmd ejecutar comandos específicos en cada inicio, después de ejecutar un boothook . Admite todas las distribuciones y acepta comandos especificados como listas o cadenas. La sintaxis es:

bootcmd: 
   - array of (array of string)/(string)

Por ejemplo:

bootcmd:
  - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
  - [cloud-init-per, once, mymkfs, mkfs, /dev/vdb ]

runcmd ejecuta un comando solo en el primer arranque. Puede ejecutar comandos especificados como listas o cadenas. Todos los comandos deben estar en la sintaxis yaml (por lo tanto, asegúrese de citar cualquier carácter problemático). La sintaxis es:

runcmd: 
   - array of (array of string)/(string)

Como en el siguiente ejemplo:

runcmd:
 - [ ls, -l, / ]
 - [ sh, -xc, "echo $(date) ': hello world!'" ]
 - [ sh, -c, echo "=========hello world'=========" ]
 - ls -l /root

Configurar claves SSH

Puede administrar la configuración de SSH mediante cloud-init.

Las claves autorizadas son claves SSH almacenadas en el directorio de inicio del usuario, en .ssh/authorized_keys . Definen qué claves pueden conectarse a esa cuenta de usuario específica en el sistema. Agregue las claves públicas como una lista al configurar un usuario usando ssh_authorized_key :

ssh_authorized_keys:
  - ssh_pub_key_1
  - ssh_pub_key_2

Las claves listadas serán del usuario configurado o de la primera definida en el módulo de usuario.

Si ya tiene claves SSH privadas generadas previamente, puede almacenarlas en el servidor. Cloud-init admite criptosistemas de clave pública RSA, DSA y ECDS. Asegúrese de prestar atención al formato al agregar las claves SSH:use saltos de línea, bloques, claves de canalización y siempre especifique la CLAVE PRIVADA INICIAL y la CLAVE PRIVADA FINAL.


ssh_keys:
  rsa_private: |
    -----BEGIN RSA PRIVATE KEY-----
    your_rsa_private_key
    -----END RSA PRIVATE KEY-----

  rsa_public: your_rsa_public_key

Configurar una configuración regional

Para configurar y aplicar una configuración regional del sistema en todo el sistema, utilice el cc_locale módulo. Utilice el siguiente shema de configuración para definir:

locale: What you want to configure as the system's locale.
locale_configfile: The path to the file where you want to write the locale configuration.

Defina el nombre de host

Con cloud-init, puede establecer el nombre de host y el FQDN (nombre de dominio completo). Hay varias formas de hacerlo:

  • Especifique el nombre de dominio completo usando el fqdn clave.
  • Defina el nombre de host usando el hostname clave.
  • Utilice el hostname clave para definir fqdn (no recomendado).
  • Utilice tanto el hostname clave y el fqdn clave.

Las claves de configuración para definir el nombre de host incluyen:

preserve_hostname: Use true or false to set whether to preserve the host name or allow altering. 
prefer_fqdn_over_hostname: Use true or false to set whether to force the use of FQDN in all distros.
fqdn: FQDN
hostname: FQDN/hostname

Ubuntu
  1. ¿Qué es un usuario de Linux?

  2. ¿Qué es Web 3.0?

  3. ¿Qué son las cuentas de usuario reservadas en MySQL?

  4. ¿Cuál es el propósito del usuario “mysql.sys@localhost”?

  5. ¿Qué tiene de vulnerable este código C?

¿Qué es Jenkins?

¿Qué es 127.0.0.1 Localhost?

¿Qué es Localhost?

Comando su en Linux

Useradd vs Adduser:¿Cuál es la diferencia?

¿Qué es el archivo /etc/passwd en Linux?