4

我正在使用 Google Container Engine 为 MongoDB 副本集(3 个副本 pod)运行 StatefulSet。

这适用于持久存储的动态配置——即在创建有状态集时为每个 pod 配置新存储。

但是,如果我重新启动 StatefulSet,我似乎无法重新绑定旧的持久卷,因为将再次配置新的存储。这意味着数据丢失。理想情况下,持久性存储应该在 Kubernetes 集群本身被删除后仍然存在,数据会保留下来并准备好在新集群中再次使用。

有没有办法创建 GCE 持久磁盘并在 StatefulSet 的持久卷声明中使用它们?

[2017 年 9 月 20 日更新]

找到答案: 这就是解决方案(归功于@RahulKrishnan RA)

  1. 创建一个存储类,指定底层磁盘类型和区域

  2. 创建一个 PersistentVolume 指定上面创建的存储类,并引用您要挂载的永久磁盘

  3. 创建一个 PersistentVolumeClaim。命名 PVC 很重要<pvc template name>-<statefulset name>-<ordinal number>。(正确的名称是诀窍!)将volumeName指定为上面创建的PV和存储类。
  4. 创建与具有正确名称的副本一样多的 PV 和 PVC。
  5. 使用 PVC 模板创建 statefulSet。
4

2 回答 2

0

方法一:动态

您可以在 statefulset.yaml 文件中添加如下卷声明模板以及部署定义

volumeClaimTemplates:
    -元数据:
      名称:存储
      注释:
          volume.beta.kubernetes.io/storage-class:慢
      规范:
         accessModes:[“ReadWriteOnce”]
         资源:
            请求:
            存储:10Gi

创建存储类 storage.yaml 文件

种类:StorageClass
apiVersion:storage.k8s.io/v1beta1
元数据:
   名称:slow
provisioner:kubernetes.io/gce-pd
参数:
   类型:pd-standard
   区域:asia-east1-a

方法2静态PV:

https://github.com/rahulkrishnanfs/percona-xtradb-statefulset-cluster-k8s/blob/master/percona.yml

注意:persistentVolumeReclaimPolicy: 如果您想保留卷,请保留使用

Persistent Volumes 可以由管理员静态配置,也可以基于 StorageClass 资源动态配置

于 2017-09-17T16:14:49.767 回答
0

看起来使用新的 kubernetes (1.12) 支持现有卷,如果您已经有包含数据的磁盘,这可能会很方便。例如,我的应用程序没有高数据库负载,我很高兴运行具有 3 个实例 (PSA) 的副本集。对于其中的每一个,我使用一个副本创建了 statefulset,并将现有gcePersistentDisk的用于 PRIMARY 和 SECONDARY。下面是第二个节点的配置:

apiVersion: v1
kind: Service
metadata:
  name: mongo-svc-b
spec:
  ports:
    - port: 27017
      targetPort: 27017
  clusterIP: None
  selector:
    app: si
    tier: db
    node: b
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo-b
spec:
  replicas: 1
  selector:
    matchLabels:
      app: si
      tier: db
      node: b
  serviceName: mongo-b
  template:
    metadata:
      labels:
        app: si
        tier: db
        node: b
    spec:
      containers:
        - name: mongo
          image: mongo:3.2
          command: ["mongod"]
          args: ["-replSet", "si"]
          ports:
            - containerPort: 27017
            - containerPort: 28017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
      volumes:
        - name: mongo-persistent-storage
          gcePersistentDisk:
            pdName: mongo-disk-b-green
            fsType: ext4
于 2019-05-20T12:05:06.350 回答