我正在使用Google Container Engine来运行MongoDB副本集的状态集(3个副本Pods)。
这与持久存储的动态配置合作良好 - 在创建状态集时为每个POD提供了新的存储。
但是,如果我重新启动状态填充,似乎我无法重新绑定旧的持久量,因为新存储将再次提供。这意味着数据丢失了。理想情况下,持久存储应在Kubernetes群集本身的删除中生存,并保留数据并准备在新集群中再次使用。
是否有一种方法可以创建GCE持久性磁盘并将其用于状态满集的持久卷声明?
[2017年9月20日更新]
找到答案:这是解决方案(归功于@rahulkrishnan r a)
-
创建一个存储类,指定基础磁盘类型和区域
-
创建一个指定存储类创建的persistentVolume上面,并引用您希望安装的持续磁盘
- 创建一个PersistentVolumeClaim。命名PVC
<pvc template name>-<statefulset name>-<ordinal number>
很重要。(正确的名称是技巧!)指定体积为上面创建的PV和存储班级。 - 创建与具有复制品一样多的PV和PVC正确的名称。
- 使用PVC模板创建状态满集。
方法1:动态
您可以在statefulset.yaml文件中添加卷索赔模板以及部署定义
dolumeClaimTemplates:
- 元数据:
名称:存储
注释:
卷。规格:
AccessModes:[&quot'ReadWriteOnce;]
资源:
请求:
存储:10GI
创建存储类存储.yaml文件
种类:Storageclass
apiversion:storage.k8s.io/v1beta1
元数据:
名称:慢
供应商:kubernetes.io/gce-pd
参数:
类型:PD标准
区域:Asia-East1-A
方法2静态PV:
https://github.com/rahulkrishnanfs/percona-xtradb-statefulseflet-cluster-k8s/blob/master/master/percona.yml
注意: persistentVolumereReclicyPolicy:保留如果要保留卷
,请使用可以根据Storageclass Resource
看起来就像使用新的kubernetes(1.12)支持现有的卷,如果您已经有数据磁盘,这些卷可能会很方便。例如,我的应用程序没有较高的DB负载,我对使用3个实例(PSA)的Replica设置感到满意。对于我创建了一个使用一个副本并将现有gcePersistentDisk
用于主要和次级的每个符号的人。以下是第二个节点的配置:
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