Logo K8S

Kubernetes : Installation d’un cluster

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 :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.