ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Helm Chart 部署 CouchDB 集群完全指南:StatefulSet、持久化存储与管理员账号配置

Helm Chart 部署 CouchDB 集群完全指南:StatefulSet、持久化存储与管理员账号配置 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载CouchDB 是一款以无缝多主同步multi-master sync为核心特性的文档数据库可从大数据场景扩展至移动端内置直觉化的 HTTP/JSON API并以高可靠性著称。本指南基于本仓库中 stable/couchdb Helm Chart 展开讲解如何使用该 Chart 在 Kubernetes 集群中部署一个由 StatefulSet 管理的 CouchDB 集群涵盖管理员凭据管理、持久化卷、Erlang 节点互联、Lucene 全文检索等关键配置读者可据此快速搭建可运行的 CouchDB 集群并理解其底层实现原理。注意本 Chart 已标记为 deprecated废弃官方维护者已将其迁移至 Apache 官方仓库apache/couchdb-helm可通过helm repo add couchdb https://apache.github.io/couchdb-helm获取新版本。本文章内容基于本仓库当前实际代码适用于理解 Chart 结构与历史版本生产环境建议使用 Apache 官方 Chart。一、Chart 概览与架构1.1 是什么根据 Chart.yaml 中的描述CouchDB 是一款支持无缝多主同步的数据库可从容积大数据扩展到移动端提供直觉化的 HTTP/JSON API 并专注于可靠性。该 Chart 将 CouchDB 集群作为一个 StatefulSet 部署默认在 Deployment 前端创建一个 ClusterIP Service 用于负载均衡同时支持配置其他 Service 类型或 Ingress Controller。默认持久化机制是临时本地文件系统emptyDir生产环境应将persistentVolume.enabled设为true为每个 Pod 挂载存储卷。1.2 核心架构组件从 templates 目录可以清晰地看到 Chart 的组成模板文件作用statefulset.yaml定义 CouchDB 集群的 StatefulSet包含 init 容器、主容器及可选搜索 sidecarheadless.yaml创建 headless ServiceclusterIP: None为 Pod 提供稳定网络标识service.yaml创建客户端接入 Service默认 ClusterIP端口 5984secrets.yaml创建包含管理员凭据的 Secretconfigmap.yaml根据couchdbConfig生成 CouchDB 的 .ini 配置文件及节点 seedlistingress.yaml可选 Ingress 资源用于外部访问1.3 关键架构要点StatefulSet由clusterSize参数控制副本数podManagementPolicy默认为Parallel允许 Pod 并行启动。headless ServiceclusterIP: None且publishNotReadyAddresses: true为集群节点提供稳定 DNS 名称是 CouchDB 节点间相互发现的基础。客户端 Service通过 selector 匹配app与release标签将 5984 端口暴露给外部调用方。二、快速安装与验证2.1 TL;DR$ helm install stable/couchdb --set allowAdminPartytrue该命令以最小配置启动一个 3 节点 CouchDB 集群allowAdminPartytrue表示不创建管理员账号所有用户以 admin 身份运行仅适合快速体验。2.2 前置条件Kubernetes 1.8 且启用了 Beta APIsapps/v1beta2、extensions/v1beta1等。从模板可以看出 StatefulSet 使用apps/v1beta2API 版本Ingress 使用extensions/v1beta1因此对集群版本有明确要求。2.3 标准安装$ helm install --name my-release stable/couchdb安装时会自动创建一个 Secret包含集群的管理员凭据。凭据可通过以下命令获取$ kubectl get secret my-release-couchdb -o go-template{{ .data.adminPassword }} | base64 --decode若希望手动指定管理员凭据可先创建包含adminUsername、adminPassword、cookieAuthSecret三个键的 Secret$ kubectl create secret generic my-release-couchdb --from-literaladminUsernamefoo --from-literaladminPasswordbar --from-literalcookieAuthSecretbaz然后以createAdminSecretfalse安装 Chart跳过自动创建 Secret 的逻辑$ helm install --name my-release --set createAdminSecretfalse stable/couchdb2.4 启动后的验证与系统数据库初始化安装完成后可用 NOTES.txt 中给出的命令检查 Pod 状态$ kubectl get pods --namespace namespace -l appcouchdb,releaserelease待所有 Pod 进入 Ready 状态后需要执行一次集群初始化创建系统数据库$ kubectl exec -it release-couchdb-0 -c couchdb -- \ curl -s \ http://127.0.0.1:5984/_cluster_setup \ -X POST \ -H Content-Type: application/json \ -d {action: finish_cluster} \ -u adminUsername若使用了allowAdminPartytrue则无需-u参数即可执行。三、配置参数详解3.1 常用参数参数说明默认值clusterSizeCouchDB 集群初始节点数3couchdbConfig覆盖 server .ini 配置的 Mapchttpd.bind_addressanyallowAdminParty启用后以无管理员账号方式启动集群false需要创建 SecretcreateAdminSecret是否自动创建管理员账号与 cookie secrettrueschedulerName自定义 k8s 调度器名称如 storknilerlangFlags传给 Erlang VM 的标志name: couchdb, setcookie: monsterpersistentVolume.enabled是否为每个节点挂载 PVfalsepersistentVolume.sizePV 大小10GienableSearch是否添加 Lucene 全文搜索 sidecarfalse3.2 更多参数见 values.yaml 注释参数默认值adminUsernameadminadminPassword自动生成cookieAuthSecret自动生成image.repositorycouchdbimage.tag2.3.1image.pullPolicyIfNotPresentsearchImage.repositorykocolosk/couchdb-searchsearchImage.tag0.1.2searchImage.pullPolicyIfNotPresentinitImage.repositorybusyboxinitImage.taglatestinitImage.pullPolicyAlwaysingress.enabledfalseingress.hostschart-example.localingress.annotations空ingress.tls空persistentVolume.accessModesReadWriteOncepersistentVolume.storageClass集群默认podManagementPolicyParallelaffinity空resources空service.annotations空service.enabledtrueservice.typeClusterIPservice.externalPort5984dns.clusterDomainSuffixcluster.local3.3 参数对应的源码实现凭据生成机制在 secrets.yaml 中adminUsername、adminPassword、cookieAuthSecret三个键通过couchdb.defaultsecret模板见 _helpers.tpl生成。该模板的逻辑是如果用户显式提供了值则对其 base64 编码否则随机生成 20 位字母数字字符串并 base64 编码{{- define couchdb.defaultsecret -}} {{- if . -}} {{- . | b64enc | quote -}} {{- else -}} {{- randAlphaNum 20 | b64enc | quote -}} {{- end -}} {{- end -}}凭据注入在 statefulset.yaml 中当allowAdminParty为 false 时主容器通过secretKeyRef将adminUsername、adminPassword、cookieAuthSecret注入为COUCHDB_USER、COUCHDB_PASSWORD、COUCHDB_SECRET环境变量。健康检查的联动couchdbConfig.chttpd.require_valid_user为 true 时livenessProbe 与 readinessProbe 会改用带凭据的curl -u方式探测为 false默认时直接使用httpGet探测根路径与/_up端点。这解释了为什么修改require_valid_user会影响健康检查行为。四、持久化存储配置生产环境必须启用持久化。在 statefulset.yaml 中persistentVolume.enabledfalse默认时database-storage卷为emptyDir: {}数据随 Pod 生命周期消失。persistentVolume.enabledtrue时改用volumeClaimTemplates为每个 Pod 单独创建 PVC支持多副本独立持久化。配置示例persistentVolume: enabled: true accessModes: - ReadWriteOnce size: 10Gi # storageClass: - # 设为 - 表示禁用动态供给storageClass的设置逻辑在模板中体现得较为精细设为-时会生成storageClassName: 使用默认 StorageClass 之外的静态绑定不设置则交由集群默认 provisioner 动态创建。五、Ingress 与 Service 配置5.1 ServiceChart 会创建两个 Serviceheadless Serviceheadless.yamlclusterIP: None并设置publishNotReadyAddresses: true确保未就绪的 Pod 也能被 DNS 解析这是 StatefulSet 节点发现的前提。客户端 Serviceservice.yaml默认类型ClusterIPexternalPort: 5984映射到容器targetPort: 5984。可通过service.type改为NodePort或LoadBalancer。5.2 Ingress通过以下配置启用 Ingress 实现基于域名的虚拟主机和 TLS 终止ingress: enabled: true hosts: - couchdb.example.com annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: true tls: - secretName: couchdb-example-tls hosts: - couchdb.example.com从 ingress.yaml 可看到Ingress 将路径/转发到 headless Servicecouchdb.fullname的service.externalPort端口。六、集群配置Erlang 节点互联与 seedlistCouchDB 集群节点间通过 Erlang 分布式协议通信因此必须保证节点名与 cookie 一致。erlangFlags.nameErlang 节点名默认couchdb。erlangFlags.setcookieErlang cookie默认monster所有节点必须一致才能建立连接。在 statefulset.yaml 中这些标志被拼装进ERL_FLAGS环境变量env: - name: ERL_FLAGS value: {{ range $k, $v : .Values.erlangFlags }} -{{ $k }} {{ $v }} {{ end }}同时configmap.yaml 会根据couchdb.seedlist模板见 _helpers.tpl生成 seedlist。该模板最多取 5 个节点按 StatefulSet 的稳定 DNS 名称pod.svc.namespace.svc.clusterDomainSuffix拼出节点 FQDN[cluster] seedlist couchdbrelease-couchdb-0.release-couchdb.namespace.svc.cluster.local,couchdbrelease-couchdb-1....配合dns.clusterDomainSuffix默认cluster.local即可在多节点环境下自动发现彼此。七、couchdbConfig自定义 CouchDB .ini 配置couchdbConfig是一个 Map其内容会被 configmap.yaml 重排成 .ini 格式写入 ConfigMap再通过 init 容器拷贝到/opt/couchdb/etc/default.d/见 statefulset 中 init-copy 容器。默认配置couchdbConfig: chttpd: bind_address: any require_valid_user: false常用覆盖示例couchdbConfig: cluster: q: 8 # 每个数据库创建 8 个分片 chttpd: bind_address: any require_valid_user: true # 禁止所有匿名请求访问 5984 端口注意require_valid_user: true会联动改变健康检查探针的行为改为带凭据的 curl 探测这也是 statefulset.yaml 中的条件逻辑。八、Lucene 全文搜索enableSearchCouchDB 官方镜像不含全文搜索能力本 Chart 通过可选 sidecar 集成 Lucene 驱动的全文搜索enableSearch: true启用后statefulset.yaml 会在每个 Pod 中追加clouseau容器镜像kocolosk/couchdb-search并共享database-storage卷搜索索引数据存放于/opt/couchdb-search/data。九、调度与高可用建议自定义调度器通过schedulerName指定非默认调度器如stork。反亲和affinity.podAntiAffinity可避免同一节点上运行多个 CouchDB Pod提升故障容忍度。values.yaml 中已给出参考配置requiredDuringSchedulingIgnoredDuringExecution以kubernetes.io/hostname为 topologyKey。资源限制通过resources为 CouchDB 容器设置 requests 与 limits避免资源竞争。affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - couchdb topologyKey: kubernetes.io/hostname十、卸载与升级10.1 卸载$ helm delete my-release该命令会移除与 Chart 关联的所有 Kubernetes 组件并删除 release。10.2 大版本升级注意事项大版本变更如 v0.2.3 → v1.0.0可能包含不兼容的破坏性变更需要手动操作。以 1.0.0 版本为例该版本从volumeClaimTemplates中移除了chart和heritage标签该字段不可变阻碍 Chart 升级详见 https://github.com/helm/charts/issues/7803。升级前需先删除 CouchDB StatefulSet$ kubectl delete statefulsets --cascadefalse my-release-couchdb十一、常用运维命令汇总场景命令查看 Pod 状态kubectl get pods -l appcouchdb,releaserelease读取管理员密码kubectl get secret my-release-couchdb -o go-template{{ .data.adminPassword }} | base64 --decode手动创建凭据 Secretkubectl create secret generic my-release-couchdb --from-literaladminUsernamefoo --from-literaladminPasswordbar --from-literalcookieAuthSecretbaz列出所有 releasehelm list卸载 releasehelm delete my-release十二、总结通过本 Chart 可以在 Kubernetes 上快速部署高可用的 CouchDB 集群StatefulSet 保证每个节点拥有稳定身份headless Service 支撑节点自动发现Secret 统一管理管理员凭据volumeClaimTemplates实现每节点独立持久化couchdbConfig提供灵活的 .ini 级配置覆盖enableSearch则补充了 Lucene 全文检索能力。理解这些模板与参数的联动关系尤其是凭据注入、探针逻辑、seedlist 生成能够帮助你在面对集群扩容、升级或故障排查时准确定位问题。再次提醒本 Chart 已被官方标记为废弃新项目请使用 Apache 官方维护的apache/couchdb-helm仓库。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Apache Solr Helm Chart 部署与配置全指南StatefulSet 集群、TLS 与 Prometheus 监控helm/charts 仓库Apache Solr Helm Chart 部署与配置全指南StatefulSet 集群、TLS 与 Prometheus 监控helm/charts 仓Kafka Manager Helm Chart 部署与集群管理配置实战指南Kafka Manager Helm Chart 部署与集群管理配置实战指南 本指南围绕 charts 仓库中 stable/kafka manager htt如何用 Clara 在 10 分钟内为你的 C11 程序打造专业命令行界面如何用 Clara 在 10 分钟内为你的 C11 程序打造专业命令行界面 写 C 命令行工具时你是否还在手写 strcmp argv i , h创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表