Pour préparer un système Ubuntu à héberger des composants Kubernetes, plusieurs étapes de configuration système sont nécessaires.
Installation et configuration du serveur SSH
L'installation d'openssh-server permet d'établir des connexions à distance.
sudo apt update
sudo apt install -y openssh-server
Il est conseillé de désinstaller la version par défaut de vim pour la remplacer par une version plus complète.
sudo apt remove vim-common -y
sudo apt install vim -y
La configuration du serveur SSH peut être modifiée pour autoriser la connexion en tant qu'utilisateur root, bien que cela soit généralement déconseillé pour des raisons de sécurité.
sudo vi /etc/ssh/sshd_config
Dans ce fichier, décommentez ou ajoutez la ligne suivante :
PermitRootLogin yes
Après modification, redémarrez le service SSH :
sudo systemctl restart ssh
Configuration du nom d'hôte et du fichier hosts
Définir un nom d'hôte unique pour chaque nœud est crucial. Par exemple, pour un nœud worker :
sudo echo k8s-worker-1 > /etc/hostname
Modifiez ensuite le fichier /etc/hosts pour mapper les adresses IP aux noms d'hôtes du cluster.
sudo vi /etc/hosts
Ajoutez les entrées suivantes, en adaptant les adresses IP et les noms :
192.168.1.100 k8s-master
192.168.1.101 k8s-worker-1
192.168.1.102 k8s-worker-2
Désactivation du pare-feu et de l'espace d'échange
Pour faciliter la communication entre les nœuds du cluster, il est souvent nécessaire de désactiver le pare-feu.
sudo ufw disable
L'espace d'échange (swap) doit également être désactivé pour éviter des comportements imprévisibles avec Kubernetes.
sudo swapoff -a
# Commentez les lignes relatives au swap dans /etc/fstab pour le désactiver au redémarrage
sudo vi /etc/fstab
Installation de Docker
Supprimez les anciennes versions de Docker avant d'installer la dernière version.
sudo apt remove docker docker-engine docker.io containerd runc -y
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Configurez containerd pour utiliser systemd comme cgroup driver, ce qui est requis par Kubernetes.
sudo systemctl stop containerd.service
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
sudo containerd config default > $HOME/config.toml
sudo cp $HOME/config.toml /etc/containerd/config.toml
# Adaptez le chemin du binaire de pause si nécessaire, ici pour un registre chinois
sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
sudo systemctl restart docker.service
sudo systemctl enable docker.service
sudo systemctl enable --now containerd.service
Configurez le démon Docker pour utiliser systemd comme cgroup driver et spécifiez un miroir de registre.
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hnkfbj7x.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Vérifiez que Docker et Containerd fonctionnent correctement.
sudo systemctl status docker.service
sudo systemctl status containerd.service
Installation des composants Kubernetes
Installez les paquets nécessaires pour Kubernetes, en spécifiant la version désirée.
sudo apt update
sudo apt install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo vi /etc/apt/sources.list.d/kubernetes.list
Ajoutez la ligne suivante dans le fichier kubernetes.list :
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
sudo apt update
sudo apt install -y kubelet=1.25.3-00 kubeadm=1.25.3-00 kubectl=1.25.3-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet
Les commandes ci-dessus doivent être exécutées sur tous les nœuds du cluster (master et workers).
Initialisation du nœud master
Sur le nœud désigné comme master, exécutez la commande kubeadm init pour initialiser le cluster. Utilisez une image de registre appropriée.
sudo kubeadm init --image-repository=registry.aliyuncs.com/google_container
Après l'exécution de cette commande, une commande join sera générée. Copiez et sauvegardez cette commande, car elle sera nécessaire pour connecter les nœuds workers au cluster.
Configurez kubectl pour interagir avec le cluster :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Commandes de vérification et de gestion
Utilisez kubectl pour vérifier l'état du cluster.
# Afficher les informations générales du cluster
kubectl cluster-info
# Afficher les pods en cours d'exécution sur tous les namespaces
kubectl get pods --all-namespaces -o wide
# Afficher la liste des nœuds du cluster
kubectl get nodes
# Vérifier l'état des certificats du cluster
kubectl get cs
Configuration du réseau du cluster
L'étape suivante consiste à déployer un plugin réseau (CNI) tel que Calico, Flannel, ou Cilium pour permettre la communication entre les pods.