E-NO
DevOps 8 min de lecture

Automatisation CI/CD de Kubeadm Init avec exemples pratiques : guide de mise en œuvre concret

calendar_today Publié : 2026-08-26
update Dernière mise à jour : 2026-08-26
analytics Efficacité SEO : 100%
Illustration du guide technique pour « Automatisation CI/CD de Kubeadm Init avec exemples pratiques : guide de mise en œuvre concret ».

Introduction

Kubeadm init est la base de l'amorçage des plans de contrôle Kubernetes, mais l'exécuter manuellement en production introduit de l'incohérence, une dérive de configuration et des déploiements non reproductibles. Automatiser kubeadm init dans un pipeline CI/CD réduit ces risques en imposant le contrôle de version, la validation préalable et la restauration automatisée. Cet article fournit un guide de mise en œuvre pratique destiné aux ingénieurs DevOps, aux équipes plateforme et aux responsables techniques de startups qui doivent gérer kubeadm init sous forme de code. Nous mettons l'accent sur la sécurité opérationnelle : observer avant de modifier, limiter le rayon d'impact, utiliser des espaces réservés plutôt que des secrets, vérifier les résultats et documenter les chemins de récupération.

Vous apprendrez à inventorier votre environnement, à gérer la configuration de kubeadm en toute sécurité, à vérifier la santé du cluster, à gérer les modes de défaillance courants et à élaborer une liste de contrôle opérationnelle. Chaque section comprend des commandes concrètes, les sorties attendues, les signaux d'échec et les décisions de récupération adaptées à l'automatisation de kubeadm init.

Inventaire des versions et de l'environnement

Avant d'automatiser kubeadm init, vous devez savoir exactement avec quoi vous travaillez : version de Kubernetes installée, conteneur runtime, plugin réseau, système d'exploitation et topologie matérielle. Cet inventaire évite les incompatibilités de versions et garantit que votre pipeline utilise les bons binaires et la bonne configuration.

Étape 1 : Capturer les versions installées

Exécutez ces commandes en lecture seule sur le nœud cible pour enregistrer l'état actuel :

# Composants Kubernetes
kubeadm version -o short   # ex. : v1.28.2
kubelet --version          # ex. : Kubernetes v1.28.2
kubectl version --client   # ex. : Client Version: v1.28.2

# Conteneur runtime (exemple pour containerd)
containerd --version       # ex. : containerd 1.7.7

# Système d'exploitation et noyau
cat /etc/os-release | head -n 2   # ex. : Ubuntu 22.04.3 LTS
uname -r                          # ex. : 5.15.0-91-generic

Sortie attendue : chaînes de version correspondant à la version de cluster planifiée. Enregistrez-les dans un fichier lisible par machine, par exemple inventory.yaml, et validez-le dans votre dépôt de configuration.

Étape 2 : Vérifier les prérequis

Kubeadm nécessite des paramètres de noyau, des ports et des réglages système spécifiques. Vérifiez-les avec :

# S'assurer que les modules noyau requis sont chargés
lsmod | grep br_netfilter    # Attendu : br_netfilter

# Vérifier les paramètres sysctl pour le réseau
sysctl net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
# Attendu : net.bridge.bridge-nf-call-iptables = 1, net.ipv4.ip_forward = 1

# Vérifier que le swap est désactivé (obligatoire)
swapon --show                # Attendu : aucune sortie

# Vérifier que les ports nécessaires ne sont pas utilisés (ex. : 6443 pour le serveur API)
ss -tulpn | grep 6443        # Attendu : aucune sortie avant l'initialisation

Si un prérequis échoue, corrigez-le avant de continuer. Par exemple, pour désactiver le swap de façon permanente :

sudo sed -i '/ swap / s/^/#/' /etc/fstab
sudo swapoff -a

Étape 3 : Identifier la topologie de déploiement

Documentez la topologie du cluster : nœud de plan de contrôle unique ou multi-maîtres, adresses IP des nœuds et plages réseau. Exemple :

  • IP du nœud de plan de contrôle : 192.168.1.10
  • CIDR du réseau de pods : 10.244.0.0/16 (pour Flannel)
  • CIDR des services : 10.96.0.0/12
  • Point de terminaison du conteneur runtime : unix:///run/containerd/containerd.sock

Stockez ces valeurs comme variables dans votre pipeline CI/CD (par exemple, CONTROL_PLANE_IP, POD_CIDR).

Rayon d'impact et récupération

Modifier des versions ou la topologie affecte l'ensemble du cluster. Limitez les modifications à un composant à la fois. Par exemple, si vous mettez à niveau containerd, testez-le d'abord sur un nœud hors production. Ayez un plan de restauration : conservez les binaires précédents et des instantanés de configuration afin de pouvoir restaurer le nœud en cas d'échec de la mise à niveau.

Question rapide 1 sur 2

Que se passe-t-il lors de la première étape du flux de travail `kubeadm init` ?

Selon la référence [1], la première étape du flux de travail `kubeadm init` consiste à exécuter une série de vérifications préalables pour valider l'état du système avant d'apporter des modifications.

Chemin de configuration sécurisé

Kubeadm utilise un fichier de configuration (kubeadm-config.yaml) pour définir les paramètres du cluster. Automatiser kubeadm init nécessite que ce fichier soit versionné, validé et appliqué de manière cohérente.

Étape 1 : Générer la configuration de base

Utilisez kubeadm config print init-defaults pour obtenir la configuration par défaut de votre version, puis personnalisez-la. Exemple pour Kubernetes v1.28 :

kubeadm config print init-defaults --kubeconfig /dev/null > kubeadm-config.yaml

La sortie comprend des sections telles que apiVersion, kind, clusterName, controlPlaneEndpoint, networking, etc. Modifiez le fichier avec les valeurs de votre topologie :

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.1.10
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  name: control-plane-01
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
controlPlaneEndpoint: "192.168.1.10:6443"
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/12"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

Enregistrez ce fichier dans votre dépôt Git, par exemple kubeadm/init-config.yaml.

Étape 2 : Valider la configuration avant l'application

Exécutez kubeadm config validate pour vérifier la syntaxe et la compatibilité des versions :

kubeadm config validate --config kubeadm/init-config.yaml

Sortie attendue : aucune erreur. Si la validation échoue, la commande se termine avec un code non nul et affiche le problème spécifique.

Étape 3 : Appliquer la configuration en mode simulation

Avant l'initialisation réelle, exécutez une simulation pour voir ce que kubeadm ferait :

kubeadm init --config kubeadm/init-config.yaml --dry-run

Sortie attendue : une description des actions sans effectuer de modifications. Examinez la sortie pour détecter toute action inattendue.

Étape 4 : Automatiser dans le pipeline CI/CD

Votre pipeline doit :

  1. Extraire le fichier de configuration depuis Git.
  2. Exécuter kubeadm config validate.
  3. Exécuter la simulation.
  4. Si tout réussit, appliquer la configuration sur un nœud désigné.
  5. Capturer la sortie de kubeadm init, qui comprend la commande kubeadm join et l'emplacement du kubeconfig administrateur.

Exemple d'étape de pipeline Jenkins :

stage('Kubeadm Init') {
    steps {
        sh 'kubeadm config validate --config kubeadm/init-config.yaml'
        sh 'kubeadm init --config kubeadm/init-config.yaml --dry-run'
        sh 'kubeadm init --config kubeadm/init-config.yaml'
    }
}

Important : ne codez jamais en dur des secrets comme les jetons dans le fichier de configuration. Utilisez des espaces réservés et injectez les secrets depuis votre gestionnaire de secrets CI/CD. Par exemple, la section bootstrapTokens peut être omise ; kubeadm génère un jeton automatiquement. Si vous avez besoin d'un jeton spécifique, utilisez une variable comme $KUBEADM_TOKEN et définissez-la dans l'environnement du pipeline.

Rayon d'impact et récupération

L'application d'une configuration peut perturber tout le cluster si elle est incorrecte. Limitez l'exécution du pipeline à un environnement contrôlé (par exemple, un nœud de test) et exigez une approbation manuelle pour la production. Conservez les versions précédentes de la configuration dans Git ; vous pouvez revenir en extrayant un commit antérieur et en réappliquant après un kubeadm reset.

Vérification et diagnostics

Après kubeadm init, vérifiez que le cluster est sain avant de poursuivre toute autre automatisation.

Étape 1 : Vérifier l'état du cluster

Configurez le kubeconfig pour l'utilisateur administrateur :

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

export KUBECONFIG=$HOME/.kube/config

Ensuite, exécutez :

kubectl get nodes

Sortie attendue : le nœud de plan de contrôle apparaît avec le statut Ready (peut prendre une minute). Si le statut est NotReady, vérifiez les conditions du nœud avec kubectl describe node <nom-du-nœud>.

Vérifiez les pods du plan de contrôle :

kubectl get pods -n kube-system

Attendu : tous les pods en cours d'exécution, y compris kube-apiserver, kube-controller-manager, kube-scheduler, etcd et les pods du plugin réseau (par exemple, Flannel). Si un pod est en CrashLoopBackOff, examinez ses journaux.

Étape 2 : Vérifier CoreDNS et le réseau

Assurez-vous que le DNS fonctionne :

kubectl get pods -n kube-system -l k8s-app=kube-dns

Attendu : pods CoreDNS en cours d'exécution. Testez la résolution DNS :

kubectl run -it --rm dns-test --image=busybox:1.28 -- nslookup kubernetes.default

Sortie attendue : l'IP du service pour kubernetes.default est renvoyée.

Vérifiez les pods du plugin réseau :

kubectl get pods -n kube-system | grep flannel   # si vous utilisez Flannel

Attendu : pods flannel en cours d'exécution.

Étape 3 : Vérifier la santé de Kubelet

Sur le nœud, vérifiez l'état du service kubelet :

systemctl status kubelet

Attendu : actif (en cours d'exécution). Vérifiez les journaux de kubelet pour les erreurs :

journalctl -u kubelet -n 50 --no-pager

Étape 4 : Commandes de diagnostic pour les problèmes courants

  • Le serveur API ne répond pas : curl -k https://<ip-plan-de-contrôle>:6443/healthz doit renvoyer ok.
  • Problèmes avec etcd : kubectl -n kube-system exec -it etcd-<nom-du-nœud> -- etcdctl endpoint health.
  • Nœud non prêt : kubectl describe node <nom-du-nœud> pour voir les conditions et les événements.

Rayon d'impact et récupération

Les commandes de vérification sont en lecture seule et sûres. Si la vérification échoue, évitez d'apporter des modifications tant que vous n'avez pas diagnostiqué la cause profonde. Utilisez les commandes de diagnostic pour recueillir des informations, puis décidez d'une action de récupération dans la section Modes de défaillance.

Question rapide 2 sur 2

Quelle commande peut être utilisée pour invoquer chaque tâche de `kubeadm init` individuellement ?

La référence [2] indique que la commande `kubeadm init phase` permet aux utilisateurs d'invoquer chaque tâche individuellement.

Modes de défaillance et récupération

L'initialisation automatisée de kubeadm peut échouer pour diverses raisons. Voici les modes de défaillance courants, leurs symptômes et les étapes de récupération.

Mode de défaillance 1 : échec des contrôles préalables

Symptôme : kubeadm init se termine avec une erreur telle que [ERROR Port-6443]: Port 6443 is in use ou [ERROR Swap]: running with swap on is not supported.

Récupération :

  • Identifiez l'erreur spécifique dans la sortie.
  • Corrigez le problème, par exemple, libérez le port 6443 en arrêtant le processus en conflit, ou désactivez le swap comme indiqué précédemment.
  • Relancez le pipeline.

Mode de défaillance 2 : délai d'attente pendant l'initialisation

Symptôme : kubeadm init se bloque et finit par expirer, souvent en raison de problèmes de réseau ou du conteneur runtime.

Récupération :

  • Vérifiez l'état du conteneur runtime : systemctl status containerd.
  • Consultez les journaux : journalctl -u kubelet -n 100.
  • Vérifiez la connectivité réseau vers les points de terminaison requis (par exemple, registry.k8s.io).
  • Si le problème persiste, exécutez kubeadm reset pour nettoyer l'état partiel, puis réessayez.

Mode de défaillance 3 : erreurs de certificat

Symptôme : kubeadm init échoue avec des erreurs liées aux certificats, telles que des certificats expirés ou des permissions incorrectes.

Récupération :

  • Les certificats sont générés pendant l'initialisation. Si vous réinitialisez après une réinitialisation, assurez-vous que les anciens certificats sont supprimés (kubeadm reset le fait).
  • Si vous devez renouveler les certificats après l'initialisation, utilisez kubeadm certs renew all.

Mode de défaillance 4 : le plugin réseau ne fonctionne pas

Symptôme : les nœuds sont prêts mais les pods ne peuvent pas communiquer ; les pods CoreDNS sont en attente (Pending) ou en CrashLoopBackOff.

Récupération :

  • Vérifiez que le CIDR du réseau de pods correspond aux attentes de votre plugin réseau (par exemple, Flannel attend 10.244.0.0/16).
  • Réinstallez le plugin réseau avec les manifestes corrects.
  • Si nécessaire, réinitialisez et réinitialisez avec le bon CIDR.

Stratégie générale de restauration

Si une initialisation échouée laisse le nœud dans un état incohérent, effectuez une réinitialisation complète :

kubeadm reset -f
sudo rm -rf /etc/cni/net.d
sudo ip link delete cni0
sudo systemctl restart containerd

Relancez ensuite le pipeline à partir d'un état propre. Documentez les étapes de restauration dans votre runbook et testez-les périodiquement.

Rayon d'impact et récupération

Tentez toujours la récupération dans un environnement hors production d'abord. Si un nœud de production échoue, suivez votre plan de réponse aux incidents, qui doit inclure la notification des parties prenantes et éventuellement la restauration à partir d'un instantané si disponible.

Liste de contrôle opérationnelle

Utilisez cette liste de contrôle avant et après chaque exécution d'automatisation de kubeadm init.

Liste de contrôle pré-exécution

  • [ ] Inventaire capturé : versions de kubeadm, kubelet, containerd, noyau du système d'exploitation (vérifiées avec les commandes de la section 1).
  • [ ] Prérequis satisfaits : swap désactivé, modules noyau chargés, paramètres sysctl corrects, ports libres.
  • [ ] Fichier de configuration kubeadm/init-config.yaml validé et validé avec kubeadm config validate.
  • [ ] Simulation exécutée et sortie examinée.
  • [ ] Secrets gérés : aucun jeton ou clé codé en dur dans la configuration ; injection de secrets configurée.
  • [ ] Rayon d'impact évalué : modifications limitées au nœud cible, plan de restauration prêt (par exemple, commande kubeadm reset documentée).
  • [ ] Approbation obtenue pour l'exécution en production.

Liste de contrôle post-exécution

  • [ ] kubeadm init terminé sans erreur ; sortie enregistrée dans un fichier journal.
  • [ ] Kubeconfig administrateur copié et permissions définies correctement.
  • [ ] kubectl get nodes montre le nœud de plan de contrôle prêt.
  • [ ] Tous les pods du plan de contrôle en cours d'exécution (kubectl get pods -n kube-system).
  • [ ] Test de résolution CoreDNS réussi.
  • [ ] Pods du plugin réseau en cours d'exécution.
  • [ ] Service Kubelet actif et journaux exempts d'erreurs critiques.
  • [ ] Commande de jonction du cluster stockée en toute sécurité pour les futurs nœuds de travail.
  • [ ] Documentation mise à jour avec les écarts ou étapes supplémentaires.

Exemple d'entrée de runbook opérationnel

Pour une initialisation typique sur un nouveau nœud Ubuntu 22.04 :

ÉtapeCommandeRésultat attenduSignal d'échecRécupération
1. Inventairekubeadm version -o shortv1.28.2Commande introuvableInstaller le paquet kubeadm correspondant
2. Valider la configkubeadm config validate --config kubeadm/init-config.yamlAucune sortieErreurs de validationCorriger la syntaxe de la config
3. Simulationkubeadm init --config kubeadm/init-config.yaml --dry-runSortie de descriptionActions inattenduesAjuster la config
4. Initialisationkubeadm init --config kubeadm/init-config.yamlMessage de succès, chemin du kubeconfigErreur (ex. : échec des prérequis)Diagnostiquer, réinitialiser si nécessaire
5. Vérifier les nœudskubectl get nodesNœud prêtNotReadyVérifier kubelet, plugin réseau
6. Vérifier les podskubectl get pods -n kube-systemTous en cours d'exécutionPods en CrashLoopExaminer les journaux

Conclusion

Automatiser kubeadm init dans les pipelines CI/CD transforme l'amorçage du cluster d'un processus manuel sujet aux erreurs en une opération reproductible et auditable. En versionnant la configuration, en validant avant d'appliquer, en vérifiant après l'initialisation et en planifiant les échecs, vous assurez la cohérence et réduisez les temps d'arrêt. Ce guide a fourni une approche structurée avec des commandes concrètes et des listes de contrôle. Commencez par une vérification à faible risque : capturez l'inventaire de votre environnement actuel, exécutez les vérifications documentées et comparez les résultats. Intégrez ensuite progressivement les étapes dans votre pipeline. N'oubliez pas qu'un flux de travail technique fiable rend les échecs visibles, protège les valeurs sensibles, limite les modifications aux ressources prévues et définit la vérification de récupération avant qu'un incident ne force la décision.

Recherches connexes

Score de qualité de l’article

Utilité pour le lecteur 100%
  • check_circle Guide prêt à lire
  • check_circle Exemples pratiques inclus
  • check_circle URL d’article optimisée pour le SEO