Formation-K8S

Formation K8S avec exercices et labs

View project on GitHub

StatefulSet

Role

Les StatefulSets sont utiles pour des applications qui nécessitent une ou plusieurs des choses suivantes :

  • Des identifiants réseau stables et uniques.
  • Un stockage persistant stable.
  • Un déploiement et une mise à l’échelle ordonnés et contrôlés.
  • Des mises à jour continues (rolling update) ordonnées et automatisées.

schema

Ci-dessus, stable est synonyme de persistance suite au (re)scheduling de Pods. Si une application ne nécessite aucun identifiants stables ou de déploiement, suppression ou mise à l’échelle stables, vous devriez déployer votre application en utilisant un objet de charge de travail fournissant un ensemble de réplicas sans état (stateless). Un Deployment ou ReplicaSet peut être mieux adapté pour vos applications sans états. (dixit https://kubernetes.io/fr/docs/concepts/workloads/controllers/statefulset/)

Structure

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # doit correspondre à .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # est 1 par défaut
  template:
    metadata:
      labels:
        app: nginx # doit correspondre à .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "longhorn"
      resources:
        requests:
          storage: 1Gi

Nommage

Le nom des pods n’est pas choisi au hasard et on peut facilement relier les uns aux autres grâce à leur nom. Si StatefulSet porte le nom monstateful alors ses pod portent le nom monstateful-indice avec indice qui vaut : 0, 1, 2, 3 …

Attention

  • Les PVC d’un statefulSet ne sont pas supprimés automatiquement lors de la suppression d’un statefulset !
  • Les Pods sont créés séquentiellement xx-0 puis xx-1 puis xx-2 ….et détruit dans l’ordre inverse : xx-2, xx-1, xx-0
  • Les Pods ne sont pas garantis d’être supprimés lors de la suppression d’un statefulset
  • Contrairement à un déploiement chaque pod aura ses propres PVC et donc ses propres PV !

Retour, Menu, Suite