Proxmox VE – Fedora CoreOS : Un mariage presque parfait

Au sein de Geco-iT, nous utilisons en production l’hyperviseur Proxmox VE depuis les débuts du projet (Version 0.9 – 2008). Pour rappel, Proxmox VE est une solution de virtualisation libre basée sur l’hyperviseur Linux QEMU/KVM :

Proxmox VE comprend les caractéristiques suivantes :

  • Système d’exploitation complet basé sur la dernière Debian Stable 64 bits
  • Interface Web et CLI d’administration et de supervision.
  • Outils de sauvegarde et de restauration
  • Fonctions de clustering
  • Support des Machines virtuelles complète grâce au module Linux KVM
  • Support des containers LXC
  • Gestion du stockage pour les VMs: LVM-Thin, ZFS, CEPH, iSCSI…
  • Outils de provisionnement : Cloud-Init

Pour nos projets d’orchestration de conteneurs Docker Swarm / Kubernetes, nous avons migré de la distribution CoreOS vers la distribution Fedora CoreOS.

Fedora CoreOS est un système d’exploitation mis à jour automatiquement, minimal et orienté conteneurs. Il est dérivé de la distribution communautaire Fedora et spécialement conçue pour les environnements conteneurisés. L’objectif est de soutenir les charges de travail conteneurisées de manière sécurisée.

La distribution CoreOS entend succéder à deux autres projets, Fedora Atomic Host et de CoreOS Container Linux. L’idée est de fusionner, au sein d’un système d’exploitation minimal, le support OCI, la technologie de packaging d’Atomic Host avec les outils de provisionnement et les mises à jour automatisées de CoreOS.

Fedora CoreOS est la base de Red Hat Enterprise Linux CoreOS (RHCOS).

Fedora CoreOS comprend les caractéristiques suivantes :

  • Mises à jour automatiques avec déploiement par phases
  • Système de base : Dernière Fedora
  • Dernier Noyau Linux stable
  • Outils de provisionnement : Ignition
  • Support OCI et des conteneurs Docker via Podman et Moby
  • Durcissement via SeLinux
  • Support cgroups par défaut

Proxmox VE utilise comme outil de provisionnement des Machine virtuelles (VM) Cloud-Init mais Fedora CoreOS n’est compatible qu’avec Ignition. Nous avons donc écrit un outil « wrapper » qui convertit la configuration Cloud-Init de proxmox en configuration compatible Ignition.

Notre wrapper Cloud-Init ⇔ Ignition prend en compte les paramètres suivants :

  • Le nom de l’utilisateur ; par défaut = admin
  • Le mot de passe
  • Le domaine DNS
  • Le serveur DNS
  • Le(s) clé(s) SSH
  • La/les configuration(s) IP (IPv4 uniquement)

Les sources sont disponible à l’adresse: https://git.geco-it.net/GECO-IT-PUBLIC/fedora-coreos-proxmox

Notre outil va automatiquement :

  1. Télécharger l’image de Fedora CoreOS
  2. Créer une machine virtuelle
  3. Importer l’image Fedora CoreOS en disque vm
  4. Ajouter un disque de configuration Cloud-Init
  5. Ajouter le « hook-script » hook-fcos.sh au démarrage de la VM
  6. Copier le template Ignition dans un stockage « Proxmox snippet »
  7. Convertir la VM en modèle (VM Template)
  • Activer un stockage « Proxmox snippet »

Sur la WebUI de Proxmox : DATACENTER ⇒ STORAGE ⇒ Sélectionner le stockage ⇒ Edit ⇒ Content ⇒ Sélectionner « Snippets »

  • Récupération des sources

Vous pouvez directement télécharger les sources sur https://git.geco-it.net/GECO-IT-PUBLIC/fedora-coreos-proxmox ou utiliser la commande git

En console linux root :

# installation git
root@vcg1:~# apt install git
 
# récupération des sources
root@vcg1:~# git clone https://git.geco-it.net/GECO-IT-PUBLIC/fedora-coreos-proxmox.git
...
root@vcg1:~# cd fedora-coreos-proxmox

Les paramètres de configuration se trouvent en début du fichier vmsetup.sh. Utilisez votre éditeur de texte favoris (vi, joe, nano…) pour éditer ce fichier

root@vcg1:~/fedora-coreos-proxmox# vi vmsetup.sh 

Paramétrage minimal :

  • TEMPLATE_VMID=“1000”
    L'id qui sera utilisé pour la VM Fedora CoreOS modèle
  • TEMPLATE_VMSTORAGE=“local”
    Le stockage Proxmox pour le disque de la VM modèle
  • SNIPPET_STORAGE=“local”
    Le stockage Proxmox Snippet

Une fois la configuration effectuée, vous pouvez créer le modèle FCOS en lançant la commande « vmsetup.sh »

root@vcg1:~/fedora-coreos-proxmox# ./vmsetup.sh 

La sortie du script devrait être:

root@vcg1:~/fedora-coreos-proxmox# ./vmsetup.sh 
Check if vm storage thin-ssd exist... [ok]
Check if snippet storage local exist... [ok]
Copy hook-script and ignition config to snippet storage...
'fcos-base-tmplt.yaml' -> '/var/lib/vz/snippets/fcos-base-tmplt.yaml'
'hook-fcos.sh' -> '/var/lib/vz/snippets/hook-fcos.sh'
Get storage "thin-ssd" type... [block]
Download fedora coreos...
fedora-coreos-32.20201018.3.0-qemu.x86_64.qcow2.xz  100%[=================>] 524.11M  59.8MB/s    in 8.5s    
fedora-coreos-32.20201018.3.0-qemu.x86_64.qcow2.xz (1/1)
  100 %      524.1 MiB / 1779.8 MiB = 0.294    55 MiB/s       0:32             
Create fedora coreos vm 
update VM 900: -agent enabled=1 -autostart 1 -boot c -bootdisk scsi0 -cores 4 -cpu host -memory 4096 -onboot 1 -ostype l26 -tablet 0
update VM 900: -description Fedora CoreOS - Geco-iT Template
 
 - Version             : 32.20201018.3.0
 - Cloud-init          : true
 
Creation date : 2020-11-26
 
update VM 900: -net0 virtio,bridge=vmbr0
 
Create Cloud-init vmdisk...
update VM 900: -ide2 thin-ssd:cloudinit
importing disk 'fedora-coreos-32.20201018.3.0-qemu.x86_64.qcow2' to VM 900 ...
transferred: 0 bytes remaining: 8589934592 bytes total: 8589934592 bytes progression: 0.00 %
transferred: 91053306 bytes remaining: 8498881286 bytes total: 8589934592 bytes progression: 1.06 %
transferred: 178670639 bytes remaining: 8411263953 bytes total: 8589934592 bytes progression: 2.08 %
...
transferred: 8589934592 bytes remaining: 0 bytes total: 8589934592 bytes progression: 100.00 %
Successfully imported disk as 'unused0:thin-ssd:vm-900-disk-0'
update VM 900: -scsi0 thin-ssd:vm-900-disk-0,discard=on -scsihw virtio-scsi-pci
update VM 900: -hookscript local:snippets/hook-fcos.sh
Convert VM 900 in proxmox vm template... [done]

 

  • Premier démarrage de la VM

public:vmfcos_firstboot.png

  • Démarrage suivant

Les paramètres du fichier ignition sont seulement appliqués sur la VM lors du 1er démarrage.

Afin d’appliquer les changements de configurations Cloud-Init ultérieurs, nous déployons grâce à ignition le service Geco-CloudInit dans la VM qui s’occupera de procéder aux changements.

Le fichier ignition que nous fournissons « fcos-base-tmplt.yaml » est une base de travail. Pour une configuration avancée, veuillez-vous reporter à la documentation : https://docs.fedoraproject.org/en-US/fedora-coreos/

Note configuration permet :

  • Corrige le service fstrim (Proxmox discard option)
  • Install l’agent qemu-guest-agent au 1er démarrage (le réseau doit être opérationnel)
  • Install le script wrapper Geco-iT CloudInit (reconfiguration en cas de changement de configuration Cloud-Init)
  • Change le niveau de journalisation des messages de la console de DEBUG (7) à WARNING (4)
  • Ajout Geco-iT motd/issue

 

Pour créer une VM Fedora CoreOS, il vous suffit de cloner le template qu’on vient de créer.

Clic droit sur le template Fcos tmplt ⇒ Clone ; vous pouvez ensuite choisir le mode de clonage, le nom de la vm, etc…

Dans le menu Cloud-Init de la VM, vous devez renseigner au minimum un mot de passe et/ou une clé ssh pour pouvoir vous connecter à la VM

Vous pouvez démarrer la machine virtuelle : Attention, la machine virtuelle va automatiquement redémarrer suite à l’installation de l’agent QEMU ! Rappel: l’utilisateur par défaut est admin

Comments are closed.