Aller au contenu principal

Mise en place de Kubernetes

Les objectifs de ce chapitre sont :

  • de créer deux VM, une contenant le nœud de gestion (control panel), la seconde contenant un nœud de travail (worker).

1. Préparation des VMs

  • Configuration des VM à l'aide d'un fichier Vagrantfile

Vous trouverez ci-dessous un exemple de Vagrantfile permettant d'avoir deux VM avec la configuration minimale demandé par Kubernetes :

# -*- mode: ruby -*-
# # vi: set ft=ruby :

Vagrant.configure("2") do |config|
config.vm.define "kubmaster" do |kub|
kub.vm.box = "bento/ubuntu-20.04"
kub.vm.hostname = "kubmaster"
kub.vm.provision "docker"
kub.vm.box_url = "bento/ubuntu-20.04"

kub.vm.network :private_network, ip: "192.168.56.101", hostname: true

kub.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "kubmaster"]
v.customize ["modifyvm", :id, "--cpus", "2"]
v.customize ["modifyvm", :id, "--memory", "2048"]
end
end

config.vm.define "kubnode" do |kubnode|
kubnode.vm.box = "bento/ubuntu-20.04"
kubnode.vm.hostname = "kubnode"
kubnode.vm.provision "docker"
kubnode.vm.box_url = "bento/ubuntu-20.04"

kubnode.vm.network :private_network, ip: "192.168.56.102", hostname: true

kubnode.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--name", "kubnode"]
v.customize ["modifyvm", :id, "--cpus", "2"]
v.customize ["modifyvm", :id, "--memory", "2048"]
end
end
end
  • Désactivation du swap sur les VM

Pour démarrer des VM avec Vagrant, il vous suffit de lancer la commande vagrant up dans le dossier comprenant le Vagrantfile.

Une fois les deux VM de démarrées, nous allons nous connecter sur chacune d'entre elles avec la commande vagrant ssh kubmaster puis vagrant ssh kubnode pour y désactiver le swap en mode root.

Pour passer en mode root, utiliser la commande sudo su, puis la commande swapoff -a pour désactiver le swap. Afin que le swap ne se relance pas en cas de redémarrage de la VM, nous allons aussi modifier le fichier /etc/fstab afin d'y commenter la ligne correspondant au swap.

  • Installation des composants de Kubernetes sur les VM

# Prerequisites
sudo apt update
sudo apt install -y wget gpg

# Downloading and registering Kubernetes public key
wget -qO- https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --yes --dearmor --output /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# Add Kubernetes repo
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

# Install Kubernetes
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# Kubelet activation
sudo systemctl enable --now kubelet

2. Configuration de kubernetes

  • Initialisation kubeadm

Sur les deux VM, nous allons nous assurer que le plugin cri de containerd est bien actif en vérifiant sa configuration dans le fichier /etc/containerd/config.toml et en le modifiant si nécessaire. En cas de modification, il faut redémarrer le service avec la commande sudo systemctl restart containerd

Nous allons maintenant initialiser notre cluster sur le kubmaster avec la commande suivante :

sudo kubeadm init --apiserver-advertise-address=192.168.56.101 --node-name $HOSTNAME --pod-network-cidr=10.244.0.0/16

Une fois son execution terminée, nous allons suivre ses consignes et lancer les commandes suivantes pour permettre la connexion au cluster :

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Nous allons aussi précieusement stocker la commande kubeadm join ... qui nous sera utile plus tard pour connecter la VM kubnode.

En attendant, nous allons déployer un pod network afin de finaliser la configuration du cluster avec la commande ci-dessous :

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  • Configuration du kubnode

Lancer la commande kube join ... précédemment mise de côté.

  • Configuration de l'autocomplétion

apt-get install bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
source .bashrc
  • Utilisation de kubectl en dehors de la VM

  • Installer kubectl

  • Récupérer le token de connexion via la commande suivante

mkdir ~/.kube/
ssh vagrant@<ip de la vm kubmaster> "sudo cat /etc/kubernetes/admin.conf" > .kube/config