## Introduction Le ReplicationController (RC) de Kubernetes garantit qu'un nombre spécifié de réplicas de pods sont en cours d'exécution à tout moment. Bien que les ReplicaSets et les Deployments l'aient largement remplacé, le ReplicationController reste un concept fondamental pour comprendre la réplication et l'auto-réparation des pods. Ce guide fournit des commandes pratiques, des exemples de configuration, des techniques de dépannage et des procédures de récupération pour les développeurs, les ingénieurs DevOps et les équipes de startup qui doivent exploiter des ReplicationControllers dans de vrais clusters. L'objectif est la sécurité opérationnelle : observer avant de modifier, limiter le rayon d'impact, utiliser des espaces réservés au lieu de secrets, vérifier les résultats et documenter les étapes de récupération si l'état attendu n'est pas atteint. Chaque section comprend des commandes concrètes, les sorties attendues, les signaux d'échec et les décisions de récupération. ## Inventaire de la version et de l'environnement Avant de travailler avec des ReplicationControllers, vérifiez la version de votre cluster et les ressources d'API disponibles. Les ReplicationControllers font partie du groupe d'API core/v1 et restent pris en charge dans toutes les versions actuelles de Kubernetes, bien qu'ils soient considérés comme hérités. ### Vérifier les versions du client et du serveur kubectl version --short La sortie attendue inclut les versions client et serveur : Client Version: v1.26.0 Server Version: v1.26.0 Si la version du serveur est plus ancienne que celle du client, les commandes peuvent échouer ; utilisez une version de kubectl correspondante. ### Vérifier la disponibilité de l'API ReplicationController kubectl api-resources | grep replicationcontrollers Sortie attendue : replicationcontrollers rc v1 true ReplicationController Si la ressource n'est pas listée, le cluster peut avoir un accès API restreint. Vérifiez les autorisations RBAC avec : kubectl auth can-i list replicationcontrollers Sortie attendue : yes . ### Confirmer les prérequis - Un cluster Kubernetes en cours d'exécution (minikube, kind, GKE, EKS, etc.). - kubectl installé et configuré avec l'accès au cluster. - Compréhension de base des pods et des étiquettes. Observation en lecture seule : commencez toujours par des commandes kubectl get pour comprendre l'état actuel avant d'apporter des modifications. ### Vérifications Kubernetes pratiques Exécutez ces commandes pour recueillir l'état initial : kubectl get pods -o wide kubectl get replicationcontrollers kubectl get nodes Enregistrez les sorties avec des horodatages pour une comparaison ultérieure : kubectl get replicationcontrollers -o yaml > rc-before.yaml date >> rc-before.yaml Test minimal : avant d'appliquer tout changement, assurez-vous de pouvoir créer un simple ReplicationController dans un espace de noms de test. Utilisez kubectl port-forward ou un type de service local pour vérifier le trafic avant de passer à un équilibreur de charge ou à une entrée.
Question rapide 1 sur 2 Que se passe-t-il lorsqu'il y a trop de pods sous un ReplicationController ? - Il démarre plus de pods. - Il termine les pods supplémentaires. - Il les laisse s'exécuter. - Il met à l'échelle les nœuds.
S'il y a trop de pods, le ReplicationController termine les pods supplémentaires.
## Chemin de configuration sécurisé Exploiter des ReplicationControllers en toute sécurité signifie apporter des modifications incrémentales et réversibles. Suivez ce chemin : ### Étape 1 : Inspecter l'état actuel Utilisez des commandes en lecture seule pour voir les ReplicationControllers existants : kubectl get replicationcontrollers --all-namespaces Exemple de sortie : NAMESPACE NAME DESIRED CURRENT READY AGE default nginx 3 3 3 5m ### Étape 2 : Comprendre le manifeste du ReplicationController Un YAML de base pour ReplicationController : apiVersion: v1 kind: ReplicationController metadata: name: nginx-rc spec: replicas: 3 selector: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 Champs clés : - spec.replicas : nombre souhaité de pods. - spec.selector : doit correspondre aux étiquettes du modèle de pod. S'il est omis, il prend par défaut les étiquettes du modèle. - spec.template : modèle de pod utilisé pour créer de nouveaux pods. ### Étape 3 : Appliquer le manifeste avec vérification Créez le ReplicationController : kubectl apply -f nginx-rc.yaml Sortie attendue : replicationcontroller/nginx-rc created Vérifiez que les pods sont créés : kubectl get pods -l app=nginx Sortie attendue : NAME READY STATUS RESTARTS AGE nginx-rc-abcde 1/1 Running 0 10s nginx-rc-fghij 1/1 Running 0 10s nginx-rc-klmno 1/1 Running 0 10s ### Étape 4 : Apporter de petites modifications Pour mettre à l'échelle le ReplicationController, utilisez la commande kubectl scale : kubectl scale replicationcontroller nginx-rc --replicas=5 Sortie attendue : replicationcontroller/nginx-rc scaled Vérifiez les nouveaux pods : kubectl get rc nginx-rc Sortie : NAME DESIRED CURRENT READY AGE nginx-rc 5 5 5 10m ### Étape 5 : Vérifier le trafic localement Utilisez le transfert de port pour tester un pod : kubectl port-forward rc/nginx-rc 8080:80 Accédez ensuite à http://localhost:8080 dans un navigateur ou avec curl . Attendez-vous à la page d'accueil nginx. Contrôle du rayon d'impact : n'appliquez jamais de modifications directement en production sans les tester dans un espace de noms de bac à sable. Utilisez --dry-run=client pour valider les manifestes : kubectl apply -f nginx-rc.yaml --dry-run=client ## Vérification et diagnostics Après avoir appliqué des modifications, vérifiez l'état de santé du ReplicationController et diagnostiquez les problèmes. ### Commandes de vérification de base kubectl get rc nginx-rc kubectl describe rc nginx-rc La sortie de describe inclut les événements, le sélecteur et les statuts des pods. Recherchez les événements SuccessfulCreate et tout échec. Vérifiez le statut des pods en détail : kubectl get pods -l app=nginx -o wide Si un pod n'est pas en cours d'exécution, inspectez-le : kubectl describe pod Exemple de section d'échec : Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 2m default-scheduler 0/3 nodes are available: 3 Insufficient cpu. Cela indique des ressources insuffisantes. Récupération : réduisez l'échelle ou ajoutez des nœuds. ### Vérifier les journaux Pour un pod en cours d'exécution : kubectl logs Pour un pod qui a planté, vérifiez les journaux précédents : kubectl logs --previous Exemple de journal de boucle de crash : Error: unable to start application: config file not found Récupération : corrigez le chemin du fichier de configuration dans le modèle de pod. ### Vérifier le statut du ReplicationController via YAML kubectl get rc nginx-rc -o yaml Regardez status.replicas , status.readyReplicas et status.observedGeneration . Si les réplicas prêts sont inférieurs au nombre souhaité, le RC est en mauvaise santé. ### Diagnostics avancés - Vérifiez les événements dans l'espace de noms : kubectl get events --sort-by=.metadata.creationTimestamp - Surveillez les changements de pods en direct : kubectl get pods -l app=nginx --watch Question rapide 2 sur 2 Quel est le remplacement recommandé pour ReplicationController ? - ReplicaSet - Deployment - DaemonSet - StatefulSet
La méthode recommandée pour créer une application répliquée est d'utiliser un Deployment, qui à son tour utilise un ReplicaSet.
## Modes de défaillance et récupération Les ReplicationControllers peuvent échouer de différentes manières. Voici les modes de défaillance courants et comment les récupérer. ### Mode de défaillance 1 : Les pods ne sont pas créés Symptôme : kubectl get rc affiche desired=3 mais current=0. Diagnostic : kubectl describe rc nginx-rc Recherchez des événements comme : Warning FailedCreate ReplicationController Error creating: pods is forbidden: User cannot create resource pods in namespace default Cause : restrictions RBAC. Récupération : corrigez les autorisations RBAC ou utilisez un espace de noms avec un accès approprié. Vérifiez avec : kubectl auth can-i create pods Attendu : yes . ### Mode de défaillance 2 : Pods en CrashLoopBackOff Symptôme : les pods sont dans l'état CrashLoopBackOff . Diagnostic : kubectl get pods -l app=nginx kubectl logs --previous Exemple de journal : nginx: [emerg] unexpected end of file, expecting ";" in /etc/nginx/conf.d/default.conf:10 Cause : fichier de configuration mal configuré. Récupération : corrigez la configuration dans le modèle de pod, mettez à jour le manifeste du RC et appliquez. Supprimez les pods existants pour forcer la recréation : kubectl delete pod -l app=nginx Le RC les remplacera automatiquement. ### Mode de défaillance 3 : Le RC ne peut pas être mis à l'échelle Symptôme : kubectl scale échoue ou aucun pod n'est ajouté. Diagnostic : kubectl describe rc nginx-rc Recherchez des erreurs de quota de ressources : Warning FailedCreate ReplicationController Error creating: pods is forbidden: exceeded quota Cause : quota de ressources de l'espace de noms dépassé. Récupération : augmentez le quota ou réduisez les réplicas. Vérifiez le quota : kubectl get resourcequota ### Mode de défaillance 4 : Inadéquation du sélecteur Symptôme : le RC signale des réplicas souhaités mais aucun pod n'est sélectionné ; ou des pods supplémentaires sont sélectionnés. Diagnostic : comparez spec.selector dans le RC avec les étiquettes des pods : kubectl get rc nginx-rc -o jsonpath='{.spec.selector}' kubectl get pods -l app=nginx --show-labels Si les étiquettes ne correspondent pas, le RC ne gérera pas ces pods. Récupération : corrigez le sélecteur dans le manifeste et appliquez à nouveau. Notez que modifier le sélecteur est perturbateur ; envisagez de supprimer et de recréer le RC. ### Flux de travail général de récupération - Prenez un instantané avant les modifications : kubectl get rc nginx-rc -o yaml > rc-backup.yaml - Appliquez le correctif. - Vérifiez : kubectl get pods -l app=nginx - Si la récupération échoue, restaurez à partir de la sauvegarde : kubectl apply -f rc-backup.yaml ## Liste de contrôle des opérations Utilisez cette liste de contrôle pour les opérations quotidiennes sur les ReplicationControllers. ### Liste de contrôle avant modification - [ ] Confirmez la version du cluster et l'accès à l'API. - [ ] Inspectez le RC et les pods actuels : kubectl get rc,pods -l app=