Gli StatefulSet contengono un insieme di Pod con identità univoche e persistenti e nomi host stabili. Un modello di pod viene utilizzato in uno Statefulset, che contiene una specifica per i suoi pod, i pod vengono creati utilizzando questa specifica. Possiamo distribuire applicazioni stateful e applicazioni in cluster utilizzando Statefulsets in Kubernetes. StatefulSet può essere aggiornato apportando modifiche alla sua specifica Pod, che include le immagini e i volumi del contenitore.
StatefulSets può essere utilizzato quando le applicazioni richiedono una delle seguenti proprietà.
- Identificatori di rete univoci e stabili.
- Archiviazione stabile e persistente.
- Distribuzione e ridimensionamento ordinati e graziosi.
- Aggiornamenti in sequenza ordinati e automatizzati.
Per uno StatefulSet con N repliche, quando i pod vengono distribuiti, vengono creati in sequenza, nell'ordine da {0..N-1}. Quando i Pod vengono eliminati, vengono chiusi in ordine inverso, da {N-1..0}.
Per saperne di più su Statefulset, fai clic qui.
In questo articolo creeremo uno Statefulset con repliche di pod Nginx. Effettueremo operazioni sui Pod per vedere come vengono eliminati e creati.
Prerequisiti
- Cluster Kubernetes con almeno 1 nodo di lavoro.
Se vuoi imparare a creare un Cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18l04 EC2.
Cosa faremo
- Crea un statefulset
Crea un statefulset
Crea un file e aggiungi la seguente definizione Statefulset al suo interno.
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 
In questo esempio,
- Un servizio senza testa, denominato
nginx, viene utilizzato per controllare la rete. - Lo StatefulSet, denominato web, ha 3 repliche del contenitore nginx che verranno lanciate in Pod unici.
- L'immagine nginx con versione slim:0.8 viene utilizzata per distribuire Nginx.
Per creare uno Statefulset, esegui i seguenti comandi.
kubectl get statefulset
kubectl create -f statefulset.yml

Esegui i 2 comandi seguenti per elencare Statefulset e Service creati nel passaggio precedente.
kubectl get statefulset
kubectl ottieni il servizio

Ottieni i pod usando il seguente comando e osserva che i pod hanno numeri come suffisso nel nome del pod.
kubectl ottieni i pod

Per ottenere i dettagli completi dello Statefulset, esegui i seguenti comandi.
kubectl get statefulset
kubectl descrivi statefulset web

Ora eliminiamo i pod e vediamo come vengono conservati i nomi anche dopo la creazione di nuovi pod.
Stiamo eliminando 2 pod per vedere quali nomi verranno assegnati ai nuovi pod al momento della creazione.
kubectl ottieni i pod
kubectl elimina i pod web-0 web-2
kubectl ottiene i pod

Nella schermata sopra puoi vedere che, anche dopo aver eliminato i pod, i pod appena creati hanno lo stesso nome.
Conclusione
In questo articolo, abbiamo creato uno Statefulset e abbiamo eseguito operazioni su di esso per verificarne i dettagli. Abbiamo anche eliminato i pod per vedere come viene conservato il nome del pod e lo stesso viene assegnato ai pod appena creati dopo averlo eliminato.