Retour au blog

Une introduction au provisionnement de serveurs avec CloudInit

Une introduction au provisionnement de serveurs avec CloudInit

Ce mois-ci, nous avons annoncé un très excitant partenariat avec Canonical, les créateurs d'Ubuntu. Avant tout, l'élément principal de ce partenariat est l'introduction d'une prise en charge complète de CloudInit entre le cloud CloudSigma et Ubuntu.

Une introduction à CloudInit

Si vous n’êtes pas familier avec CloudInit, c’est la norme de l’industrie pour le bootstrapping de serveurs cloud. Pour clarifier, si vous utilisez un simple DSL il est possible d’effectuer facilement des tâches lors du premier démarrage. Il convient également de souligner que CloudInit n’est pas limité à Ubuntu. Aujourd’hui, vous trouverez la prise en charge de CloudInit dans la plupart des distributions Linux modernes (mais les clouds pris en charge varieront).

Avant de commencer avec CloudInit, il est important de comprendre où CloudInit s’intègre dans l’écosystème de provisionnement. S’il est possible d’exécuter CloudInit en tant que système de provisionnement autonome, il est beaucoup plus courant de l’utiliser en conjonction avec un autre système de provisionnement, comme Ansible, Chef, Puppet ou Salt. Dans ce cas, vous utiliseriez simplement CloudInit pour amener votre nouveau serveur à un état où le système de provisionnement peut prendre le relais. Personnellement, j’utilise souvent CloudInit en combinaison avec Ansible.

Utiliser CloudInit sur CloudSigma

L’utilisation de CloudInit sur CloudSigma est très simple.

Pour utiliser CloudInit sur un serveur Ubuntu 14.04, suivez les étapes suivantes :

    • Clonez le disque “Ubuntu 14.04 Cloud Image” depuis le marketplace (actuellement le seul disque entièrement pris en charge avec CloudInit). Assurez-vous de redimensionner le disque cloné à la taille souhaitée et il étendra automatiquement le système de fichiers au premier démarrage.
    • Créez un nouveau serveur.
    • Une fois le serveur créé, vous verrez un bouton CloudInit sous le statut du serveur.

CloudInit

    • Lorsque vous cliquez sur ce bouton, la boîte de dialogue suivante apparaît.

CloudInit_activate

  • Collez simplement vos données CloudInit ici, et appuyez sur ‘Activer’.
  • Vous pouvez démarrer votre serveur et le script s’exécutera au premier démarrage.

Installer des clés SSH avec CloudInit

Maintenant que vous savez comment utiliser CloudInit sur notre cloud, mettons ces nouvelles connaissances à profit en l’utilisant pour installer deux clés SSH. Les deux clés SSH publiques fictives que nous utiliserons sont ‘ssh-rsa AAA[…] user1@host‘ et ‘ssh-rsa AAA[…] user2@host‘. (Pour en savoir plus sur la génération de clés SSH, veuillez consulter cette page sur Github.)

Sur les images cloud Ubuntu, le nom d’utilisateur par défaut est ‘ubuntu’. Par conséquent, les clés seront installées dans ce compte d’utilisateur.

La configuration CloudInit pour cela ressemblerait à ceci :

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]

Veuillez noter que les espaces comptent. Il y a deux espaces avant le ‘-‘. Si vous n’en mettez qu’un seul, il se peut qu’il ne soit pas lu par le serveur.

Une fois que vous avez enregistré la configuration CloudInit et démarré le serveur, vous devriez pouvoir vous connecter en SSH au serveur en utilisant l’utilisateur ‘ubuntu’ :

[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Sun Oct 19 21:51:54 UTC 2014

System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]

Installer les mises à jour du système avec CloudInit

Une autre chose très utile que vous pouvez facilement accomplir avec CloudInit est d’exécuter les mises à jour du système lors du premier démarrage. Bien que nous actualisions fréquemment nos images de disque, c’est toujours une bonne idée de prendre des précautions supplémentaires pour vous assurer que vos systèmes sont à jour.

Pour installer les mises à jour du système au premier démarrage, ajoutez ce qui suit :

[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]

Vous remarquerez peut-être également qu'il existe une option similaire appelée ‘package_update,’ qui est un alias indépendant de la distribution pour ‘apt_update’ sur Ubuntu.

De plus, ‘apt_update’ sera défini sur true par défaut si ‘packages’ (ci-dessous) est défini, mais je l'ai ajouté ci-dessus pour le rendre plus explicite.

Installer des paquets avec CloudInit

Une partie fondamentale de l'initialisation (bootstrapping) des systèmes consiste à pouvoir installer des paquets au démarrage. Heureusement, CloudInit facilite également cela. Tout ce que nous avons à faire est de spécifier une liste des paquets que nous voulons installer sous ‘packages.’ Par exemple, si nous voulons installer ‘python-pip,’ ‘fail2ban’ et ‘vim’, cela ressemblerait à ceci :

[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]

Encore une fois, veuillez noter que les espaces sont importants. Il y a deux espaces avant le ‘-‘.

Définir le nom d'hôte avec CloudInit

Lorsque vous provisionnez un nouveau serveur, vous pouvez également vouloir définir son nom d'hôte.

[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]

Exécuter des commandes au premier démarrage avec CloudInit

En supposant que vous fassiez quelque chose de plus sophistiqué avec vos serveurs, il y a de fortes chances que vous ayez une commande à exécuter lors du premier démarrage.

C'est là que ‘runcmd’ et ‘bootcmd’ entrent en jeu. Tous deux vous permettent d'exécuter des commandes au premier démarrage. La différence est que ‘bootcmd’ s'exécute plus tôt dans le processus de démarrage que ‘runcmd.’

Pour utiliser l'une ou l'autre de ces commandes, ajoutez ce qui suit à votre CloudInit :

[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Utiliser CloudInit avec un gestionnaire de configuration

Enfin, si vous êtes un utilisateur cloud plus expérimenté, vous utilisez très probablement un gestionnaire de configuration. Heureusement, CloudInit est préparé pour cela. C'est cependant un sujet assez complexe à aborder, compte tenu des nombreuses variables.

Voici donc quelques exemples qui devraient vous orienter dans la bonne direction :

Comment lier plusieurs éléments ensemble

Pour ceux qui ne sont pas familiers avec les fichiers de style YAML, il n'est peut-être pas évident de savoir comment enchaîner plusieurs éléments CloudInit. C'est pourtant simple. Sur la première ligne, vous avez besoin de ‘#cloud-config‘. Après cela, vous ajoutez simplement votre configuration.

Par exemple, la combinaison de tous les exemples ci-dessus en une seule configuration ressemblerait à ceci :

[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]

Ressources supplémentaires

Nous n'avons fait qu'effleurer la surface de ce que CloudInit peut faire dans cet article. Il y a une multitude d'autres choses que vous pouvez également faire pour apprendre, comme créer des utilisateurs et des groupes, écrire des fichiers sur le disque et appeler des URL une fois terminé (pour notifier d'autres systèmes).

Si vous souhaitez en savoir plus sur CloudInit, je vous recommande les sources suivantes :

author

Viktor Petersson

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.