GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Qu'est-ce que Cloud-Init ?

Présentation

Les instances cloud sont basées sur des images cloud par défaut. Étant donné que chaque instance utilise un modèle de système d'exploitation, il appartient à l'utilisateur de configurer et de configurer une instance unique à l'aide des données utilisateur.

Au lieu de configurer chacun après son exécution, il existe un outil open source qui automatise l'initialisation - cloud-init .

Qu'est-ce que cloud-init ?

Cloud-init est un service utilisé pour personnaliser les systèmes d'exploitation basés sur Linux dans le cloud. Il vous permet de personnaliser les machines virtuelles fournies par un fournisseur de cloud en modifiant la configuration générique du système d'exploitation au démarrage. Canonical a initialement développé cloud-init pour Ubuntu, mais s'est étendu à la plupart des principaux systèmes d'exploitation Linux et FreeBSD. Aujourd'hui, il prend officiellement en charge 8 systèmes d'exploitation Unix :Ubuntu, Arch Linux, CentOS, Red Hat, FreeBSD, Fedora, Gentoo Linux et openSUSE.

Le service est utilisé comme norme de l'industrie pour l'initialisation précoce d'une machine virtuelle une fois qu'elle a été provisionnée. Par conséquent, il vous permet de configurer une machine virtuelle pour qu'elle fonctionne selon vos besoins au premier démarrage.

La plupart des fournisseurs ont le service préinstallé sur les images de système d'exploitation Unix. Lors de la création d'une machine virtuelle à l'aide du tableau de bord du fournisseur de cloud, vous aurez très probablement un cloud-init ou données utilisateur section pour spécifier la configuration souhaitée.

Cloud-init est utilisé pour installer des packages, configurer les utilisateurs et la sécurité, écrire des fichiers et effectuer d'autres tâches que vous souhaitez gérer automatiquement lors du premier démarrage ou des démarrages suivants.

Comment fonctionne cloud-init ?

Cloud-init est un service qui configure votre instance de VM avec la configuration souhaitée et le logiciel prêt à l'emploi. Le service démarre au démarrage et utilise les métadonnées fournies par le fournisseur de cloud ou l'utilisateur direct.

Pour ce faire, il exécute des scripts, le plus souvent à partir de cloud-config dossier. Par conséquent, pour modifier les paramètres par défaut, vous devez modifier le fichier cloud-config sur votre image de machine virtuelle. Il s'agit d'un fichier YAML qui suit les règles de base de la syntaxe YAML, telles que :

  • Les relations entre les éléments sont définies par des indentations avec des espaces .
  • Un caractère pipe (| ) avant qu'un texte indique qu'il doit être interprété tel quel.
  • Les blocs de texte sont indentés .
  • Un tir de tête (- ) identifie les membres d'une liste.
  • Un deux-points ( : ) + espace + valeur est utilisé pour créer des entrées de tableau associatif.

Vous pouvez ajouter le fichier cloud-config :

  1. Dans l'interface du plan de contrôle, lors de la sélection d'options supplémentaires. Le fournisseur aura un cloud-init ou Données utilisateur option où vous pouvez coller le fichier de configuration.
  2. Par l'intermédiaire d'un fichier dans l'objet JSON dans une requête API.

Capacités cloud-init

Le service cloud-init est utilisé pour une variété de choses, notamment :

  • Ajout d'utilisateurs et de groupes.
  • Écrire des fichiers arbitraires.
  • Ajout de référentiels YUM.
  • Exécuter des commandes au premier démarrage.

Pour connaître la syntaxe utilisée pour chaque capacité, lisez les sous-sections ci-dessous.

Ajouter des utilisateurs et des groupes à l'aide de cloud-init

Pour ajouter des utilisateurs et des groupes à une VM lors du provisionnement, utilisez la syntaxe suivante dans votre fichier cloud-config :

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

Vous n'avez pas besoin d'inclure toutes les options lors de l'ajout d'un nouvel utilisateur. Les configurations répertoriées ci-dessus s'appliquent uniquement si l'utilisateur est nouveau. Si l'utilisateur existe déjà, le système ne modifie que les options suivantes :

  • plain_text_passwd
  • hashed_passwd
  • lock_passwd
  • sudo
  • ssh_authorized_keys
  • ssh_redirect_user

Écrire des fichiers arbitraires

Vous pouvez écrire des fichiers arbitraires à l'aide de la syntaxe de configuration yaml. Le contenu peut être encodé (base64 ou gzip) et spécifié en texte brut ou binaire. Avant que les données ne soient écrites dans le chemin défini, elles sont décodées. Le module prend en charge toutes les distributions et dispose d'un module de fréquence d'une fois par instance.

Pour écrire des fichiers arbitraires avec cloud-init, utilisez la syntaxe suivante :

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

Ajout de référentiels YUM

Vous devrez peut-être configurer un référentiel yum pour vous assurer que vous utilisez les bons packages pour installer le logiciel souhaité. Utilisez cloud-init pour ajouter des configurations de référentiel yum au système. Le fichier de configuration est ajouté à /etc/yum.repos.d .

Pour ajouter une configuration de référentiel yum, utilisez la syntaxe :

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

Exécuter des commandes au premier démarrage

Pour exécuter des commandes arbitraires au début du processus de démarrage, vous pouvez utiliser le bootcmd ou runcmd module.

bootcmd exécuter des commandes spécifiques à chaque démarrage, après avoir exécuté un boothook . Il prend en charge toutes les distributions et accepte les commandes spécifiées sous forme de listes ou de chaînes. La syntaxe est :

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

Par exemple :

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

runcmd exécute une commande uniquement au premier démarrage. Il peut exécuter des commandes spécifiées sous forme de listes ou de chaînes. Toutes les commandes doivent être dans la syntaxe yaml (par conséquent, assurez-vous de citer tous les caractères problématiques). La syntaxe est :

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

Comme dans l'exemple suivant :

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

Configurer les clés SSH

Vous pouvez gérer la configuration SSH à l'aide de cloud-init.

Les clés autorisées sont des clés SSH stockées dans le répertoire personnel de l'utilisateur, dans .ssh/authorized_keys . Ils définissent quelles clés peuvent se connecter à ce compte d'utilisateur spécifique sur le système. Ajoutez les clés publiques sous forme de liste lors de la configuration d'un utilisateur à l'aide de ssh_authorized_key :

ssh_authorized_keys:
  - ssh_pub_key_1
  - ssh_pub_key_2

Les clés répertoriées appartiendront à l'utilisateur configuré ou au premier défini dans le module de l'utilisateur.

Si vous avez déjà des clés SSH privées pré-générées, vous pouvez les stocker sur le serveur. Cloud-init prend en charge les cryptosystèmes à clé publique RSA, DSA et ECDS. Assurez-vous de faire attention au formatage lors de l'ajout des clés SSH :utilisez des sauts de ligne, des blocs, des clés pipe et spécifiez toujours la clé privée de début et la clé privée de fin.


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

  rsa_public: your_rsa_public_key

Configurer un paramètre régional

Pour configurer et appliquer une locale système à l'échelle du système, utilisez le cc_locale module. Utilisez le schéma de configuration suivant pour définir :

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.

Définir le nom d'hôte

Avec cloud-init, vous pouvez définir le nom d'hôte et le FQDN (nom de domaine complet). Il existe plusieurs manières de procéder :

  • Spécifiez le nom de domaine complet en utilisant le fqdn clé.
  • Définir le nom d'hôte en utilisant le hostname clé.
  • Utilisez le hostname clé pour définir fqdn (non recommandé).
  • Utilisez à la fois le hostname key et le fqdn clé.

Les clés de configuration pour définir le nom d'hôte incluent :

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'est-ce qu'un utilisateur Linux ?

  2. Que sont les comptes d'utilisateurs réservés dans MySQL

  3. Quel est le but de l'utilisateur "mysql.sys@localhost"

  4. La manipulation de la fonction bash expliquée

  5. Qu'est-ce que l'utilisateur debian-+ ?

Qu'est-ce que Jenkins ?

Qu'est-ce que l'hôte local 127.0.0.1 ?

Qu'est-ce que Localhost ?

Commande su sous Linux

Useradd vs Adduser :quelle est la différence ?

Qu'est-ce que le fichier /etc/passwd sous Linux ?