# Guide Utilisateur kubectl - Cluster RBER ## Introduction Ce guide explique comment configurer et utiliser `kubectl` pour accéder aux applications hébergées sur le cluster Kubernetes RBER. Avec cet accès, tu peux : - Voir l'état des applications (pods, services) - Consulter les logs - Redémarrer des applications (selon ton rôle) - Accéder aux bases de données via port-forward --- ## 1. Prérequis ### 1.1 Fichiers reçus Tu as reçu un fichier d'accès : - `ton-nom.kubeconfig.gpg` (chiffré) — nécessite le mot de passe fourni séparément - ou `ton-nom.kubeconfig` (non chiffré) ### 1.2 Logiciels nécessaires | Logiciel | Obligatoire | Description | |----------|-------------|-------------| | kubectl | Oui | Client Kubernetes | | gpg | Si fichier .gpg | Pour déchiffrer le fichier | --- ## 2. Installation de kubectl ### Ubuntu / Debian ```bash # Télécharger curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" # Rendre exécutable chmod +x kubectl # Déplacer dans le PATH sudo mv kubectl /usr/local/bin/ # Vérifier kubectl version --client ``` ### macOS ```bash # Avec Homebrew brew install kubectl # Vérifier kubectl version --client ``` ### Windows ```powershell # Avec Chocolatey (PowerShell administrateur) choco install kubernetes-cli # Vérifier kubectl version --client ``` --- ## 3. Configuration de l'accès ### 3.1 Déchiffrer le fichier (si .gpg) ```bash # Installer GPG si nécessaire # Ubuntu: sudo apt install gnupg # macOS: brew install gnupg # Déchiffrer (saisir le mot de passe fourni) gpg --decrypt ton-nom.kubeconfig.gpg > ton-nom.kubeconfig ``` ### 3.2 Installer le fichier kubeconfig ```bash # Créer le dossier .kube mkdir -p ~/.kube # Copier le fichier cp ton-nom.kubeconfig ~/.kube/config-rber # Sécuriser les permissions chmod 600 ~/.kube/config-rber ``` ### 3.3 Configurer la variable d'environnement ```bash # Définir la variable export KUBECONFIG=~/.kube/config-rber # Rendre permanent (ajouter au .bashrc ou .zshrc) echo 'export KUBECONFIG=~/.kube/config-rber' >> ~/.bashrc source ~/.bashrc ``` ### 3.4 Vérifier la connexion ```bash # Tester kubectl get pods # Voir tes droits kubectl auth can-i --list # Contexte actuel kubectl config current-context ``` --- ## 4. Commandes de base ### 4.1 Voir les ressources ```bash # Lister les pods (applications) kubectl get pods # Lister les services kubectl get svc # Lister les deployments kubectl get deployments # Lister les ingress (URLs) kubectl get ingress # Voir toutes les ressources kubectl get all ``` ### 4.2 Détails d'une ressource ```bash # Détails d'un pod kubectl describe pod nom-du-pod # Détails d'un service kubectl describe svc nom-du-service # Détails d'un deployment kubectl describe deployment nom-du-deployment ``` ### 4.3 Logs ```bash # Logs d'un pod kubectl logs nom-du-pod # Logs en temps réel (suivre) kubectl logs -f nom-du-pod # Dernières 100 lignes kubectl logs nom-du-pod --tail=100 # Logs du pod précédent (après crash) kubectl logs nom-du-pod --previous # Logs de tous les pods d'une application kubectl logs -l app=moodle --all-containers ``` ### 4.4 Accéder à un pod ```bash # Ouvrir un shell dans le pod kubectl exec -it nom-du-pod -- bash # Si bash n'existe pas, essayer sh kubectl exec -it nom-du-pod -- sh # Exécuter une commande unique kubectl exec nom-du-pod -- ls /var/www ``` ### 4.5 Port-forward (accès local) ```bash # Accéder à un service localement kubectl port-forward svc/moodle 8080:80 # Puis ouvrir http://localhost:8080 dans ton navigateur # Accéder à PostgreSQL kubectl port-forward svc/uac-pg-cluster-rw 5432:5432 # Puis se connecter avec psql ou pgAdmin sur localhost:5432 ``` --- ## 5. Travailler avec plusieurs namespaces Si tu as accès à plusieurs namespaces, tu peux naviguer entre eux. ### 5.1 Voir les contextes disponibles ```bash kubectl config get-contexts # Exemple de sortie : # CURRENT NAME CLUSTER NAMESPACE # * jean.dupont-moodle-uac@rber-fidj rber-fidj moodle-uac # jean.dupont-moodle-una@rber-fidj rber-fidj moodle-una ``` ### 5.2 Changer de contexte ```bash # Basculer vers moodle-una kubectl config use-context jean.dupont-moodle-una@rber-fidj # Vérifier kubectl config current-context ``` ### 5.3 Spécifier le namespace directement ```bash # Sans changer de contexte, utiliser -n kubectl get pods -n moodle-uac kubectl get pods -n moodle-una kubectl logs -n moodle-una nom-du-pod ``` --- ## 6. Cas d'usage courants ### 6.1 Vérifier si une application fonctionne ```bash # Voir l'état des pods kubectl get pods # États possibles : # - Running : OK, l'application tourne # - Pending : En attente de ressources # - Error : Erreur # - CrashLoop : L'application redémarre en boucle # Si problème, voir les détails kubectl describe pod nom-du-pod # Voir les logs kubectl logs nom-du-pod ``` ### 6.2 Redémarrer une application ```bash # Redémarrer tous les pods d'un deployment kubectl rollout restart deployment/moodle # Suivre le redémarrage kubectl rollout status deployment/moodle # Vérifier que les nouveaux pods sont Running kubectl get pods ``` ### 6.3 Voir pourquoi un pod ne démarre pas ```bash # Étape 1 : Voir l'état kubectl get pods # Étape 2 : Voir les events kubectl describe pod nom-du-pod # Regarder la section "Events" en bas # Étape 3 : Si le pod a déjà démarré puis crashé kubectl logs nom-du-pod --previous ``` ### 6.4 Se connecter à la base de données ```bash # Ouvrir un tunnel vers PostgreSQL kubectl port-forward svc/uac-pg-cluster-rw 5432:5432 # Dans un autre terminal, se connecter psql -h localhost -U moodleuser -d moodle # Ou utiliser un outil graphique (pgAdmin, DBeaver) sur localhost:5432 ``` ### 6.5 Copier un fichier depuis/vers un pod ```bash # Copier un fichier depuis le pod vers local kubectl cp nom-du-pod:/chemin/fichier.log ./fichier.log # Copier un fichier local vers le pod kubectl cp ./mon-fichier.txt nom-du-pod:/tmp/mon-fichier.txt ``` --- ## 7. Alias recommandés Ajoute ces raccourcis à ton `~/.bashrc` ou `~/.zshrc` : ```bash # Raccourcis kubectl alias k='kubectl' alias kgp='kubectl get pods' alias kgs='kubectl get svc' alias kgd='kubectl get deployments' alias kgi='kubectl get ingress' alias kga='kubectl get all' alias kl='kubectl logs' alias klf='kubectl logs -f' alias ke='kubectl exec -it' alias kd='kubectl describe' alias kpf='kubectl port-forward' # Autocomplétion (très utile !) source <(kubectl completion bash) # Pour bash # source <(kubectl completion zsh) # Pour zsh ``` Après modification : ```bash source ~/.bashrc ``` Utilisation : ```bash kgp # = kubectl get pods klf mon-pod # = kubectl logs -f mon-pod ke mon-pod bash # = kubectl exec -it mon-pod bash ``` --- ## 8. Résolution de problèmes ### Connexion refusée ``` Unable to connect to the server: dial tcp: lookup api.rber.bj: no such host ``` **Solutions :** 1. Vérifier ta connexion internet 2. Vérifier que le DNS résout : `nslookup api.rber.bj` 3. Tester la connectivité : `curl -k https://api.rber.bj:6443/healthz` ### Erreur de certificat ``` certificate signed by unknown authority ``` **Solutions :** 1. Le fichier kubeconfig est peut-être corrompu 2. Redemander un nouveau fichier à l'administrateur ### Permission denied ``` Error from server (Forbidden): pods is forbidden ``` **Solutions :** 1. Vérifier ton namespace : `kubectl config current-context` 2. Vérifier tes droits : `kubectl auth can-i --list` 3. Tu n'as peut-être pas accès à cette ressource - contacter l'administrateur ### Namespace incorrect ``` No resources found in default namespace ``` **Solutions :** 1. Tu es probablement dans le mauvais namespace 2. Vérifier : `kubectl config current-context` 3. Lister tes contextes : `kubectl config get-contexts` 4. Changer de contexte ou utiliser `-n namespace` ### Token expiré ``` error: You must be logged in to the server (Unauthorized) ``` **Solutions :** 1. Ton token a peut-être expiré 2. Contacter l'administrateur pour obtenir un nouveau fichier kubeconfig --- ## 9. Référence rapide ### Commandes essentielles | Action | Commande | |--------|----------| | Lister les pods | `kubectl get pods` | | Logs d'un pod | `kubectl logs ` | | Logs en temps réel | `kubectl logs -f ` | | Entrer dans un pod | `kubectl exec -it -- bash` | | Détails d'un pod | `kubectl describe pod ` | | Redémarrer | `kubectl rollout restart deployment/` | | Port-forward | `kubectl port-forward svc/ 8080:80` | | Changer namespace | `kubectl config use-context ` | ### États des pods | État | Signification | |------|---------------| | Running | OK, fonctionne | | Pending | En attente (ressources, stockage) | | ContainerCreating | Téléchargement de l'image | | Error | Erreur au démarrage | | CrashLoopBackOff | Crash répété | | Terminating | En cours d'arrêt | --- ## 10. Contact et support En cas de problème : - **Email** : devops@rber.bj - **Documentation** : https://docs.rber.bj Informations à fournir : 1. Ton nom d'utilisateur 2. Le namespace concerné 3. La commande exécutée 4. Le message d'erreur complet --- *Guide utilisateur kubectl RBER - Version 1.0 - Janvier 2026*