Files
document/Guide-utilisateur-kubectl-rber

453 lines
9.2 KiB
Plaintext

# 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 <pod>` |
| Logs en temps réel | `kubectl logs -f <pod>` |
| Entrer dans un pod | `kubectl exec -it <pod> -- bash` |
| Détails d'un pod | `kubectl describe pod <pod>` |
| Redémarrer | `kubectl rollout restart deployment/<nom>` |
| Port-forward | `kubectl port-forward svc/<svc> 8080:80` |
| Changer namespace | `kubectl config use-context <contexte>` |
### É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*