← Về danh sách bài học
Bài 18/25
🗄️ Bài 18: StatefulSet
🎯 Sau bài học này, bạn sẽ:
- Phân biệt StatefulSet vs Deployment
- Triển khai stateful apps (databases)
- Hiểu stable network identity
1. StatefulSet vs Deployment
| Deployment | StatefulSet |
|---|---|
| Pods interchangeable | Pods có identity riêng |
| Random pod names | Ordered names: app-0, app-1 |
| Shared storage | Mỗi pod có PVC riêng |
| Stateless apps | Databases, clusters |
2. StatefulSet YAML
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql-headless # Headless service
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
ports:
- containerPort: 3306
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates: # Mỗi pod có PVC riêng
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
3. Headless Service
apiVersion: v1
kind: Service
metadata:
name: mysql-headless
spec:
clusterIP: None # Headless!
selector:
app: mysql
ports:
- port: 3306
💡 DNS của StatefulSet:
•
•
• Mỗi pod có DNS ổn định!
•
mysql-0.mysql-headless.default.svc.cluster.local•
mysql-1.mysql-headless.default.svc.cluster.local• Mỗi pod có DNS ổn định!
4. Ordered Operations
spec:
podManagementPolicy: OrderedReady # Default
# OrderedReady: Tạo/xóa tuần tự 0→1→2
# Parallel: Tạo/xóa song song
📝 Tóm Tắt
- StatefulSet: Cho stateful applications
- Pods có stable identity: app-0, app-1...
- volumeClaimTemplates: PVC riêng mỗi pod
- Headless Service: clusterIP: None