mongodb - 我可以在 Kubernetes Statefulset 的 volumeClaimTemplate 中使用现有的 GCE 永久磁盘吗

标签 mongodb kubernetes persistent-volume-claims statefulset

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

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

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

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

[2017 年 9 月 20 日更新]

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

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

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

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

最佳答案

方法 1:动态

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

volumeClaimTemplates:
- 元数据:
名称:存储
注释:
volume.beta.kubernetes.io/storage-class: 慢
规范:
访问模式:["ReadWriteOnce"]
资源:
要求:
存储:10Gi

创建存储类storage.yaml文件

种类:存储类
api版本:storage.k8s.io/v1beta1
元数据:
名称:慢
供应商:kubernetes.io/gce-pd
参数:
类型:pd-标准
区域:asia-east1-a

方法二静态PV:

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

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

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

关于mongodb - 我可以在 Kubernetes Statefulset 的 volumeClaimTemplate 中使用现有的 GCE 永久磁盘吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46043440/

相关文章:

c# - 查找 MongoDB 文档并仅匹配带有 C# 驱动程序的数组元素

kubernetes - 即使我的服务仅使用 HTTPS,GKE 入口也会在 HTTP 中回答

kubernetes - 如何将 PV 和 PVC 用于*可靠的*持久卷?

kubernetes - 一个 GCP 永久磁盘是否可以在 ReadWriteMany 模式下被多个 pod 挂载/认领?

Mongodb 和聚合框架。对数组元素求和以对文档元素求和

javascript - Meteor 你的应用程序崩溃了

mongodb - 与简单文本相比,将日期作为 ISODate 存储在数据库中有什么优势?

使用配置文件访问 Kubernetes 仪表板 没有足够的数据来创建身份验证信息结构。

macos - kubectl 从本地 docker 镜像运行?

postgresql - 在 Okteto Cloud 上创建 PersistentVolume