Aller au contenu principal

Chapitre 12.1 - Déploiement en Production

Objectifs d'Apprentissage

À la fin de ce chapitre, vous serez capable de:

  • Comprendre les exigences de production
  • Implémenter la haute disponibilité
  • Configurer la sécurité en production
  • Gérer les ressources efficacement
  • Mettre en place le monitoring et les alertes
  • Appliquer les meilleures pratiques

Introduction

Déployer en production nécessite une préparation rigoureuse pour assurer la disponibilité, la sécurité et la performance.


Haute Disponibilité

Multi-Node Clusters

Recommandations:

  • Minimum 3 nodes pour le Control Plane
  • Minimum 3 worker nodes
  • Distribution sur plusieurs zones de disponibilité

Pod Disruption Budgets

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app

Résultat: Garantit qu'au moins 2 Pods sont disponibles pendant les mises à jour.


Sécurité

RBAC Configuré

# Limiter les permissions
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]

Network Policies

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress

Secrets Chiffrés

# Activer le chiffrement au repos
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>

Images Scannées

Utiliser des outils de scanning d'images (Trivy, Clair) avant déploiement.


Gestion des Ressources

Requests et Limits

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: app
image: my-app:1.0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi

Resource Quotas

apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"

Limit Ranges

apiVersion: v1
kind: LimitRange
metadata:
name: namespace-limits
namespace: production
spec:
limits:
- default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
type: Container

Monitoring et Alertes

Métriques Essentielles

  • Utilisation CPU/Mémoire
  • Latence des requêtes
  • Taux d'erreurs
  • Disponibilité des services

Alertes Critiques

  • Pods en CrashLoop
  • Utilisation CPU > 90%
  • Utilisation Mémoire > 90%
  • Services indisponibles

Backup et Disaster Recovery

Backup d'etcd

# Backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key

# Restore
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

Backup des Volumes

Utiliser des snapshots de volumes (EBS, Azure Disk, etc.).


Bonnes Pratiques

1. Multi-Environnements

Séparer dev, staging, production avec des namespaces ou clusters.

2. Versioning

Utiliser des tags d'images spécifiques, pas latest.

3. Health Checks

Configurer liveness, readiness, et startup probes.

4. Rolling Updates

Utiliser des stratégies de déploiement sans interruption.

5. Documentation

Documenter les procédures de déploiement et de rollback.


Résumé

Dans ce chapitre, vous avez appris:

Haute disponibilité: Multi-nodes, Pod Disruption Budgets
Sécurité: RBAC, Network Policies, secrets chiffrés, images scannées
Ressources: Requests, limits, quotas, limit ranges
Monitoring: Métriques essentielles, alertes critiques
Backup: etcd, volumes, disaster recovery
Bonnes pratiques: Multi-environnements, versioning, health checks


Prochaines Étapes

Chapitre 12.2: CI/CD
Chapitre 12.3: Environnements
Lab 12.1: Configuration de Resource Management


Chapitre créé le: Décembre 2024