een StatefulSet in Kubernetes te maken

StatefulSets bevatten een verzameling Pods met unieke, persistente identiteiten en stabiele hostnamen. In een Statefulset wordt een podsjabloon gebruikt, dat een specificatie bevat voor zijn pods, pods worden aangemaakt met behulp van deze specificatie. We kunnen stateful applicaties en geclusterde applicaties inzetten met behulp van Statefulsets in Kubernetes. StatefulSet kan worden bijgewerkt door wijzigingen aan te brengen in zijn Pod-specificatie, die zijn container images en volumes bevat.

StatefulSets kunnen worden gebruikt als de toepassingen een van de volgende eigenschappen nodig hebben.

  • Stabiele, unieke netwerk identifiers.
  • Stabiele, persistente opslag.
  • Geordende, sierlijke inzet en schaling.
  • Geordende, geautomatiseerde rollende updates.

Voor een StatefulSet met N replica’s geldt dat wanneer Pods worden ingezet, ze achtereenvolgens worden aangemaakt, in volgorde van {0..N-1}. Wanneer Pods worden verwijderd, worden ze beĆ«indigd in omgekeerde volgorde van {N-1..0}.

Om meer te weten te komen over Statefulset, klik hier.

In dit artikel zullen we een Statefulset maken met replica’s van Nginx pods. We zullen operaties uitvoeren op de Pods om te zien hoe ze worden verwijderd en aangemaakt.

Randvoorwaarden

  1. Kubernetes Cluster met ten minste 1 worker node.
    Als je een Kubernetes Cluster wilt leren maken, klik dan hier. Deze gids helpt je om een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18l04 EC2 Instances.

Wat we gaan doen

  1. Maak een Statefulset aan

Maak een Statefulset

Maak een bestand aan en voeg daarin de volgende Statefulset definitie toe.

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

statefulset

In dit voorbeeld,

  • Een Headless Service, genaamd nginx, wordt gebruikt om het netwerk te besturen.
  • De StatefulSet, genaamd web, heeft 3 replica’s van de nginx container die in unieke Pods worden gestart.
  • nginx Image met versie slim:0.8 wordt gebruikt om Nginx in te zetten.

Voer de volgende commando’s uit om een Statefulset aan te maken.

kubectl get statefulset

kubectl create -f statefulset.yml

create-stateful-set

Voer de volgende 2 commando’s uit om de Statefulset en de in de bovenstaande stap aangemaakte Service op te sommen.

kubectl get statefulset

kubectl get service

get-statefulset-en-service

Haal de pods op met het volgende commando en zie dat de Pods nummers als Suffix in de Podnaam hebben.

kubectl get pods

get-pods-in-statefulset

Om de volledige details van de Statefulset te krijgen, voer je de volgende commando’s uit.

kubectl get statefulset

kubectl describe statefulset web

describe-statefu-set

Laten we nu de pods verwijderen en zien hoe de namen bewaard blijven, ook nadat nieuwe pods zijn aangemaakt.

We verwijderen 2 pods om te zien welke namen worden toegekend aan de nieuwe pods bij het aanmaken.

kubectl get pods

kubectl verwijdert pods web-0 web-2

kubectl get pods

recreƫren-pods

In bovenstaande schermafbeelding kun je zien dat, zelfs na het verwijderen van de pods, nieuw aangemaakte pods dezelfde naam krijgen.