Kubernetes: concept et installation

Concept

K8 est un orchestrateur de docker: sont objectif est de pouvoir gérer un cluster de serveur ayant le service docker et donc par la suite d’assurer

  • le fonctionnement de container sur un des noeud du cluster
  • la scalabilité des containers
  • l’accès à des services
../_images/20190302_01.jpg

Chaque note exécute :

  • docker, qui permettra de récupérer l’ensemble des conteneurs à déployer depuis un registre.
  • Kubelet, un agent qui servira de pont entre le master et l’ensemble des nodes du cluster.

Dans K8 on utilise un notion de pod. Un pod un ou plusieurs conteneurs d’applications , qui partagent une même adresse IP, le même espace partagé ainsi que les mêmes ports. Ils sont également exécutés sur le même node. L’objectif est de déployer des pods.

Des pods entre eux peuvent comminiquer via ip.

../_images/20190302_02.jpg

Pour acceder aux pods k8 propose une notion de service: en effet on ne peut savori ou se trouve un pod (sur quel node) … il faut donc une couche d’abstraction supplementaire. Chaque service a sa propre adresse IP (unique pour le cluster) et expose un ou plusieurs ports afin de recevoir du trafic.

../_images/20190302_03.jpg

Enfin k8 utilise beaucoup la notion de label pour regrouper des élements

../_images/20190302_04.jpg

Installation

Pour réaliser ce POC nous allons utiliser des raspberrypi car:

  • c’est peu couteux (mais on a peu de perf)
  • fonctionne sous debian
  • facile à reproduire

Installation raspberrypi

wget https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-11-15/2018-11-13-raspbian-stretch-lite.zip
unzip raspbian_latest
#identification du device
fdisk -l
umount /dev/sdc1
mkfs.ext3 /dev/sdc
dd bs=1M if=2018-11-13-raspbian-stretch-lite.img of=/dev/sdc

Puis on lance les raspberry en mode console

  • login: pi
  • password: raspberry

Warning

au premier démarrage on a un clavier qwerty et non azerty

on lance raspi-config

sudo su - root
raspi-config

On modifie :

  • la localisation du clavier
  • on active le serveur ssh

Puis on change le password de root

passwd

On installe le minimum

apt-get update
apt-get install curl vim

On autorise root pour les connexions sshP, pour cela on modifie le fichier de config qui se trouve dans /etc/ssh/sshd_config.

PermitRootLogin yes

Installation docker

curl -sSL get.docker.com | sh

Note

lors de mon installation la dernière version docker n’était pas compatible avec la dernière version de kubernetes. J’ai donc installer docker en spécifiant la version

export VERSION=18.06 && curl -sSL get.docker.com | sh

Gestion du réseau

J’ai changer les fichiers /etc/hosts et /etc/hostname afin d’avoir les hostnames

  • pimaster
  • pinode

et une résolution du 127.0.0.1 correspondant

Installation k8

modification du système pour la gestion de la mémoire

dphys-swapfile swapoff && \
dphys-swapfile uninstall && \
update-rc.d dphys-swapfile remove
swapon --summary

Ajout de la cpu, memory dans cgroup recouces, pour cela on edit /boot/cmdline.txt et on ajoute

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Il faut redémarrer la machine pour prendre en compte ces éléments

reboot-h now

On peut maintenant installer k8

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubeadm kubectl

Gestion du master

Initialisation du noeud master

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.80

Note

cela est très long …

Warning

Gardez bien dans un coin la commande “kubeadm join” est sera indispensable pour les noeuds

Installez les composants network Kubernetes afin que les pods et noeuds puissent échanger entre eux sans NAT

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

Vérifiez que l’installation se soit bien passé

kubectl get pods --all-namespaces

Gestion des noeuds

Il faut simplement joindre le master via la command “kubeadm join” obtenu sur le master

kubeadm join

On peut vérifier sur le master que le noeud est bien ajouté via la commande

kubectl get nodes

On peut maintenant jouer et tester notre cluster