Quick Start

Démarrage rapide

Direktil est un système d’exploitation basé sur Linux Gentoo, généré rapidement et efficacement grâce à de l’Infrastructure As Code (configuration au format Yaml). Ces systèmes permettant la mise à disposition d’un cluster Kubernetes complet, sécurisé, maintenable, sans vendor lock-in, et à destination de machines virtuelles ou des machines bare-metal.

Ces systèmes sont générés par un ensemble d’outil, notamment le Direktil Local Server, absorbant une configuration de base et générant les images système ainsi que les différents assets nécessaires à un cluster Kubernetes.

Dans ce quick-start, vous allez intéragir avec ce serveur pour créer votre propre cluster en quelque minutes, dépendamment de la qualité de votre connexion Internet. Nous allons utiliser Qemu localement à notre machine de travail, et des conteneurs Docker. Vous pouvez également vous référer à la documentation d’installation pour plus rentrer dans les détails quant aux options d’installation disponibles.

Prérequis

Pour cette installation rapide, nous allons avoir besoin :

TL;DR

git clone git@novit.tech:direktil/config.git
cd config

# ATTENTION ! N'oubliez pas d'ajouter votre clé SSH dans la configuration comme indiqué dans la partie "Modification de la configuration"

# A lancer avec l'utilisateur root !
sudo ./scripts/0.start_dls.sh # Démarrage du serveur DLS
sudo ./scripts/1.qemu.sh # Démarrage de la ou des VMs et du cluster
# A lancer avec votre utilisateur local de préférence
./scripts/2.first_start_k8s.sh # Création du control plane et installation des additions

mkdir -p ~/.kube
cp kubeconfig ~/.kube/config

Récupération de la configuration de départ

Nous avons compilé une configuration suffisante à la plupart des cas de figure, disponible sur notre repository git. Vous pouvez alors soit télécharger l’archive complète comme base de travail, ou alors cloner le repo directement.

A noter que cette configuration de départ présente une installation de cluster mono-noeud (master/compute). Il est tout à fait possible de la modifier pour spécifier 3 noeuds et ainsi avoir un cluster redondant et déjà prod-ready.

Vous pouvez faire référence à la documentation de configuration à tout moment pour l’adapter à vos besoins. En deux mots, il suffit juste de créer deux nouveaux fichiers dans le dossier hosts.

Toutes les commandes qui vont suivre seront exécutées dans le contexte du dossier “config” correspondant à la racine du repo cloné.

Modification de la configuration

Notre configuration est déjà fonctionnelle mais par souci d’automatisation, vous devriez y ajouter votre clé SSH publique afin que vous ayez accès aux VMs une fois créées, sans passer la console Qemu. Pour ce faire, modifiez avec l’éditeur de votre choix le fichier clusters/base.yaml, et ajouter les clés SSH dans le yaml .vars.ssh_keys :

vars:
  ssh_keys:
  - "ssh-ed25519 xxx my-user"

Cette clé sera alors ajouté dans le trousseau de clés publiques de l’utilisateur root, vous permettant un accès direct post-installation.

Vous pouvez ignorer la clé yaml .vars.bootstrap_auths.sshKey pour le moment, elle ne sert que pour l’étape de démarrage de l’initrd.

Démarrage du Direktil Local Server

Exécutons notre serveur DLS en étant placé dans notre dossier de configuration cloné.

# A lancer avec l'utilisateur root !
sudo ./scripts/0.start_dls.sh

Dans ce script, deux outils NOVIT sont utilisés, dir2config et dkl-local-server. Le premier sert à transformer la configuration en un fichier intelligible pour le deuxième, qui lui sera responsable de la création de nos images systèmes et de la maintenance des fichiers secrets (certificats, tokens, etc…)

Instanciation d’une machine virtuelle

# A lancer avec l'utilisateur root !
sudo ./scripts/1.qemu.sh

Cette étape met en place un pont réseau (bridge), récupère les différents éléments nécessaire au démarrage d’une VM (kernel, initrd…) puis la démarre. Vous devriez voir un terminal apparaître si tout s’est bien passé. Lors du premier démarrage, l’étape dit du “bootstrap seed” se connectera au serveur DLS pour récupérations des couches systèmes permettant le démarrage du système complet.

L’utilisateur local root n’a pas de mot de passe spécifié mais ne peut évidemment pas être accessible par protocole SSH.

Démarrage du cluster Kubernetes

Cette étape rapide demande de se connecter aux machines et d’activer le control plane pour démarrer le cluster. Cela ne peut se faire de façon automatisée seulement si vous avez ajouté votre clé SSH à la configuration avant l’installation (voir partie Modification de la configuration). La manuelle est disponible ci-dessous dans les autres cas.

Dans tous les cas, il n'est nécessaire de faire cette opération qu'une seule fois par cluster. Egalement, ces commandes doivent à partir de maintenance être lancées avec votre utilisateur système local et non *root*
./scripts/2.first_start_k8s.sh

Sans connexion SSH, il est possible de d’activer le cluster Kubernetes en utilisant la console Qemu. Le compte à utiliser est “root”, sans mot de passe. Y lancer alors les commandes suivantes:

loadkeys fr # Pour passer en clavier AZERTY, si besoin
mv /etc/kubernetes/manifests.static/* /var/lib/kubernetes/manifests/

Cette étape sert également à la mise en place des addons. Dans les addons devant être installés dans le cluster, nous pouvons citer un fournisseur d’overlay réseau, kube-proxy, un contrôleur ingress, un dashboard, un coredns local, etc…

Enfin, un cluster kubernetes sécurisé et fonctionnel nécessite des certificats TLS pour toute communication intra-cluster. Ce rôle de les générer est à majorité celui du DLS, à l’exception de deux certificats, tous deux utilisés par le processus Kubelet de la machine nouvellement installés (voir TLS Bootstraping). Ceux-là sont générés automatiquement au sein de Kubernetes mais nécessitent une approbation manuelle, ce qui est géré par ce script par facilité.

Utilisation du cluster

Lors du démarrage du cluster, un fichier kubeconfig a été créé dans le dossier “secrets”. Il vous servira à vous connecter avec kubectl ou d’autres outils tiers. Par commodité, il est conseillé de le déplacer dans votre dossier personnel (dans le cas d’un système Linux) pour qu’il doit reconnu et utilisé par défaut.

mkdir -p ~/.kube
cp secrets/kubeconfig ~/.kube/config

kubectl get nodes
(...)

Opérations futures

Redémarrage des machines virtuelles

Dans le cas où les VMs ont été éteintes, il suffit de relancer le script de démarrage qemu, cela ne supprimera pas les données précédemment créées.

# A lancer avec l'utilisateur root !
sudo ./scripts/1.qemu.sh

Suppression des machines et du cluster

Pour repartir de zéro sur notre installation, il faut supprimer un ensemble de dossiers avant de relancer la procédure ci-dessus.

Les commandes ci-dessous vont supprimer toutes machines virtuelles et clusters kubernetes créés précédemment.

# ATTENTION, CELA SUPPRIMERA TOUTES LES DONNEES
sudo ./scripts/.cleanup.sh