---
Title: Quick Start
Description: Démarrez votre clusters Kubernetes en quelques étapes simples
Weight: 10
---

# 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](https://fr.wikipedia.org/wiki/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]({{< relref "installation" >}}) pour plus rentrer dans les détails quant aux options d'installation disponibles.

## Prérequis

Pour cette installation rapide, nous allons avoir besoin :
- Un système basé sur le noyau Linux 3+
- [Docker](https://docs.docker.com/engine/install/)
- [Qemu](https://www.qemu.org/download/#linux)
- curl

## TL;DR

{{< highlight bash >}}
git clone git@novit.tech:direktil/config.git
cd config

# 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
./scripts/2.start_k8s.sh # Création du control plane
./scripts/3.install_addons.sh # Installation des additions

mkdir -p ~/.kube
cp secrets/kubeconfig ~/.kube/config
{{< /highlight >}}

## 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](https://novit.tech/direktil/config). Vous pouvez alors soit [télécharger l'archive complète](https://novit.tech/direktil/config/archive/main.tar.gz) comme base de travail, ou alors [cloner le repo directement](git@novit.tech:direktil/config.git).

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]({{< relref "configuration" >}}) à tout moment pour l'adapter à vos besoins. En deux mots, il suffit juste de créer deux nouveaux fichiers dans le dossier *hosts*.

{{% notice tip %}}
Toutes les commandes qui vont suivre seront exécutées dans le contexte du dossier "config" correspondant à la racine du repo cloné.
{{% /notice %}}

## 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` :

{{< highlight bash >}}
vars:
  ssh_keys:
  - "ssh-ed25519 xxx my-user"
{{< /highlight >}}

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

{{% notice info %}}
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.
{{% /notice %}}

## Démarrage du Direktil Local Server

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

{{< highlight bash >}}
# A lancer avec l'utilisateur root !
sudo ./scripts/0.start_dls.sh
{{< /highlight >}}

Dans ce script, deux outils NOVIT sont utilisés, [dir2config]({{< relref "cli/dir2config" >}}) et [dkl-local-server]({{< relref "cli/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

{{< highlight bash >}}
# A lancer avec l'utilisateur root !
sudo ./scripts/1.qemu.sh
{{< /highlight >}}

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.

{{% notice note %}}
L'utilisateur local `root` n'a pas de mot de passe spécifié mais ne peut évidemment pas être accessible par protocole SSH.
{{% /notice %}}

## 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.

{{< notice info >}}
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*
{{< /notice >}}

{{< tabs >}}
{{% tab name="Automatisée" %}}
```bash
./scripts/2.start_k8s.sh
```
{{% /tab %}}
{{% tab name="Manuel" %}}
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:

```bash
loadkeys fr # Pour passer en clavier AZERTY, si besoin
mv /etc/kubernetes/manifests.static/* /var/lib/kubernetes/manifests/
```
{{% /tab %}}
{{< /tabs >}}


## Configuration des additions

{{< highlight bash >}}
./scripts/3.install_addons.sh
{{< /highlight >}}

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...

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](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/)). 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](https://kubernetes.io/fr/docs/tasks/tools/install-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.

{{< highlight bash >}}
mkdir -p ~/.kube
cp secrets/kubeconfig ~/.kube/config

kubectl get nodes
(...)
{{< /highlight >}}

# 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.

{{< highlight bash >}}
# A lancer avec l'utilisateur root !
sudo ./scripts/1.qemu.sh
{{< /highlight >}}

## 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.

{{% notice warning %}}
Les commandes ci-dessous vont supprimer toutes machines virtuelles et clusters kubernetes créés précédemment.
{{% /notice %}}

{{< highlight bash >}}
# ATTENTION, CELA SUPPRIMERA TOUTES LES DONNEES
rm -rI data secrets kubeconfig
{{< /highlight >}}

