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