Comment démarrer un cluster Kubernetes à partir de zéro avec Kubeadm et Kubectl

0
173

Kubernetes est réputé pour sa complexité, mais les versions modernes sont relativement simples à configurer. L'outil d'administration de cluster officiel Kubeadm fournit une expérience automatisée pour démarrer votre plan de contrôle et enregistrer les nœuds de travail.

Cet article vous guidera dans la configuration d'un cluster Kubernetes simple à l'aide de la configuration par défaut. Il s'agit d'un “à partir de zéro” guide qui devrait fonctionner sur un hôte fraîchement provisionné. Un système basé sur Debian est supposé, mais vous pouvez ajuster la plupart des commandes pour qu'elles correspondent au gestionnaire de paquets de votre système d'exploitation. Ces étapes ont été testées avec Ubuntu 22.04 et Kubernetes v1.25.

Installation d'un conteneur Runtime

Kubernetes a besoin d'un environnement d'exécution de conteneur compatible CRI pour démarrer et exécuter vos conteneurs. La distribution Kubernetes standard n'est pas fournie avec un environnement d'exécution, vous devez donc en installer un avant de continuer. containerd est le choix le plus populaire. Il s'agit du runtime inclus dans les versions modernes de Docker.

Vous pouvez installer containerd à l'aide du référentiel Apt de Docker. Ajoutez d'abord quelques dépendances qui seront utilisées lors de la procédure d'installation :

$ sudo apt update $ sudo apt install -y ca-certificates curl gnupg lsb-release

Ajoutez ensuite le référentiel&# Clé GPG de 8217 vers le répertoire des trousseaux de clés d'Apt :

$ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg

Vous pouvez maintenant ajouter le référentiel correct pour votre système en exécutant cette commande :

$ echo “deb [arch=$(dpkg –print-architecture) signé-par=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Mettez à jour votre liste de packages pour inclure le contenu du référentiel Docker :

$ sudo apt update

Installez enfin containerd :

$ sudo apt install -y containerd.io

Vérifiez que le service containerd a démarré up :

$ sudo service containerd status containerd.service – runtime du conteneur containerd Chargé : chargé (/lib/systemd/system/containerd.service ; activé ; préréglage du fournisseur : activé) Actif : actif (en cours d'exécution) depuis le mar. 2022- 09-13 16:50:12 BST ; il y a 6 s

Quelques ajustements au fichier de configuration containerd sont nécessaires pour qu'il fonctionne correctement avec Kubernetes. Remplacez d'abord le contenu du fichier par la configuration par défaut du conteneur :

$ sudo containerd config default > /etc/containerd/config.toml

Cela remplit tous les champs de configuration disponibles et résout certains problèmes, tels que la prise en charge du CRI désactivée sur les nouvelles installations.

Ouvrir ensuite /etc/containerd/config. toml et recherchez la ligne suivante :

SystemdCgroup = false

Changez la valeur en true :

SystemdCgroup = true

Cette modification est nécessaire pour activer la prise en charge complète de la gestion des groupes de contrôle systemd. Sans cette option, les conteneurs du système Kubernetes redémarreront périodiquement.

Redémarrez containerd pour appliquer vos modifications :

$ sudo service containerd restart

Installation de Kubeadm, Kubectl et Kubelet

La deuxième phase du processus consiste à installer les outils Kubernetes. Ces trois utilitaires offrent les fonctionnalités suivantes :

  • Kubeadm– Un outil d'administration qui fonctionne au niveau du cluster. Vous l'utiliserez pour créer votre cluster et ajouter des nœuds supplémentaires.
  • Kubectl – Kubectl est la CLI que vous utilisez pour interagir avec votre cluster Kubernetes une fois qu'il est en cours d'exécution.
  • Kubelet – Il s'agit du processus Kubernetes qui s'exécute sur les noeuds worker de votre cluster. Il est chargé de maintenir le contact avec le plan de contrôle et de démarrer de nouveaux conteneurs sur demande.

Les trois binaires sont disponibles dans un référentiel Apt hébergé par Google Cloud. Enregistrez d'abord le trousseau de clés GPG du référentiel :

$ sudo curl -fsSLo /etc/apt/keyrings/kubernetes.gpg https://packages.cloud.google.com/apt/doc/apt-key. gpg

Ajoutez ensuite le référentiel à vos sources…

$ echo “deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/kubernetes- xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list

…et mettez à jour votre liste de paquets :

$ sudo apt update

Installez maintenant les packages :

$ sudo apt install -y kubeadm kubectl kubelet

Il est recommandé de “tenir” ces packages afin qu'Apt ne les mette pas automatiquement à jour lorsque vous exécutez apt upgrade. Les mises à niveau du cluster Kubernetes doivent être lancées manuellement pour éviter les temps d'arrêt et éviter les changements de rupture indésirables.

$ sudo apt-mark hold kubeadm kubectl kubelet

Désactivation de l'échange

Kubernetes ne fonctionne pas lorsque l'échange est activé. Vous devez désactiver la permutation avant de créer votre cluster. Sinon, vous constaterez que le processus de provisionnement se bloque en attendant le démarrage de Kubelet.

Exécutez cette commande pour désactiver l'échange :

$ sudo swapoff -a

Editez ensuite votre /etc/fstab et désactivez tout montage swap :

UUID=ec6efe91-5d34-4c80-b59c-cafe89cc6cb2/ext4 errors=remount-ro 0 1 /swapfile none swap sw 0 0

Ce fichier montre un montage avec le swap tapez comme dernière ligne. Il doit être supprimé ou commenté afin que l'échange reste désactivé après le redémarrage du système.

Charger le module br_netfilter

Le module noyau br_netfilter est requis pour permettre à iptables de voir le trafic ponté. Kubeadm ne vous laissera pas créer votre cluster lorsque ce module est manquant.

Vous pouvez l'activer avec la commande suivante :

$ sudo modprobe br_netfilter

Rendez-le persistant après un redémarrage en l'incluant dans la liste des modules de votre système :

$ echo br_netfilter | sudo tee /etc/modules-load.d/kubernetes.conf

Création de votre cluster

Vous êtes prêt à créer votre cluster Kubernetes. Exécutez kubeadm init sur la machine sur laquelle vous souhaitez héberger votre plan de contrôle :

$ sudo kubeadm init –pod-network-cidr=10.244.0.0/16

L'indicateur –pod-network-cidr est inclus afin qu'une allocation CIDR correcte soit disponible pour l'addon réseau Pod qui sera installé ultérieurement. La valeur par défaut de 10.244.0.0/16 fonctionne dans la plupart des cas, mais vous devrez peut-être modifier la plage si vous utilisez un environnement réseau fortement personnalisé.

La création d'un cluster peut prendre plusieurs minutes. Les informations de progression seront affichées dans votre terminal. Vous devriez voir ce message en cas de succès :

Votre plan de contrôle Kubernetes a été initialisé avec succès !

La sortie comprend également des informations sur la façon de commencer à utiliser votre cluster.

Préparation de votre fichier Kubeconfig

Commencez par copier le fichier Kubeconfig généré automatiquement dans votre propre répertoire .kube/config. Ajustez la propriété du fichier pour que Kubectl puisse lire son contenu correctement.

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

Installation d'un module complémentaire de mise en réseau de pod

Kubernetes nécessite qu'un module complémentaire de mise en réseau de pod existe dans votre cluster avant que les nœuds de travail ne commencent à fonctionner normalement. Vous devez installer manuellement un module complémentaire compatible pour terminer votre installation.

Calico et Flannel sont les deux choix les plus populaires. Ce guide utilise Flannel en raison de sa simplicité d'installation.

Utilisez Kubectl pour ajouter Flannel à votre cluster :

$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Attendez quelques instants, puis exécutez kubectl get nodes dans votre terminal. Vous devriez voir votre nœud s'afficher comme étant prêt et vous pouvez commencer à interagir avec votre cluster.

$ kubectl get nodes NOM STATUT RÔLES ÂGE VERSION ubuntu22 Ready control-plane 7m19s v1.25.0

Si vous exécutez kubectl get pods –all-namespaces, vous devriez voir que les composants du plan de contrôle, CoreDNS et Flannel sont tous en place et en cours d'exécution :

$ kubectl get pods –all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-xlrk6 1/1 En cours d'exécution 5 (il y a 16 s) 11 mois kube-system coredns-565d847f94-bzzkf 1/1 En cours d'exécution 5 (2m9s 14 min (il y a 30 s) 16 min kube-system kube-controller-manager-ubuntu22 1/1 En cours d'exécution 7 (il y a 3 min 59 s) ubuntu22 1/1 En cours d'exécution 7 (il y a 30 s) 15 min

Interagir avec votre cluster

Vous pouvez maintenant commencer à utiliser Kubectl pour interagir avec votre cluster. Avant de continuer, supprimez la teinte par défaut sur votre nœud de plan de contrôle pour permettre aux pods de planifier dessus. Kubernetes empêche les pods de s'exécuter sur le nœud du plan de contrôle pour éviter les conflits de ressources, mais cette restriction n'est pas nécessaire pour une utilisation locale.

$ kubectl taint node ubuntu22 node-role.kubernetes.io/control-plane:NoSchedule- node/ubuntu22 untainted

Remplacez ubuntu22 dans la commande ci-dessus par le nom attribué à votre propre nœud.

Maintenant, essayez de démarrer un pod NGINX simple :

$ kubectl run nginx –image nginx:latest pod/nginx créé

Exposez-le avec un service NodePort :

$ kubectl expose pod/nginx –port 80 –type NodePort service/nginx exposés

Recherchez le port hôte qui a été alloué au service :

$ kubectl get services NOM TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <aucun> 443/TCP 18m nginx NodePort 10.106.44.155 <aucun> 80:30647/TCP 27s

Le port est 30647. Les requêtes HTTP vers ce point de terminaison doivent maintenant émettre la page de destination NGINX par défaut en réponse :

$ curl http://localhost:30647 <!DOCTYPE html> <html> <tête> <titre>Bienvenue dans nginx !</titre>

Votre cluster Kubernetes fonctionne !

Ajout d'un autre nœud

Pour configurer des nœuds de travail supplémentaires, répétez d'abord toutes les étapes des sections jusqu'à la “Création de votre cluster” sur chaque machine que vous souhaitez utiliser. Chaque nœud aura besoin de containerd, Kubeadm et Kubelet installés. Vous devez également vérifier que votre nœud dispose d'une connectivité réseau complète à la machine qui exécute votre plan de contrôle.

Exécutez ensuite la commande suivante sur votre nouveau nœud de travail :

kubeadm join 192.168.122.229 :6443 –node-name node-b –token <token> –discovery-token-ca-cert-hash sha256 :<token-ca-cert-hash>

Remplacez l'adresse IP par celle de votre nœud de plan de contrôle. Les valeurs de <token> et <token-ca-cert-hash> aura été affiché lorsque vous avez exécuté kubeadm init pour créer votre plan de contrôle. Vous pouvez les récupérer en suivant les étapes suivantes.

Token

Exécutez kubeadm token list sur le nœud du plan de contrôle. La valeur du jeton sera affichée dans la colonne TOKEN.

$ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS lkoz6v.cw1e01ckz2yqvw4u 23h 2022-09-14T19:35:03Z authentication,signing

Token CA Cert Hash

Exécutez cette commande et utilisez sa sortie comme valeur :

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Rejoindre le cluster

La commande kubeadm join devrait produire cette sortie en cas de succès :

$ kubeadm join 192.168.122.229:6443 –node-name node-b –token <token> –discovery-token-ca-cert-hash sha256 :<token-ca-cert-hash> [kubelet-start] Démarrage du kubelet[kubelet-start] En attente que le kubelet effectue le démarrage TLS… Ce nœud a rejoint le cluster : * La demande de signature de certificat a été envoyée à apiserver et une réponse a été reçue. * Le Kubelet a été informé des nouveaux détails de la connexion sécurisée. Exécutez « kubectl get nodes » sur le plan de contrôle pour voir ce nœud rejoindre le cluster.

Vérifiez que le nœud a rejoint le cluster et est prêt à recevoir des pods en exécutant la commande kubectl get nodes :

$ kubectl get nodes NAME STATUS ROLES AGE VERSION node-b Ready <none> 91s v1.25.0 ubuntu22 Plan de contrôle prêt 100m v1.25.0

Le nœud apparaît dans la liste et son statut est Prêt. Cela signifie qu'il est opérationnel et que Kubernetes peut y programmer des pods.

Résumé

La configuration de Kubernetes peut sembler décourageante, mais Kubeadm automatise la plupart des parties difficiles pour toi. Bien qu'il reste encore plusieurs étapes à franchir, vous ne devriez pas rencontrer de problèmes si vous vous assurez que les conditions préalables sont remplies avant de commencer.

La plupart des problèmes surviennent parce qu'il n'y a pas d'exécution de conteneur disponible, que le module de noyau br_netfilter est manquant, que l'échange est activé ou que la nécessité de fournir un module complémentaire de mise en réseau du pod a été négligée. Le dépannage doit commencer par vérifier ces erreurs courantes.

Kubeadm vous fournit la dernière version de Kubernetes directement à partir du projet lui-même. Des distributions alternatives sont disponibles qui vous permettent de démarrer un cluster à nœud unique avec une seule commande. Minikube, MicroK8 et K3 sont trois options populaires. Bien qu'ils soient généralement plus faciles à configurer et à mettre à niveau, ils présentent tous de légères différences par rapport à Kubernetes en amont. L'utilisation de Kubeadm vous rapproche de Kubernetes’ fonctionnement interne et s'applique à de nombreux environnements différents.

LIRE LA SUITE

  • › Comment composer une extension sur iPhone et Android
  • › 6 façons d'améliorer les notifications sur iPhone
  • › Comment organiser une session de questions-réponses dans Google Meet
  • &rsaquo ; Comment partager un agenda Google
  • &rsaquo ; Comment placer au mieux un purificateur d'air
  • &rsaquo ; Utiliser un réseau invité Wi-Fi ? Vérifiez ces paramètres