Kubernetes est un orchestrator de conteneur pour docker, open-source est développé par Google. Il permet d’automatiser le déploiement et la monté en charge de conteneur.
1 – Pre-requis :
A – Préparation des OS :
Pour l’installation de votre cluster Kubernetes vous allez avoir besoin de 3 serveurs Debian 10 :
- 1 serveurs master K8S
- 2 serveurs workers (node) K8S
On commence par désactiver le swap :
swapoff -a
Dans le fichier /etc/fstab on supprime le point de montage du swap
UUID=b364bcca-a33d-43d1-a156-33f46c17e97a /boot ext2 defaults 0 2
#/dev/mapper/k8s--master--1--vg-swap_1 none swap sw 0 0
Dans le fichier /etc/sysctl.conf il faut activer l’ip forwarding qui permet d’activer la fonction de routage des paquets:
net.ipv4.ip_forward=1
et on recharge la configuration pour prendre en compte la modification :
sysctl --system
On installe ensuite les paquets nécessaire au fonctionnement de K8S :
apt install wget curl gnupg2 apt-transport-https ca-certificates gpgv software-properties-common -y
On créer l’utilisateur kubernetes :
adduser kubernetes
et nous autorisons l’utilisateur à passer des commandes roots sans mot de passe :
nano /etc/sudoers
kubernetes ALL=(ALL:ALL) NOPASSWD:ALL
B – Installation de docker
Nous allons installer dockers sur nos 3 serveurs debian.
Ajout du dépôt docker :
echo "deb https://download.docker.com/linux/debian stretch stable" >> /etc/apt/sources.list
Et on ajoute la clé d’authentification du dépôt
curl -sS https://download.docker.com/linux/debian/gpg | apt-key add -
Installation de docker :
apt update -y
apt install docker-ce -y
Dans le fichier /lib/systemd/system/docker.service il faut remplacer la ligne commençant par ExecStart
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
par celle-ci :
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
Et redémarrer le service docker :
systemctl daemon-reload
/etc/init.d/docker restart
2 – Installation du cluster
A – Installation de Kubernetes
On ajoute les dépôts Kubernetes
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> /etc/apt/sources.list
Et la clé d’authentification du dépôt :
curl -sS https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
puis nous installons Kubernetes :
apt update -y
apt install kubelet kubeadm -y
Le paquet kubectl est à installer seulement sur le master
apt install kubectl -y
B – Configuration du cluster Kubernetes
Les actions suivantes sont à effectuer seulement sur le master.
kubeadm init --pod-network-cidr=10.244.0.0/16
Une fois l’initialisation du cluster terminé, nous pouvons récupérer la commande qui nous permet de joindre un nœud au cluster.
kubeadm join 192.168.4.50:6443 --token oc32p5.4ga8y6joxpdz8wjq \
--discovery-token-ca-cert-hash sha256:3f1205c4f616a60e1806a82e21caaa5366d74814dfc363e37b3172a0b12
Création du dossier pour Kubernetes :
mkdir /home/kubernetes/.kube/
cp /etc/kubernetes/admin.conf /home/kubernetes/.kube/config
chown kubernetes:kubernetes -R /home/kubernetes/.kube/
chmod 755 -R /home/kubernetes/.kube/
Installation du pod réseau :
su kubernetes
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Il faut ensuite vérifier que notre master est prêt :
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-tuto Ready master 4m50s v1.18.2
C – Ajout des workers au cluster Kubernetes
Pour ajouter les deux serveurs workers au cluster kubernetes pour qu’ils soient managés par le master il faut passer la commande fournit lors de l’initialisation du master elle contient le hash et le jeton permettant de rejoindre le cluster.
kubeadm join 192.168.4.50:6443 --token oc32p5.4ga8y6joxpdz8wjq \
--discovery-token-ca-cert-hash sha256:3f1205c4f616a60e1806a82e21caaa5366d74814dfc363e37b3172a0b12
Il est possible que votre token ne soit plus valable mais il est toutefois possible dans créer un autre :
kubeadm token create
et pour afficher le hash pour joindre le cluster :
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Ci-dessous voici la structure de la commande pour joindre le cluster :
kubeadm join --token token> master-ip>:master-port> \
--discovery-token-ca-cert-hash sha256:hash>
Une fois le deux workers rajouté on peut vérifier l’état du cluster :
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-tuto Ready master 7m23s v1.18.2
k8s-worker-tuto-1 Ready none> 80s v1.18.2
k8s-worker-tuto-2 Ready none> 120s v1.18.2
L’installation de votre cluster Kubernetes est maintenant terminé.
3 – Bonus
A – Accès à distance au cluster
Pour accéder à distance à votre cluster K8S il vous suffit d’installer kubectl sur votre poste
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
add-apt-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
apt-get install kubectl
Et de copier le token sur votre poste :
mkdir ~/.kube
ssh user@master "sudo cat /etc/kubernetes/admin.conf" >.kube/config
La suite des articles :