nginx-statefulset.yaml
Erstelle die folgende Datei:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
clusterIP: None
selector:
app: nginx
ports:
- name: http
port: 80
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
name: http
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
kubectl apply -f nginx-statefulset.yaml
kubectl get pods -l app=nginx
→ Du solltest sehen:
nginx-0
nginx-1
nginx-2
kubectl get pvc
→ Du solltest sehen:
www-nginx-0
www-nginx-1
www-nginx-2
Jeder Pod hat einen eigenen persistenten Speicher.
kubectl exec nginx-0 -- sh -c "echo nginx-0 > /usr/share/nginx/html/index.html"
Dann:
kubectl port-forward pod/nginx-0 8080:80
Besuche im Browser: http://localhost:8080 → du solltest „nginx-0“ sehen.
kubectl delete pod nginx-0
Warte, bis er neu gestartet wurde, dann erneut aufrufen:
kubectl port-forward pod/nginx-0 8080:80
Du solltest immer noch „nginx-0“ sehen → das zeigt, dass persistenter Speicher erhalten bleibt.
kubectl delete -f nginx-statefulset.yaml
kubectl delete pvc -l app=nginx
Element | Besonderheit bei StatefulSet |
---|---|
Name | Pods heißen nginx-0 , nginx-1 , … statt zufälliger Namen |
VolumeClaimTemplates | Jeder Pod bekommt ein eigenes PVC |
Stable Network ID | nginx-0.nginx ist ein DNS-Name, der nur für nginx-0 gilt |