
Dans cet article, je vais vous expliquer comment exécuter kubernetes master dans un conteneur LXC.
Cette méthode fonctionne assez bien avec Proxmox et peut être considérée comme une alternative au déploiement classique de kubernetes avec plusieurs assistants.
Pourquoi proxmox?
Parce que proxmox prêt à l'emploi fournit de nombreuses fonctionnalités utiles.
Proxmox comprend des fonctionnalités de haute disponibilité, la migration, les sauvegardes automatiques, le contrôle d'accès et tout cela est accessible via une interface graphique simple.
Vous pouvez également déployer la configuration kubernetes la plus simple avec un seul assistant, proxmox fournira une haute disponibilité.
Cette méthode est idéale pour déployer des tests ou de petits clusters.
Pour les déploiements plus importants, il est recommandé de placer etcd dans des conteneurs séparés qui utiliseront des disques locaux rapides et les combineront dans un cluster.
Néanmoins, kubernetes-master lui-même peut toujours rester un ha-conteneur régulier, il n'a pas besoin d'avoir un stockage rapide.
De plus, si vous lisez cet article, je suppose que dans la plupart des cas, vous disposez déjà d'une sorte d'infrastructure sur Proxmox et que vous souhaitez peut-être avoir une interface unique pour gérer vos services.
Pourquoi LXC?
Kubernetes démarrera sans problème dans une machine virtuelle standard. Mais les conteneurs LXC offrent la flexibilité qui n'est pas disponible avec les machines virtuelles conventionnelles.
En fait, les conteneurs LXC ne fournissent pas une isolation complète des conteneurs de l'hôte; au contraire, tous les processus à l'intérieur des conteneurs démarrent en tant que processus hôtes normaux, juste dans un espace de noms séparé.
Cette méthode vous donne de bonnes performances mais impose certaines limitations dans notre cas.
Je vais discuter de ces limitations et comment les gérer dans cet article.
La configuration
Étant donné que, par défaut, les conteneurs ne sont pas autorisés à charger seuls les modules du noyau, vous devez les configurer pour qu'ils se chargent directement sur les hyperviseurs.
Nous utiliserons le pilote de overlay
pour docker, c'est donc tout ce dont nous avons besoin:
echo overlay >> /etc/modules
Maintenant, nous devons ajouter plus de privilèges à notre conteneur pour lui permettre d'exécuter d'autres conteneurs à l'intérieur, ajoutez ces lignes à la configuration de votre conteneur:
lxc.apparmor.profile: unconfined lxc.cap.drop: lxc.cgroup.devices.allow: a lxc.mount.auto: proc:rw sys:rw
À partir de la version v11.0, kubelet nécessite le mode partagé pour toutes les montures de l'hôte.
Ce hack sale vous permettra d'y parvenir, à l'intérieur du conteneur LXC, exécutez:
echo '#!/bin/sh -e mount --make-rshared /' > /etc/rc.local
Cette action ajoutera la commande mount --make-rshared /
à /etc/rc.local
et l'exécutera à chaque chargement du conteneur.
De plus, si vous prévoyez d'utiliser HA-manager dans proxmox, sachez qu'il existe actuellement un bogue désagréable # 1842 , qui tue de force les processus de conteneur pendant la migration, ce qui peut engendrer des processus zombies ou même bloquer votre stockage.
Ce n'est pas bon, heureusement, il existe une solution simple:
sed -i 's/forceStop => 1/forceStop => 0/' /usr/share/perl5/PVE/HA/Resources/PVECT.pm
De plus, vous pouvez ajouter les options suivantes pour votre docker:
--storage-driver overlay2 --iptables=false --ip-masq=false
Copiez docker.service
de /lib
vers /etc
pour remplacer ses options:
cp /{lib,etc}/systemd/system/docker.service
Ajoutez maintenant ces options à la section ExecStart
.
C'est tout, après ces étapes, l' installation standard de kubeadm devrait fonctionner sans problème.