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.