Formation DevOps | Formation kubernetes : StatefulSet
StatefulSet dans Kubernetes
Les StatefulSets sont des objets Kubernetes essentiels pour gérer des applications stateful, c’est-à-dire des applications qui nécessitent de conserver un état entre les sessions. Contrairement aux applications stateless, où les instances peuvent être repoussées et remplacées sans impacts sur le service, les applications stateful doivent conserver des identités réseau et/ou des volumes de données persistants.
Importance des StatefulSets
Un StatefulSet attribue une identité unique et stable à chaque pod qu’il gère. Cette identité est cruciale pour certaines applications comme les bases de données ou les systèmes de fichiers distribués. Les StatefulSets garantissent également une mise à l’échelle et un déploiement ordonnés, ce qui est nécessaire pour certaines applications qui ne peuvent pas être démarrées ou arrêtées dans un ordre aléatoire.
Caractéristiques des StatefulSets
Les StatefulSets sont particulièrement utiles lorsque ces éléments sont requis:
- Identifiants de réseau stables et uniques : Chaque pod dans un StatefulSet reçoit un nom DNS unique basé sur le nom du StatefulSet.
- Stockage stable et persistant : Chaque pod peut avoir son propre volume persistant associé, assurant que les données ne sont pas perdues lors des redémarrages.
- Déploiement et mise à l’échelle ordonnés et gracieux : Les pods sont créés et supprimés dans un ordre spécifique (“0, 1, 2…” pour une scalabilité ascendante et “2, 1, 0…” pour une scalabilité descendante).
- Mises à jour progressives ordonnées : Les mises à jour des pods peuvent être exécutées de manière ordonnée, minimisant les risques d’interruption de service.
Limitations des StatefulSets
Cependant, il y a certaines limitations et considérations à garder à l’esprit :
- Le stockage d’un pod donné doit être provisionné soit par un fournisseur de volume persistant, soit pré-provisionné par un administrateur.
- La suppression d’un StatefulSet ne supprimera pas automatiquement les volumes associés. Cela permet de garantir la sécurité des données.
- Les StatefulSets nécessitent la création d’un service sans tête pour gérer l’identité des pods, ce qui doit être pris en charge par l’utilisateur.
- Les StatefulSets ne garantissent pas une résiliation ordonnée des pods lors de la suppression d’un StatefulSet. Pour une terminaison ordonnée, le StatefulSet peut être réduit à zéro avant d’être supprimé.
Composants d’un StatefulSet
Pour illustrer la création d’un StatefulSet, considérons les composants essentiels en utilisant des fichiers YAML.
Création d’un PersistentVolume
Pour commencer, créons un PersistentVolume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/data"
Ce qui précède crée un volume qui peut être utilisé par nos pods pour stocker des données de manière persistante.
Création d’un PersistentVolumeClaim
Ensuite, créons une réclamation pour ce volume :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: www
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Création du StatefulSet
Maintenant, nous allons créer le StatefulSet lui-même :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # doit correspondre à .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # par défaut 1
minReadySeconds: 10 # par défaut 0
template:
metadata:
labels:
app: nginx # doit correspondre à .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumes:
- name: www
persistentVolumeClaim:
claimName: www
Création d’un Service sans Tête
Enfin, créons le service sans tête nécessaire pour identifier nos pods :
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx

Le champ clusterIP: None permet d’indiquer qu’il s’agit d’un service sans tête. Ce service gérera l’identité réseau des pods de notre StatefulSet, facilitant ainsi les communications entre eux.
Test de Fonctionnement du StatefulSet
Pour tester le bon fonctionnement de notre StatefulSet, nous allons créer un fichier index.html dans le répertoire /tmp/data de l’un des nœuds du cluster. Ce fichier contiendra un message d’accueil :
Connectez-vous à un des nœuds de votre cluster.
Créez le fichier index.html dans le répertoire /tmp/data :
echo "<h1>Bonjour depuis StatefulSet</h1>" > /tmp/data/index.html
Ensuite, vous pouvez interroger le service pour voir le contenu :
curl nginx.default.svc.cluster.local
Conclusion
Les StatefulSets dans Kubernetes jouent un rôle crucial dans le déploiement d’applications qui nécessitent une persistance et un état. Grâce à leurs caractéristiques, comme les identifiants uniques pour chaque pod et la gestion des volumes persistants, les StatefulSets permettent de gérer efficacement des applications critiques telles que les bases de données, où chaque instance doit conserver un état. En comprenant comment configurer et utiliser les StatefulSets, vous pouvez développer des applications plus résilientes et prêtes pour la production dans des environnements Kubernetes.
1. Nous contactez
- Description: Besoin de Formation et des Solutions cloud complètes pour vos applications
- Links:
2. Infra as a Service
- Description: Infrastructure cloud évolutive et sécurisée
- Links:
3. Projets Développeurs
- Description: Découvrez des opportunités passionnantes pour les développeurs
- Links:
4. Développeurs
- Description: Rejoignez notre communauté de développeurs
- Links:
5. Formations Complètes
- Description: Accédez à des formations professionnelles de haute qualité
- Links:
6. Marketplace
- Description: Découvrez notre place de marché de services
- Links:
7. Blogs
- Description: Découvrez nos blogs
- Links:
- comment creer une application mobile ?
- Comment monitorer un site web ?
- Command Checkout in git ?
- Comment git checkout to commit ?
- supprimer une branche git
- dockercoin
- kubernetes c est quoi
- architecture kubernetes
- Installer Gitlab Runner ?
- .gitlab-ci.yml exemples
- CI/CD
- svelte 5 vs solid
- svelte vs lit
- solidjs vs qwik
- alpine vs vue
- Plateform Freelance 2025
- Creation d’un site Web gratuitement
This website is powered by ItGalaxy.io