Middle
Voor welke toepassing moet je StatefulSet gebruiken in plaats van Deployment en waarom?
sobes.tech AI
Antwoord van AI
StatefulSet moet worden gebruikt voor toepassingen die:
- Stabiele netwerkidentificatie vereisen. Pods krijgen een unieke, permanente hostname in het formaat
<statefulset-naam>-<pod-index>. - Stabiele, persistente opslag. Elke Pod-replica krijgt een eigen PersistentVolume toegewezen. Zelfs na het opnieuw opstarten van de Pod blijven de gegevens eraan gekoppeld.
- Geordende implementatie en schaalvergroting. Pods worden in een strikt gedefinieerde volgorde gemaakt en verwijderd (oplopend voor maken, aflopend voor verwijderen).
- Geordende of parallelle update. Ondersteunt zowel stapsgewijze (rolling update) als parallelle (in-place of parallel) updates, met controle over de volgorde.
Voorbeelden van dergelijke toepassingen:
- Databases (MySQL, PostgreSQL, MongoDB)
- Berichtbrokers (Kafka, RabbitMQ)
- Cache-systemen (Redis, Memcached)
- Gedistribueerde bestandssystemen (bijvoorbeeld Ceph, indien uitgevoerd in Kubernetes)
- Elke toepassing die toestand moet bewaren tussen herstarts en een constante identificatie nodig heeft.
In tegenstelling tot Deployment, waarbij Pods uitwisselbaar en stateless zijn, garandeert StatefulSet uniciteit en het behoud van toestand voor elke replica, wat cruciaal is voor toepassingen die afhankelijk zijn van persistent opslag en stabiele netwerkidentificatie.
Een eenvoudig voorbeeld van een StatefulSet voor een database:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Vereist voor stabiele netwerkidentificatie van Pods
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" # Gebruik Secrets in productie
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Pad waar de persistente opslag wordt gekoppeld
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # Naam van de PVC-sjabloon
spec:
accessModes: [ "ReadWriteOnce" ] # Toegangsmodus
resources:
requests:
storage: 10Gi # Aangevraagde opslagruimte