Quelques pro tips pour kubernetes

29 févr. 2024 · 3 min de lecture

Kubernetes & Minikube

1. Outils CLI

kubectl (alias recommandé)

alias k='kubectl'

Gestion des contextes

kubectl config use-context <context>

Outils utiles :

  • kubectx : changer de cluster rapidement
  • kubens : changer de namespace courant

2. Minikube (local)

Activer les metrics

minikube addons enable metrics-server

Dashboard

minikube dashboard

Ingress (Minikube)

minikube addons enable ingress

Vérification :

kubectl -n ingress-nginx get pods,svc

3. Exploration & Debug

Documentation interne

k explain pod.spec.containers

Commandes utiles

k get all
k describe <resource> <name>
k logs <pod>
k exec -it <pod> -- sh

4. Objets principaux

4.1 Pods

  • Plus petite unité Kubernetes
  • Contient un ou plusieurs containers
  • Éphémère
  • Rarement manipulé directement
k get pods
k get pods -l app=mailpit

4.2 Deployment

Rôle

  • Gérer les pods
  • Assurer la haute dispo
  • Rolling updates

Création

k create deployment mailpit --image=docker.io/axllent/mailpit:v1.14.0

Générer YAML

k create deployment mailpit \
  --image=docker.io/axllent/mailpit:v1.14.0 \
  --dry-run=client -o yaml > deployment.yaml

Scaling

k scale deployment mailpit --replicas=5

Rollback

k rollout undo deployment mailpit --to-revision=1

Historique

k rollout history deployment mailpit

4.3 Namespace

Lister

k get ns

Créer

k create ns mon-namespace

Utilisation

k -n mon-namespace get pods

Tous les namespaces

k get pods --all-namespaces

4.4 Service

Rôle

Expose les pods

Types principaux :

  • ClusterIP (interne)
  • NodePort
  • LoadBalancer

Génération

k expose deployment/mailpit \
  --port=8025 \
  --dry-run=client -o yaml > service.yaml

Lister

k get svc

Port-forward

k port-forward service/mailpit 8025:8025

4.5 Ingress

Rôle

  • Reverse proxy HTTP/HTTPS
  • Routage par domaine / path
  • TLS

Lister

k get ingress

4.6 ConfigMap

  • Stockage de configuration
  • Non chiffré

4.7 Secret

  • Données sensibles
  • Encodées en base64 (⚠️ pas du chiffrement)
apiVersion: v1
kind: Secret
metadata:
  name: mailpit-secret
stringData:
  MP_UI_AUTH: user:password

Appliquer

k apply -f secret.yaml

Lire

k get secret mailpit-secret -o yaml

4.8 StatefulSet

Usage

  • Bases de données
  • Applications avec état

Caractéristiques

  • Identité stable
  • Stockage persistant
  • Déploiement ordonné
  • Pas équivalent à Deployment

Appliquer

k apply -f statefulset.yaml

Restart

k rollout restart statefulset postgres

4.9 Volumes & PVC

Problème

Les pods perdent leurs données

Solution

  • PersistentVolume (PV)
  • PersistentVolumeClaim (PVC)

Exemple (structure)

kind: PersistentVolumeClaim

5. Healthchecks (Probes)

startupProbe

  • Vérifie le démarrage
  • Bloque les autres probes

livenessProbe

  • Vérifie que l’app tourne
  • Redémarre si nécessaire

readinessProbe

  • Vérifie si l’app peut recevoir du trafic
  • Retire du service si KO

6. Opérations courantes

Appliquer une config

k apply -f file.yaml

Supprimer

k delete -f file.yaml

Supprimer une ressource

k delete pod <pod>

7. Helm

Rôle

Gestionnaire de packages Kubernetes

Créer un chart

helm create mon-chart

Installer

helm install mon-app mon-chart

Upgrade

helm upgrade mon-app mon-chart

Diff (plugin helm-diff)

helm diff upgrade mon-app mon-chart -f values.yaml

Désinstaller

helm uninstall mon-app

8. Bonnes pratiques

  • Versionner tous les YAML
  • Ne jamais utiliser latest
  • Définir requests et limits
  • Utiliser des probes correctement
  • Séparer les environnements via namespaces
  • Externaliser la config (ConfigMap / Secret)
  • Utiliser Helm ou Kustomize pour industrialiser