我可以在Kubernetes Statefulset的volumeClaimTemplate中使用现有的GCE持久性磁盘吗?

时间:2017-09-04 20:05:27

标签: mongodb kubernetes persistent-volume-claims statefulset

我正在使用Google容器引擎为MongoDB副本集运行StatefulSet(3个副本容器)。

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

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

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

[2017年9月20日更新]

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

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

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

  3. 创建PersistentVolumeClaim。命名PVC <pvc template name>-<statefulset name>-<ordinal number>非常重要。 (正确的名字是 技巧!)将volumeName指定为上面创建的PV和存储 类。
  4. 创建与您拥有的复制品一样多的PV和PVC 正确的名字。
  5. 使用PVC模板创建statefulSet。

2 个答案:

答案 0 :(得分:0)

方法1:动态

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

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

创建存储类storage.yaml文件

种类:StorageClass
apiVersion:storage.k8s.io/v1beta1
元数据:
名称:慢
供应者:kubernetes.io/gce-pd
参数:
类型:pd-标准
zone:asia-east1-a

方法2静态PV:

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

注意: persistentVolumeReclaimPolicy:如果您想保留音量,请保留

持久卷可以由管理员静态配置,也可以基于StorageClass资源动态配置

答案 1 :(得分:0)

看起来像使用新的kubernetes(1.12)支持现有的卷,如果您已经有包含数据的磁盘,这可能会很方便。例如,我的应用程序没有很高的数据库负载,并且我对运行具有3个实例(PSA)的副本集感到满意。我为每个对象创建了一个副本的有状态集,并将现有的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