【问题标题】:How do I define persistent volumes when deploying CouchDB to K8S using its helm chart?使用 helm chart 将 CouchDB 部署到 K8S 时,如何定义持久卷?
【发布时间】:2021-04-05 03:00:05
【问题描述】:

我正在尝试将 [CouchDB](https://couchdb.apache.org] 部署到 Kubernetes 集群中的正确步骤。

我所做的是:

kubectl create secret --namespace mynamespace generic couch-test-couchdb \
  --from-literal=adminUsername=admin
  --from-literal=adminPassword=password
  --from-literal=cookieAuthSecret=supersecret

helm install --namespace mynamespace couch-test \
   --set couchdbConfig.couchdb.uuid=$(uuid | tr -d -) \
   -f couch-test.yml \
   couchdb/couchdb

couch-test.yml:

createAdminSecret : false
persistentVolume.enabled : true
persistentVolume.size: 10Gi

该命令运行时没有错误消息,但不会发生持久存储分配。当我输入 kubectl describe pod couch-test-couchdb-0 时,我进入 Volumes for config-storage,database-storage EmptyDir

我错过了什么?

我怀疑我需要先创建一个PV,但不清楚如何将其链接到安装。是 storageClass 还是名称或其他?

** 更新**

我重新开始,删除设置并使用k apply --namespace mynamespace -f couch-storage.yml添加存储类定义

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: couch-storage
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

所以couch-farm.yml 现在看起来像这样:

createAdminSecret : false
persistentVolume.enabled : true
persistentVolume.size: 10Gi
persistentVolume.storageClass : couch-storage

没有区别,k describe pod... 中的存储仍然指向 EmptyDir

【问题讨论】:

    标签: yaml couchdb kubernetes-helm


    【解决方案1】:

    存储类是特定于环境/基础设施的,这就是 CouchDB Helm 图表停止创建任何内容的原因。

    图表应使用图表值文件中指定的存储类为每个 pod 创建一个PersistantVolumeClaim。大多数生产 Kubernetes 环境将有一个预配置的 StorageClass 资源列表(或您可以在自己的 StorageClass 资源中引用的配置器),它们支持动态配置,即在声明中指定存储类足以让后端启动并分配适当的存储并将其提供给 Kubernetes。

    在您的情况下,您似乎正在定义一个 Local Persistant Volume 用于存储,这非常好,但比使用动态配置器更复杂 - 您需要完成 documentation 中的步骤配置它并生成持久卷。

    如果您的环境支持,使用动态配置器(例如here 列出的那些)可能会更容易上手。

    【讨论】:

    • 我当前的系统是仅具有本地存储的 Edge 设备。我查看了 helm 图表中的 statefulset.yaml。它应该生成持久的卷声明,然后可能会失败,但是当我 kubectl describe persistantVolume 时它没有显示任何内容
    【解决方案2】:

    扩展 Will 的解决方案和我的极端案例:

    storageClass 无法进行动态配置时,掌舵图似乎不会创建PersistentVolumeClaim

    在我的例子中,我只使用 Microk8s 配置具有本地存储的 Edge 设备。幸运的是,Microk8s 带有一个 storageClass,它可以满足我的需要:动态配置本地存储。所以这里缺少的部分是条目

    createAdminSecret: false
    allowAdminParty: false
    persistentVolume:
      enabled : true
      size: 10Gi
      storageClass : microk8s-hostpath
    

    (点符号persistentVolume.storageClass 在这里不起作用)

    请注意:不要依赖这样的配置来进行重负载生产。在我的情况下,边缘设备会立即使用云数据库进行复制并使用 RAID5 驱动器,因此数据丢失的风险是可控的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-23
      • 2019-10-31
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多