← Về danh sách bài học Bài 18/25

🗄️ Bài 18: StatefulSet

⏱️ Thời gian: 25 phút | 📚 Độ khó: Nâng cao

🎯 Sau bài học này, bạn sẽ:

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:
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