Kubernetes est une plateforme open-source d'orchestration de conteneurs qui automatisent le déploiement, la mise à l'échelle et la gestion des applications contaneurisées.
Concepts essentiels
- Pod : unité de déploiement minimale, capable d'héberger plusieurs conteneurs.
- Déploiement : supervise le nombre de répliques de Pods et les mises à jour.
- Service : établit une stratégie d'accès pour un groupe de Pods, avec une adresse stable.
- ConfigMap & Secret : stockage pour les configurations et les données sensibles.
- Espace de noms : subdivision logique pour isoler les ressources.
Préparation de l'environnement
# Télécharger kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# Installer Minikube pour un cluster local
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
# Lancer le cluster
minikube start
Déployer une application initiale
Créer un déploiement
# fichier app-deploiement.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app-deploiement
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: serveur-app
image: httpd:2.4
ports:
- containerPort: 80
Définir un service
# fichier web-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
type: NodePort
Appliquer les configurations
kubectl apply -f app-deploiement.yaml
kubectl apply -f web-service.yaml
# Observer les états
kubectl get pods
kubectl get services
kubectl get deployments
Commandes courantes
# Afficher les ressources
kubectl get pods -n default
kubectl get deployments
kubectl get services
# Examiner les détails
kubectl describe pod <nom-pod>
kubectl logs <nom-pod>
# Se connecter au conteneur
kubectl exec -it <nom-pod> -- /bin/bash
# Modifier le nombre de répliques
kubectl scale deployment web-app-deploiement --replicas=3
# Retirer des ressources
kubectl delete -f app-deploiement.yaml
kubectl delete pod <nom-pod>
Gestion des configurations
# Créer une ConfigMap
kubectl create configmap config-app --from-literal=cle1=valeur1
# Générer un Secret
kubectl create secret generic secret-bdd --from-literal=motdepasse=secret456
# Intégrer dans un Pod
env:
- name: MOT_DE_PASSE_BDD
valueFrom:
secretKeyRef:
name: secret-bdd
key: motdepasse
Défis fréquents
Q : Pourquoi un Pod reste-t-il en état Pending ?
R : Vérifiez la disponibliité des ressources sur les nœuds ou les paramètres de taints et tolérations.
Q : Comment résoudre une erreur ImagePullBackOff ?
R : L'image spécifiée est introuvable ou les droits d'accès sont insuffisants. Contrôlez le nom de l'image et les configurations imagePullSecrets.