Virtualiser Fedora CoreOS sur Proxmox VE

Guide d'installation de Fedora Core OS sur Proxmox VE

Virtualiser Fedora CoreOS sur Proxmox VE
fedora coreos proxmox pve proxmoxve

Au sommaire :

  • 1-Qu'est-ce que Fedora CoreOS ?
  • 2-Création d'une machine virtuelle
  • 3-Création du fichier butane
  • 4-Conversion au format Ignition
  • 5-Ouvrir un serveur HTTP
  • 6-Installation
  • 7-Conclusion

1-Qu'est-ce que Fedora CoreOS ?

Fedora CoreOS est un système d'exploitation minimal et immuable spécifiquement conçu pour déployer des conteneurs de manière sécurisée et à grande échelle.

Tout savoir sur CoreOS et CoreOS Container Linux
L’entreprise CoreOS a été fondée en 2013 avec pour mission d’améliorer la sécurité et la fiabilité d’Internet.

Petit retour en arrière. En 2013, la société CoreOS sort une distribution nommée CoreOS Containers Linux soit la même année que Docker.

L'objectif de ce système d'un nouveau genre est de proposer un environnement d’exécution minimal et sécurisé pour déployer des conteneurs à grande échelle dans le cloud.

Dans le secteur de la tech, autant vous dire que la société CoreOS attire assez vite les convoitises car le besoin d'une distribution conçu spécifiquement pour les conteneurs devient de plus en plus pressante.

Le suspens prind fin en janvier 2018 lorsque Red Hat rachètera la société pour 250 millions de dollars.

CoreOS racheté par Red Hat : l’écosystème Kubernetes se consolide
CoreOS se vend pour 250 millions de dollars à Red Hat qui récupère une expertise dans l’exploitation de Kubernetes pour les entreprises et un cadre de la communauté Open Source des containers.

Red Hat profitera de ce rachat pour fusionner CoreOS Containers Linux avec Fedora Atomic Host/RHEL Atomic Host issues du projet Atomic Host.

Fedora Atomic Host deviendra désormais Fedora Core OS
Les développeurs de projets Fedora ont signalé avoir supprimé les composants Fedora Atomic Host du référentiel Rawhide et suspendu ...
Avec Atomic Host, Red Hat permet (aussi) de gérer des conteneurs Docker - Le Monde Informatique
Red Hat Enterprise Linux (RHEL) 7 Atomic Host permet à la fois de gérer l’infrastructure RHEL classique et les applications encapsulées dans des...
Project Atomic

Cette fusion donnera naissance à deux distributions :

  • Fedora CoreOS, la version upstream et communautaire
  • Red Hat CoreOS (RHCOS) à destinations des entreprises
Get Fedora
Choose Freedom. Choose Fedora. Pick a flavor of Fedora streamlined for your needs, and get to work right away.
Red Hat Enterprise Linux CoreOS | Architecture | OpenShift Container Platform 4.8

De Fedora Atomic Host, Red Hat gardera :

  • La distribution Fedora dérivée de RHEL
  • La sécurité avec SELinux
  • Le gestionnaire de paquets rpm-ostree qui adopte la philosophie de Git
  • Le mécanisme de mise à jour automatique

De CoreOS Container Linux, Red Hat gardera :

  • L'approche cloud-native
  • La philosophie
  • La méthode de provisionnement

Pour finir, Fedora CoreOS/RHCOS est également le système d'exploitation utilisé par OpenShift Kubernetes Distribution (OKD) qui est la version upstream (en amont, communautaire) de Red Hat OpenShift, un PaaS (Platform as a Service) sous Kubernetes destiné aux entreprises.

OKD.io - OKD.io
The Community Distribution of Kubernetes that powers Red Hat OpenShift

Il faut savoir que Red Hat propose en général deux versions de leur produits :

  • Une version communautaire,
  • Une version commerciale,

Dans le cas de Ansible par exemple :

  • AWX est la version communautaire
  • Ansible Tower est la version commerciale à destination des entreprises.

Enfin, il faut noter qu'un fork de CoreOS Containers Linux existe sous le nom de Flatcar Linux, maintenu par la société allemande Kinvolk

100% open source cloud native infrastructure | Kinvolk
The Kubernetes Linux Experts
Flatcar Container Linux
Container Linux

Société qui a été racheté par.....Microsoft.

Microsoft acquiert Kinvolk pour accélérer l’innovation optimisée par des conteneurs | Blog Azure et mises à jour | Microsoft Azure
La possibilité d’exécuter Kubernetes partout, que ce soit dans le cloud ou localement, a été une forte priorité pour les clients Azure cherchant à innover rapidement, avec des clients qui s’intéressent de plus en plus aux avantages des charges de travail et systèmes d’exploitation optimisés po...

Je sais, il y a de quoi devenir GOAT.

Donc si vous avez bien suivi :

  • Fedora CoreOS/Red Hat CoreOS est le produit d'une fusion entre CoreOS Containers Linux et Fedora Atomic Host/RHEL Atomic Host
  • Elle est la base de Openshift Kubernetes Distribution/Red Hat Openshift

Maintenant, passons à la pratique. Nous allons créer une machine virtuelle.

3-Création d'une machine virtuelle

Récupérez l'ISO sur le site.

Get Fedora
Choose Freedom. Choose Fedora. Pick a flavor of Fedora streamlined for your needs, and get to work right away.

Ou sur le terminal de PVE à la racine du dossier contenant vos ISO, téléchargez le avec ce lien et la commande "wget" :

wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/37.20221225.3.0/x86_64/fedora-coreos-37.20221225.3.0-live.x86_64.iso

Puis commencez par créer une machine virtuelle vierge en suivant mes instructions.

General

  • Choisissez un VMID disponible et un nom

OS

  • Storage : Sélectionnez l'image ISO de Fedora CoreOS.
  • Guest OS : laissez par défaut.

System

Laissez tout par défaut et activez Qemu Agent.

Disks

Laissez tout par défaut et cochez deux options :

  • SSD emulation : indique à l'OS qu'il démarre sur un SSD et non sur un disque rotatif,
  • Discard : active le TRIM.

CPU

  • Cores: 2 cores sont suffisants.

Memory

  • Mémory : laissez par défaut.

Network

Laissez tout par défaut.

Vérifiez que tout est correct puis finalisez la création de la machine virtuelle.

4-Création du fichier butane

Note : Sachez que je me suis simplement formé à travers la documentation de FCOS, rien d'autre.

Producing an Ignition Config
Learn more about Fedora Linux, the Fedora Project & the Fedora Community.

Sur votre poste client, commencez par créer un fichier butane formaté en YAML.

touch coreos.bu

On commence à inclure ces deux options :

  • variant : fcos (pour Fedora CoreOS)
  • version : 1.4.0 (la dernière version en date)
variant: fcos
version: 1.4.0

Passons à "passwd".

passwd

Dans "passwd", vous allez créer un utilisateur, l'ajouter à des groupes et ajouter votre clé SSH :

  • users : indiquez dans "name" le nom de l'utilisateur (sussudio pour l'exemple)
  • groups : ajoutez le au groupe sudo et au groupe docker pour ne plus taper "sudo" avant chaque appel de commande (Docker nécessite un accès root, contrairement à Podman)
  • ssh_authorized_key : ajoutez votre clé SSH
####### PASSWD ########################

passwd:

  users:
    - name: sussudio
      groups:
        - docker
        - sudo
      ssh_authorized_keys:
        - ssh-rsa.......

Si vous voulez plutôt utiliser un mot de passe, remplacez "ssh_authorized_keys" par "password_hash".

Sur votre poste client, déployez un conteneur fedora.

docker run --rm -it fedora

Puis à l'intérieur du conteneur, installez mkpasswd, tapez un mot de passe (coucou pour l'exemple) et laissez mkpasswd effectuer le hashage.

dnf -y install mkpasswd ; mkpasswd --method=yescrypt

Lorsque le mot de passe est hashé, copiez le et incluez le dans votre fichier "coreos.bu".

####### PASSWD ########################

passwd:

  users:
    - name: sussudio
      groups:
        - docker
        - sudo
      password_hash: $y$j9T$QZzs.Yw/zm5EaE8f7Arq11$vdClPBHsw7l42vw7zmL9THKP4yTXOUgq5utakyEeff1

Passons à "storage".

storage

Dans "storage", vous allez indiquez un nom d'hôte, le type de clavier et le fuseau horaire.

  • hostname : fedora-dev pour l'exemple avec un mode d'écriture 0644 (lecture/écriture pour l'utilisateur, lecture pour le groupe et les personnes de l'extérieur)
  • vconsole.conf (type de clavier) : KEYMAP=fr (AZERTY)
  • localtime (fuseau horaire) : Europe/Paris
####### STORAGE ######################

storage:

####### FILES ########################
      
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: fedora-dev
        
    - path: /etc/vconsole.conf
      mode: 0644
      contents:
        inline: KEYMAP=fr
        
####### LINKS ########################
        
  links:
    - path: /etc/localtime
      target: ../usr/share/zoneinfo/Europe/Paris

Ensuite, il va falloir formater le disque :

  • device : scsi0, le disque principal créer par PVE
  • wipe_table : aucun formatage de bas niveau
  • partitions : on va en créer 4 dont une qui fera minimum 8192 Mib qui est le minimum syndical sous peine de ne pas voir FCOS démarrer.
####### DISKS ########################

  disks:
  - device: /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0
    wipe_table: false
    partitions:
    - number: 4
      label: root
      size_mib: 8192
      resize: true
    - size_mib: 0
      label: var

Si vous avez bien suivi la procédure, vous devriez avoir ce fichier à la fin.

variant: fcos
version: 1.4.0

####### PASSWD ########################

passwd:

  users:
    - name: sussudio
      groups:
        - docker
        - sudo
      ssh_authorized_keys:
        - ssh-rsa.......
        
####### STORAGE ######################

storage:

####### FILES ########################
      
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: fedora-dev
        
    - path: /etc/vconsole.conf
      mode: 0644
      contents:
        inline: KEYMAP=fr

####### DISKS ########################

  disks:
  - device: /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0
    wipe_table: false
    partitions:
    - number: 4
      label: root
      size_mib: 8192
      resize: true
    - size_mib: 0
      label: var

####### FILESYSTEMS ##################
      
  filesystems:
    - path: /var
      device: /dev/disk/by-partlabel/var
      format: ext4
      with_mount_unit: true

####### LINKS ########################
        
  links:
    - path: /etc/localtime
      target: ../usr/share/zoneinfo/Europe/Paris

On commence en mode claquettes-chaussettes.

5-Conversion au format Ignition

Sur votre poste, à la racine du dossier contenant votre fichier "coreos.bu", déployez un conteneur qui effectuera la conversion du fichier au format Ignition (.ign).

sudo docker run -i --rm quay.io/coreos/butane:release --strict < coreos.bu > coreos.ign

6-Ouvrir un serveur HTTP

Ensuite, si Python3 est installé sur votre poste, tapez la commande suivante pour ouvrir un serveur web HTTP et rendre accessible le fichier coreos.ign à votre instance FCOS.

python3 -m http.server

Ou alors déployez un conteneur temporaire avec le répertoire de travail monté accessible sur le port 8000.

docker run -p 8000:8000 -v $PWD:/data -it --rm python

Lorsque vous serez dans le conteneur, tapez la commande suivante et validez.

import os
os.chdir("/data")
from http.server import HTTPServer, SimpleHTTPRequestHandler
HTTPServer(('', 8000), SimpleHTTPRequestHandler).serve_forever()

Si vous êtes sur votre poste en local, tapez "localhost:8000" pour vérifier que tout fonctionne.

Bingo!!!!!! Démarrez votre machine virtuelle et récupérez le fichier à l'aide de la commande "curl".

curl -O http://IP_ADRESS:8000/coreos.ign

Enfin, tapez la commande suivante pour déployer la configuration :

Avec l'aide de l'appel de commande "coreos-installer", vous allez installer dans "/dev/sda" (le disque principal) la configuration issue du fichier "coreos.ign".

sudo coreos-installer install /dev/sda --ignition-file 1_basic.ign

Et c'est fini!!! Redémarrez le système avec "reboot".

Connectez vous en SSH. Bingo, la clé est bien prise en compte au démarrage.

7-Conclusion

J'ai volontairement tronquer ce tutoriel car à la base je devait vous montrer comment déployer des conteneurs à travers la créations de services et socket via systemd mais ce sera pour un prochain tutoriel car je rencontre des soucis de droits utilisateurs (j'ai passer une nuit blanche dessus).

Dans tout les cas, Fedora CoreOS est un système très intéressant à étudier et je doute pas que les systèmes immuables de ce genre sont le futur de l'informatique.

Voir mon article sur NixOS, un autre système immuable.

Découvrez NixOS, la distribution immuable
Aujourd’hui, nous allons découvrir NixOS et créer notre premier fichier déclaratif. Au programme : * Qu’est-ce que NixOS ? * Création d’une machine virtuelle. * Préparation du disque dur. * Déclarer un état désiré. Deux articles en une journée, inhabituel ? Non les gars, le travail, le travail…

Vidéos complémentaires

Je vous conseille également de regarder ces trois vidéos pour mieux comprendre ce que représente Fedora CoreOS.

Sources :

Get Fedora
Choose Freedom. Choose Fedora. Pick a flavor of Fedora streamlined for your needs, and get to work right away.
From Zero to Production with Fedora CoreOS, Portainer, and WordPress in 7 Easy Steps
From Zero to Production with Fedora CoreOS, Portainer, and WordPress in 7 Easy Steps
Questions fréquentes à propose de Fedora CoreOS
Learn more about Fedora Linux, the Fedora Project & the Fedora Community.
OSTree - Wikipedia