Come creare uno StatefulSet in Kubernetes
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 con stato e applicazioni in cluster utilizzando gli statefulset in Kubernetes. StatefulSet può essere aggiornato apportando modifiche alla relativa specifica del pod, che include le immagini e i volumi del contenitore.
Gli StatefulSet possono essere utilizzati quando le applicazioni richiedono una delle seguenti proprietà.
- Identificatori di rete univoci e stabili.
- Archiviazione stabile e persistente.
- Distribuzione e ridimensionamento ordinati e aggraziati.
- Aggiornamenti continui 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 terminati in ordine inverso, da {N-1..0}.
Per saperne di più su Statefulset, clicca qui.
In questo articolo creeremo uno Statefulset con le repliche dei pod Nginx. Eseguiremo delle operazioni sui Pod per vedere come vengono cancellati 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 uno 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,
- Per controllare la rete viene utilizzato un servizio headless, denominato
nginx
. - Lo StatefulSet, denominato web, ha 3 repliche del container nginx che verranno lanciate in pod univoci.
- L'immagine nginx con versione slim:0.8 viene utilizzata per distribuire Nginx.
Per creare uno Statefulset, eseguire i seguenti comandi.
kubectl get statefulset
kubectl create -f statefulset.yml
Esegui i seguenti 2 comandi per elencare lo Statefulset e il servizio creati nel passaggio precedente.
kubectl get statefulset
kubectl get service
Ottieni i pod utilizzando il seguente comando e osserva che i pod hanno numeri come suffisso nel nome del pod.
kubectl get pods
Per ottenere i dettagli completi di Statefulset, esegui i seguenti comandi.
kubectl get statefulset
kubectl describe 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 get pods
kubectl delete pods web-0 web-2
kubectl get pods
Nello screenshot 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 ed 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.