L’objectif de cette étape est de déployer l’application conteneurisée sur un cluster Kubernetes afin d’assurer une gestion efficace des conteneurs, incluant l’orchestration, la mise à l’échelle automatique et la résilience.
Kubernetes (K8s) est un système d’orchestration de conteneurs open-source permettant d’automatiser le déploiement, la mise à l’échelle et la gestion des applications conteneurisées. Il est composé de plusieurs ressources essentielles :
Avant de déployer l’application, nous devons avoir un cluster Kubernetes opérationnel. Cela peut être :
kubectl version --client kubectl get nodes
Un manifest Kubernetes est un fichier YAML définissant les ressources à créer.
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myrepo/myapp:latest ports: - containerPort: 3000 env: - name: NODE_ENV value: "production"
Un service expose l’application en interne (ClusterIP) ou externe (LoadBalancer, NodePort).
apiVersion: v1 kind: Service metadata: name: myapp-service spec: selector: app: myapp ports: - protocol: TCP port: 80 targetPort: 3000 type: LoadBalancer
L’Ingress permet de gérer les requêtes HTTP via un nom de domaine.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: myapp-service port: number: 80
Les fichiers YAML doivent être appliqués au cluster :
kubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl apply -f ingress.yaml
kubectl get pods
kubectl get services
kubectl get ingress
Kubernetes permet de mettre à l’échelle automatiquement en fonction de la charge CPU.
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: myapp-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70
kubectl apply -f hpa.yaml
kubectl get hpa
Les ConfigMaps et Secrets permettent de stocker des variables d’environnement et des données sensibles.
apiVersion: v1 kind: ConfigMap metadata: name: myapp-config labels: app: myapp data: DATABASE_URL: "postgres://user:password@db:5432/mydatabase"
apiVersion: v1 kind: Secret metadata: name: myapp-secret data: SECRET_KEY: c2VjcmV0X2tleQ== # Base64 encoded
Kubernetes fournit des outils natifs et intégrés pour la surveillance :
kubectl logs -f myapp-pod
kubectl describe pod myapp-pod
Le déploiement sur Kubernetes permet une orchestration avancée, une scalabilité dynamique et une gestion centralisée des conteneurs. Grâce aux différentes ressources Kubernetes, l’application est résiliente et facilement maintenable.