Ricerca nel sito web

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

  1. 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

  1. 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.