Déployer, adapter l'échelle et surveiller une application à état

Introduction à Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Rappel : applications sans état

  • Bref rappel : les applications sans état correspondent aux « Deployments » dans Kubernetes
  • Utilisé quand chaque Pod de l'application exécute exactement les mêmes tâches
  • Les applications à état nécessitent des Pods liés au même ensemble, mais pouvant traiter des tâches et des données différentes
  • Une grande partie de ce que nous avons vu pour les Deployments s'applique aussi aux StatefulSets
Introduction à Kubernetes

Applications à état

  • Applications à état :

    • concept général
    • très adaptées à Kubernetes
    • conservent un certain état
  • En cas d'interruption ou d'arrêt, une nouvelle réplique (Pod) peut lire l'état sauvegardé et reprendre à partir de celui-ci

  • Exemple :
    • Une base de données (p. ex. PostgreSQL) fournit des données à un frontal via 3 Pods.
    • Chaque mise à jour de données via l'un des Pods doit être persistée
    • Lorsqu'un Pod se termine, un nouveau est créé et doit reprendre l'état sauvegardé
Introduction à Kubernetes

Kubernetes StatefulSets

  • Les applications à état se traduisent par des « Kubernetes StatefulSets »
  • Un manifeste type comporte les mêmes sections :
    • apiVersion, kind, metadata, spec, template
  • replicas définit le nombre de Pods dans le StatefulSet
  • Plus sur selector plus tard
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Introduction à Kubernetes

Déployer dans un cluster Kubernetes

  • Un StatefulSet se déploie comme un Deployment : kubectl apply -f <manifest.yml>
  • Une fois déployé, un StatefulSet se crée différemment d'un Deployment :
    • Les Pods sont créés l'un après l'autre, pas tous en même temps comme dans un Deployment
    • Les Pods reçoivent des noms prévisibles comme pod-0, pod-1, pod-2, etc.
  • Donc, contrairement aux Pods d'un Deployment, ceux d'un StatefulSet ont une identité et un état
  • Ainsi, différents Pods d'un StatefulSet, avec des identités distinctes, peuvent jouer divers rôles dans l'application
Introduction à Kubernetes

Adapter l'échelle d'un StatefulSet

  • Comme les Deployments, les StatefulSets peuvent être montés ou réduits à l'échelle :
    • soit modifier replicas dans le manifeste et réappliquer
    • soit utiliser la commande kubectl scale statefulsets ...
  • En montée d'échelle, les nouveaux Pods sont créés séquentiellement :
    • p. ex., après pod-0, pod-1, pod-2, on ajoute pod-3, puis pod-4
  • En réduction d'échelle, les derniers créés sont supprimés d'abord :
    • p. ex., d'abord pod-4, puis pod-3
Introduction à Kubernetes

Surveiller un StatefulSet

  • Comme pour les Deployments, la surveillance permet de réagir aux pannes, aux pics de charge ou au stockage manquant
  • Ici, nous utilisons kubectl pour des tâches de surveillance de base
  • Commandes typiques : comme pour les Deployments
  • Exemple 1 : kubectl get pods retourne tous les pods d'un StatefulSet avec leur état courant
  • Exemple 2 : kubectl get services retourne tous les services qu'un StatefulSet peut utiliser
Introduction à Kubernetes

Passons à la pratique !

Introduction à Kubernetes

Preparing Video For Download...