StatefulSet 项目

发布: (2026年1月19日 GMT+8 05:05)
2 min read
原文: Dev.to

Source: Dev.to

前置条件

StatefulSet 需要以下组件:

  • Headless Service – 为每个 Pod 提供稳定的 DNS。
  • StatefulSet 清单 – 定义 Pod 及其身份。
  • PersistentVolume / StorageClass – 通常已在集群中存在。

缺少这些,StatefulSet 将无法正常工作。

Headless Service

apiVersion: v1
kind: Service
metadata:
  name: mysql-headless
spec:
  clusterIP: None        # <- makes the service headless
  selector:
    app: mysql
  ports:
    - port: 3306

应用该 Service:

kubectl apply -f service.yaml

为什么重要

  • 没有负载均衡;每个 Pod 都拥有自己的 DNS 条目。
  • 数据库和集群场景必需。

StatefulSet 清单

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql-headless   # MUST match the headless service name
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: root
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 5Gi

应用该 StatefulSet:

kubectl apply -f statefulset.yaml

验证部署

列出 Pod:

kubectl get pods

你应该看到:

mysql-0
mysql-1
mysql-2

列出 PersistentVolumeClaims:

kubectl get pvc

你应该看到:

data-mysql-0
data-mysql-1
data-mysql-2

访问 Pod

kubectl exec -it mysql-0 -- bash

在 Pod 内可以测试 DNS 解析:

ping mysql-1.mysql-headless
ping mysql-2.mysql-headless

每个 Pod 都拥有自己的稳定主机名。

扩容 StatefulSet

kubectl scale statefulset mysql --replicas=4

会发生什么

  • mysql-2 之后创建新的 Pod mysql-3
  • 为其创建新的 PVC data-mysql-3
  • 数据不会丢失;Pod 保持其稳定的名称、DNS 和存储。
  • Pod 按顺序启动和停止,这对许多有状态应用至关重要。

使用场景

StatefulSet 适用于需要稳定身份和持久存储的工作负载,例如:

  • MySQL / PostgreSQL
  • MongoDB
  • Kafka
  • ZooKeeper
  • Elasticsearch

StatefulSet 会创建具有稳定身份、DNS 和持久存储的 Pod,这些都是数据库等有状态工作负载所必需的。

Back to Blog

相关文章

阅读更多 »