Les StatefulSets contiennent un ensemble de pods avec des identités uniques et persistantes et des noms d'hôte stables. Un modèle de pod est utilisé dans un Statefulset, qui contient une spécification pour ses pods, les pods sont créés à l'aide de cette spécification. Nous pouvons déployer des applications avec état et des applications en cluster à l'aide de Statefulsets dans Kubernetes. StatefulSet peut être mis à jour en apportant des modifications à sa spécification de pod, qui inclut ses images de conteneur et ses volumes.
StatefulSets peut être utilisé lorsque les applications nécessitent l'une des propriétés suivantes.
- Identifiants de réseau stables et uniques.
- Stockage stable et persistant.
- Déploiement et mise à l'échelle ordonnés et gracieux.
- Mises à jour progressives, ordonnées et automatisées
Pour un StatefulSet avec N répliques, lorsque les pods sont déployés, ils sont créés séquentiellement, dans l'ordre de {0..N-1}. Lorsque les pods sont supprimés, ils sont résiliés dans l'ordre inverse, à partir de {N-1..0}.
Pour en savoir plus sur Statefulset, cliquez ici.
Dans cet article, nous allons créer un Statefulset avec des répliques de pods Nginx. Nous effectuerons des opérations sur les pods pour voir comment ils sont supprimés et créés.
Prérequis
- Cluster Kubernetes avec au moins 1 nœud de travail.
Si vous souhaitez apprendre à créer un cluster Kubernetes, cliquez ici. Ce guide vous aidera à créer un cluster Kubernetes avec 1 maître et 2 nœuds sur les instances AWS Ubuntu 18l04 EC2.
Ce que nous allons faire
- Créer un ensemble avec état
Créer un ensemble d'états
Créez un fichier et ajoutez-y la définition Statefulset suivante.
vim statefulset.yml
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 3 template: metadata: labels: app: nginx spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web
Dans cet exemple,
- Un service sans tête, nommé
nginx
, est utilisé pour contrôler le réseau. - Le StatefulSet, nommé web, possède 3 réplicas du conteneur nginx qui seront lancés dans des pods uniques.
- nginx Image avec la version slim :0.8 est utilisée pour déployer Nginx.
Pour créer un Statefulset, exécutez les commandes suivantes.
kubectl get statefulset
kubectl créer -f statefulset.yml
Exécutez les 2 commandes suivantes pour répertorier le Statefulset et le Service créés à l'étape ci-dessus.
kubectl get statefulset
kubectl obtenir le service
Obtenez les pods à l'aide de la commande suivante et voyez que les pods ont des numéros comme suffixe dans le nom du pod.
kubectl obtenir des pods
Pour obtenir les détails complets du Statefulset, exécutez les commandes suivantes.
kubectl get statefulset
kubectl décrire statefulset web
Maintenant, supprimons les pods et voyons comment les noms sont conservés même après la création de nouveaux pods.
Nous supprimons 2 pods pour voir quels noms seront attribués aux nouveaux pods lors de leur création.
kubectl obtenir des pods
kubectl supprimer les pods web-0 web-2
kubectl obtenir des pods
Dans la capture d'écran ci-dessus, vous pouvez voir que, même après la suppression des pods, les pods nouvellement créés portent le même nom.
Conclusion
Dans cet article, nous avons créé un Statefulset et effectué des opérations dessus pour vérifier ses détails. Nous avons également supprimé les pods pour voir comment le nom du pod est conservé et le même est attribué aux pods nouvellement créés après sa suppression.