Article

Déployer une appli sur Kubernetes : Deployments et Services

Passer d'un simple pod à un déploiement géré : Deployments, ReplicaSets, Services (ClusterIP, NodePort, LoadBalancer) et stratégie de mise à jour.

Déployer une appli sur Kubernetes : Deployments et Services

Déployer une appli sur Kubernetes : Deployments et Services

Créer un pod à la main, c'est bien pour tester. Pour une vraie appli, tu veux :

  • plusieurs réplicas,
  • des mises à jour contrôlées,
  • un point d'entrée stable pour les clients.

C'est exactement ce que t'apportent les Deployments et les Services.


Deployment : la façon moderne de gérer tes pods

Un Deployment gère :

  • le nombre de réplicas,
  • la stratégie de mise à jour,
  • l'historique des versions de ReplicaSets.

Exemple minimal :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mon-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mon-api
  template:
    metadata:
      labels:
        app: mon-api
    spec:
      containers:
        - name: api
          image: ghcr.io/likedevGit/mon-api:1.0.0
          ports:
            - containerPort: 3000

Commande :

kubectl apply -f deployment-api.yaml
kubectl get deployments
kubectl get pods -l app=mon-api

Services : exposer tes pods

Les pods peuvent mourir, être recréés, bouger de node. Tu ne veux pas que les clients parlent directement aux IPs des pods.

Tu définis un Service qui :

  • pointe vers les bons pods via un selector de labels,
  • leur assigne une IP/port stable dans le cluster.

ClusterIP (interne)

apiVersion: v1
kind: Service
metadata:
  name: mon-api
spec:
  type: ClusterIP
  selector:
    app: mon-api
  ports:
    - port: 80
      targetPort: 3000
  • Les autres pods du cluster peuvent appeler http://mon-api:80.
  • Rien n'est exposé vers l'extérieur.

NodePort (exposition simple)

spec:
  type: NodePort
  selector:
    app: mon-api
  ports:
    - port: 80
      targetPort: 3000
      nodePort: 30080
  • Ouvre le port 30080 sur chaque node.
  • Accessible sur http://<ip-node>:30080.

Pratique pour du debug ou un petit cluster perso, moins idéal en prod "propre".

LoadBalancer (cloud)

Sur les clouds managés (GKE, AKS, EKS…), un Service LoadBalancer demande au provider :

  • de provisionner un load balancer externe,
  • de le brancher sur ton Service.
spec:
  type: LoadBalancer
  selector:
    app: mon-api
  ports:
    - port: 80
      targetPort: 3000

Rolling update et rollback

Avec un Deployment, tu peux faire un rolling update :

kubectl set image deployment/mon-api api=ghcr.io/likedevGit/mon-api:1.1.0
kubectl rollout status deployment/mon-api

Si ça se passe mal :

kubectl rollout undo deployment/mon-api

La stratégie par défaut remplace progressivement les pods, sans downtime marqué (sauf bug applicatif).


Bonnes pratiques

  • Utilise des labels cohérents (app, tier, env) pour faciliter les selectors.
  • Sépare les Services internes (ClusterIP) des frontaux (LoadBalancer/Ingress).
  • Sur du cloud, préfère souvent un Ingress + Service ClusterIP plutôt que des dizaines de Services LoadBalancer.

Dans les prochains articles, on ajoutera la configuration (ConfigMaps, Secrets) et l'observabilité pour suivre tes pods en situation réelle.

Articles recommandés

Devis par e-mail

Recevoir votre devis

Indiquez votre e-mail : le PDF part tout de suite, sans engagement.

Récapitulatif

    Total HT
    TTC (TVA 20 %)

    Où envoyer votre devis ?

    Le PDF arrive à cette adresse en quelques secondes.

    Préciser votre besoin facultatif
    • Sans engagement
    • Réponse sous 24 h ouvrées
    • Devis PDF par e-mail

    Tarif HT selon les options choisies. Devis PDF envoyé par e-mail.