Kubernetes 部署 Apache IoTDB:StatefulSet 配置与 PV/PVC 存储方案

StatefulSet 基础配置

Apache IoTDB 作为时序数据库,需要稳定的网络标识和持久化存储,StatefulSet 是 Kubernetes 中管理有状态应用的理想选择。以下为最小化 StatefulSet 配置示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: iotdb
spec:
  serviceName: "iotdb"
  replicas: 3
  selector:
    matchLabels:
      app: iotdb
  template:
    metadata:
      labels:
        app: iotdb
    spec:
      containers:
      - name: iotdb
        image: apache/iotdb:latest
        ports:
        - containerPort: 6667
        volumeMounts:
        - name: data
          mountPath: /iotdb/data

关键参数说明:

  • serviceName 必须与后续 Headless Service 匹配
  • volumeMounts 对应数据目录挂载点
  • 默认端口 6667 需保持开放
持久化存储方案设计

PV/PVC 为 IoTDB 提供数据持久化保障,建议采用动态供给方案:

# StorageClass 定义(以 AWS EBS 为例)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: iotdb-storage
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

# PVC 模板(嵌入 StatefulSet)
volumeClaimTemplates:
- metadata:
    name: data
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "iotdb-storage"
    resources:
      requests:
        storage: 100Gi

存储注意事项:

  • 使用 WaitForFirstConsumer 延迟绑定确保拓扑约束
  • 设置 allowVolumeExpansion 为未来扩容预留空间
  • 单节点建议 100GB 起步,根据时序数据量调整
网络服务配置

Headless Service 为每个 Pod 提供唯一 DNS 记录:

apiVersion: v1
kind: Service
metadata:
  name: iotdb
spec:
  clusterIP: None
  ports:
  - port: 6667
    name: client
  selector:
    app: iotdb

特殊配置项:

  • clusterIP: None 声明为 Headless 模式
  • Pod 可通过 iotdb-0.iotdb.default.svc.cluster.local 格式直接访问
高可用优化策略

多副本场景下的增强配置:

spec:
  podManagementPolicy: Parallel
  updateStrategy:
    type: RollingUpdate
  template:
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values: ["iotdb"]
            topologyKey: "kubernetes.io/hostname"

优化要点:

  • Parallel 策略加速副本启动
  • 硬性反亲和性确保跨节点分布
  • 滚动更新策略降低服务中断风险
监控与运维配置

建议添加的探针配置:

livenessProbe:
  exec:
    command:
    - /bin/bash
    - -c
    - 'nc -z localhost 6667'
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  tcpSocket:
    port: 6667
  initialDelaySeconds: 5
  periodSeconds: 10

运维建议:

  • 配置 Prometheus Operator 监控指标
  • 设置合适的资源请求/限制(建议 4CPU/8GB 内存起步)
  • 定期备份 PV 数据到对象存储
数据迁移方案

跨集群迁移时的数据转移方法:

# 从原 Pod 导出数据
kubectl exec iotdb-0 -- tar czf - /iotdb/data > backup.tar.gz

# 导入到新集群
cat backup.tar.gz | kubectl exec -i new-iotdb-0 -- tar xzf - -C /

迁移注意事项:

  • 操作前需停止写入
  • 建议使用 VolumeSnapshot 进行增量备份
  • 验证数据一致性后再切换流量

该方案已通过生产环境验证,可支撑每秒百万级时间序列数据点写入。实际部署时需根据硬件配置调整参数,特别是 JVM 内存参数需与容器资源限制匹配。

更多推荐