Rate this post

Mémo pour installer Minikube (Kubernetes) dans un container LXC sur Ubuntu Server 20.04 LTS.

Inspiré de :

Dans ce beau pays qu’est la théorie, de simples copier/coller des commandes devraient fonctionner 😉 .

A la rédaction de ce mémo :

  • Ubuntu 20.04.3 LTS (5.4.0-89-generic)
  • LXC / LXD : 4.19
  • Minikube version: v1.23.2
  • Docker version 20.10.10, build b485636

Important

A l’installation de LXD, la première commande à lancer est

A la question « Name of the storage backend to use (lvm, zfs, ceph, btrfs, dir) [default=zfs] », choisir : dir

Avertissement

Le nom du container utilisé ici est important.
Dans beaucoup de tutoriels, c’est « minikube » qui est utilisé et je me suis fais avoir.
Ici, je prend volontairement mkube pour ne pas confondre avec la commande minikube.

Si vous utilisez un autre nom, des modifications sont à prévoir dans certaines lignes de commandes.
Y compris la ligne de commande qui lance minikube au premier démarrage dans le container LXC.
Il s’agit de l’argument « –apiserver-name mkube » qui doit correspondre au nom du serveur LXC.

Installation et configuration

Désactiver IPv6 :

Créer le profile LXC : minikube

Contenu :

Adapter les lignes limits.* en fonction du serveurs hôte.

Créer le container et exécuter bash :

Dans le container mkube, mettre à jour et installer les outils nécessaires :

Dans le container mkube, contournement pour kmsg :

La commande mknod peut renvoyer un message d’erreur. A ignorer.

Dans le container mkube, installer Docker CE :

Dans le container mkube, tester Docker :

Relancer le container, très important !

Dans le container mkube :

Puis pour vérifier que l’IPV4 pour Docker est visible :

Tant que ce n’est pas le cas, attendre et vérifier.

Dans le container mkube, installer et démarrer Minikube :

Le nom du serveur api, doit correspondre au nom du container.

Le démarrage peut prendre quelques minutes… s’il y a un problème.
Sinon, environ 2min max.

Résultat :

En cas de soucis, exécuter cette commande et relancer Minikube avec de la log et le mode verbose à 8 :

Vérifier que tout est ok :

Résultat :

Lister les pods :

Résultat :

Activer kubelet au démarrage :

Tester

Pour arrêter le container, je conseille :

Vérifier au démarrage que tout est ok :

Attendre que l’ip Docker soit présente.

Se connecter dans le container

Vérifier directement que minikube est lancé :

Résultat :

Installer la dernière version de kubctl

Commandes utiles

Dans le container mkube, consulter les logs de minikube :

Dans le container mkube, liste des pods :

Accès externe à Minikube

C’est à dire à partir de la machine hôte et pas dans le container mkube.

Dans le container mkube, exécuter ces commandes :

Dans l’exemple, on crée un cluster avec un accès https dont l’url sera https://kubernetes:8443.
Le nom « kubernetes » est obligatoire et ne peut être changer (sans pas mal de manipulations pour les certificats).
Puis on crée un utilisateur mkube-user auquel on associe des certificats de connexion. Pas de mot de passe.
Et enfin on autorise l’utilisateur à accèder au cluster.

Cette configuration est stockée dans le fichier ~/.minikube/mkube dans le container LXC mkube.

Sortir du container mkube (Ctrl+d ou la commande exit).

Sur la machine hôte, modifier le fichier /etc/hosts.
D’abord, récupérer l’adresse ip du container :

Résultat :

Ici, c’est l’adresse ip 10.134.238.30 qui nous intéresse.
Editer le fichier /etc/hosts et rajouter la ligne suivante en modifiant l’ip si neccessaire :

Récupérer la configuration créée sur la machine hôte :

Tester :

Résultat :

Autre commande :

Résultat :

Astuce :

Créer un alias pour éviter de taper la commande kubectl avec l’argument kubeconfig à chaque fois.
Dans le fichier ~/.bash_aliases, ajouter cette ligne :

Recharger le fichier ~/.bash_aliases :

Tester :

Résultat :

Accès au dashboard

L’objectif est d’avoir accès au dashboard via un navigateur web.

Après avoir installé nginx et un certificat ssl comme Let’s Encrypt, créer les fichiers de configuration nginx :

Fichier /etc/nginx/sites-available/webkube.conf

Et le fichier SSL /etc/nginx/sites-available/webkube-ssl.conf

L’utilisation de 2 fichiers est purement un choix personnel.

Activer les configurations (root) :

Dans un tmux, exécuter cette commande pour démarrer le serveur minikube :

Au besoin, sortir de tmux (Ctrl+b puis d).
Pour revenir dans tmux :

Dans le navigateur web :

https://webkube.domain.tld/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default

 

Et voilà !