Installer k3OS

Au sommaire :

  • 1-Qu'est-ce que k3OS ?
  • 2-Prérequis
  • 3-Installation
  • 4-Accéder au cluster de l'extérieur

1-Qu'est-ce que K3OS ?

K3OS est un système Linux basé sur Alpine conçu pour les appareils basses consommation de type IOT, Edge Computing et processeurs ARM.

The Kubernetes Operating System

Contrairement à ce que l'on pourrait penser, ce n'est pas un système immuable comme pourrait l'être Talos Linux mais un système minimaliste comportant le strict minimum pour faire fonctionner un cluster k3S (voir mon tutoriel à ce sujet).

Pour la petite histoire, c'est la deuxième tentative de Rancher dans l'univers des systèmes minimalistes. Ils ont déjà tenter le coup avec RancherOS entre 2015 et 2021, un système entièrement basé sur Docker.

RancherOS, un Linux a minima taillé pour Docker - Le Monde Informatique
En livrant un système d’exploitation entièrement pensé pour Docker, Rancher Labs porte le paradigme du conteneur à sa dimension ultime.

Voici quelques unes de ses caractéristiques de K3OS :

  • Installation rapide.
  • kubectl pré installé.
  • Démarrage en moins de 10 secondes.
  • Compatible cloud-init.
  • Qemu-guest-agent installé d'office.

Les deux dernières caractéristiques sont intéressantes car Proxmox VE propose de configurer les machines virtuelles avec cloud-init et le paquet "qemu-guest-agent" est très utile pour remonter certaine informations (adresse MAC, adresse IP) ainsi que pour éteindre, allumer et redémarrer le système via Proxmox VE.

De plus, c'est le genre de distribution parfaitement calibrée pour Pimox, le portage de Proxmox VE pour processeurs ARM.

Un portage de Proxmox pour Raspberry Pi
Si vous êtes familier avec les serveurs de machines virtuelles, vous connaissez forcement Proxmox. Proposé gratuitement, Proxmox est un hyperviseur qui utilise KVM pour prendre en charge quasiment …
GitHub - pimox/pimox7: Proxmox V7 for Raspberry Pi
Proxmox V7 for Raspberry Pi. Contribute to pimox/pimox7 development by creating an account on GitHub.

2-Prérequis

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, utilisez un template cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Optionnel mais si vous avez une instance Pi-Hole à domicile et que Unbound est activé, pensez à ajouter les entrées DNS pour vos nœuds K3OS, cela vous évitera d'indiquer les adresses IP.

Installer Pi-hole avec LXC
Gui d’installation de pi-hole dans un conteneur LXC

3-Installation

Créer une machine virtuelle

Récupérez la dernière version de l'ISO sur Github (v0.21.5-k3s2r1 au moment où j'écris) : https://github.com/rancher/k3os/releases/download/v0.21.5-k3s2r1/k3os-amd64.iso

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

wget https://github.com/rancher/k3os/releases/download/v0.21.5-k3s2r1/k3os-amd64.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 k3OS.
  • 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.

Configuration de cloud-init

On souhaite accéder à K3OS via une connexion SSH. Pour cela, cloud-init est parfait car Proxmox VE le gére nativement.

Je me suis aider de ce tutoriel pour le coup.

K3OS, Proxmox et cloud-init - Alexander blog
Rapide tutoriel pour install K3OS sur Proxmox et avoir une configuration basique cloud-init. Pourquoi? K3OS est le remplaçant de rancherOS avec une base de k3s et une automatisation de sa maintenan…

Il y a également la possibilité d'aller plus loin avec le fichier "config.yml" mais on en parlera dans un prochain tutoriel histoire de pousser la configuration beaucoup plus loin.

GitHub - rancher/k3os: Purpose-built OS for Kubernetes, fully managed by Kubernetes.
Purpose-built OS for Kubernetes, fully managed by Kubernetes. - GitHub - rancher/k3os: Purpose-built OS for Kubernetes, fully managed by Kubernetes.

Ajoutez un lecteur cloud-init à votre machine virtuelle.

Ensuite, indiquez les informations suivantes :

  • User : indiquez rancher (k3OS n'accepte pas d'autres utilisateurs)
  • Password : n'indiquez aucun mot de passe
  • DNS domain/servers : laissez par défaut
  • SSH public key : ajoutez votre clé SSH
  • IP Config (net0) : n'indiquez rien

Démarrez la machine virtuelle et sélectionnez la première option.

Identifiez-vous avec le nom d'utilisateur "rancher".

Note : clavier configuré en QWERTY donc faites gaffe!!!

Ensuite, créez un dossier "cd" à la racine du dossier utilisateur "/home/rancher".

mkdir cd

Puis, montez le lecteur cloud-init "/dev/cdrom" dans le dossier nouvellement créer.

sudo mount /dev/cdrom /home/rancher/cd

Le fichier qui nous intéresse est "user-data" qui contient entres autre la clé SSH.

Enfin, lancez la procédure d'installation de k3OS.

sudo k3os install
  • Sélectionnez l'option "1" (Install to disk) pour installer k3OS sur le disque
  • Indiquez le chemin du fichier "user-data" qui se trouve dans "/home/rancher/cd/user-data"
  • Validez par "y" pour installer k3OS sur le disque

L'installation sera extrêmement rapide et le système va redémarrer au bout de quelques secondes.

Au démarrage, choisissez la première option.

Enfin, connectez-vous en SSH à votre instance et BINGO, ça devrait fonctionner.

Trois petits bémol :

  • Le mot de passe ajouté dans cloud-init ne semble pas pris en compte par k3OS
  • On récupère une adresse IP du serveur DHCP, impossible de configurer une IP statique à partir de cloud-init
  • qemu-guest-agent est installé mais semble insensible aux appels de commande de PVE

Ajouter une adresse IP statique

En faisant des recherches, Zwindler indique dans son article comment ajouter une adresse IP statique à K3OS.

Vu que je connais pas encore Alpine Linux, c'est l'occasion de s'y mettre.

k3os, le reboot de RancherOS à la sauce k3s
k3os, encore un produit Rancher ? Oui, k3os. Je vais donc ENCORE parler d’un produit de Rancher aujourd’hui, et la raison principale est que cet article est plus ou moins la suite logique des deux précédents sur RancherOS et RKE Dans /2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/, je vous ex…

Tapez la commande suivante pour trouver la carte réseau.

sudo connmanctl services

Affichez ensuite la configuratio par défaut.

sudo connmanctl services ethernet_5abc0be616d4_cable

Dans "Nameservers", l'adresse IP 192.168.0.12 correspond au serveur DNS Unbound de mon serveur Pi-hole (pas de 8.8.8.8 chez moi, non mais).

Enfin, tapez la commande suivante pour configurer la carte réseau de K3OS :

  • connmanctl : l'appel de commande pour gérer les interfaces réseaux
  • config <card_name> : on indique qu'on souhaite configurer la carte réseau en indiquant son nom
  • --ipv4 manual : on indique une adresse IP statique (192.168.0.119), le masque de sous réseau (255.255.255.0) et la passerelle (192.168.0.254)
  • nameservers : l'adresse IP du serveur DNS (192.168.0.12, mon serveur domestique mais cela peut-être 8.8.8.8 ou 1.1.1.1)
sudo connmanctl config ethernet_5abc0be616d4_cable --ipv4 manual 192.168.0.119 255.255.255.0 192.168.0.254 --nameservers 192.168.0.12

Vous serez déconnecté. Il vous faudra vous connecté avec la nouvelle adresse IP.

BINGO!!!! Ça fonctionne!!!!

Revers de la médaille, c'est pas très "clé en main" pour le coup.

hostname: master
ssh_authorized_keys:
- ssh-rsa YOUR_PUBLIC_SSH_KEY
write_files:
  - path: /var/lib/connman/default.config
    content: |-
      [service_eth0]
      Type=ethernet
      IPv4=192.168.0.11/255.255.255.0/192.168.0.1
      IPv6=off
      Nameservers=8.8.8.8
k3os:
  dns_nameservers:
  - 8.8.8.8
  ntp_servers:
  - 0.us.pool.ntp.org
  password: rancher
  token: myclustersecret
  k3s_args:
  - server
  - "--write-kubeconfig-mode"
  - "644
hostname: node01
ssh_authorized_keys:
- ssh-rsa YOUR_PUBLIC_SSH_KEY
write_files:
  - path: /var/lib/connman/default.config
    content: |-
      [service_eth0]
      Type=ethernet
      IPv4=192.168.0.12/255.255.255.0/192.168.0.1
      IPv6=off
      Nameservers=8.8.8.8
k3os:
  server_url: https://192.168.0.11:6443
  token: myclustersecret
  dns_nameservers:
  - 8.8.8.8
  ntp_servers:
  - 0.us.pool.ntp.org
  password: rancher

4-Accéder au cluster de l'extérieur

Si vous souhaitez accéder à votre cluster de l'extérieur via un poste client, suivez la procédure suivante et ayez à disposition un poste sous Linux ou Windows avec WSL (Windows Subsystem for Linux) d'installé.

Avec la commande "curl", récupérez le binaire de kubectl.

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Optionnel : vous pouvez également vérifier le checksum du binaire (c'est une bonne habitude à prendre en compte).

Récupérez le checksum.

curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

Et vérifiez si cela correspond.

echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

Enfin, appliquez les droits 755 au fichier (lecture/écriture/exécution pour l'utilisateur root, lecture/écriture pour les personnes du groupe et les personnes extérieures).

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

À partir du noeud master, copiez le contenu du fichier "k3s.yaml" vers le le fichier config (home/<username>/.kube/config).

Puis eemplacez la valeur suivante.

server: https://127.0.0.1:6443

Par celle-ci

server: https://MASTER_IP:6443

Enfin, changez la permission du fichier.

chmod 0400 ~/.kube/config

Tapez la commande suivante pour tester la connexion au cluster

kubectl get nodes