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