资讯详情

kubernetes-handbook 实战:基于 Helm Chart 在 Kubernetes 上部署 MongoDB(Bitnami MongoDB Chart 深度解析)

📅 2026/9/24 1:07:06 | 华诺云谱 👁 阅读
kubernetes-handbook 实战:基于 Helm Chart 在 Kubernetes 上部署 MongoDB(Bitnami MongoDB Chart 深度解析)
教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载导读本文以仓库内 MongoDB Helm Chart 文档 为核心完整讲解如何在 Kubernetes 集群中通过 Helm 包管理器部署 MongoDBBitnami 出品的官方 Chart并深入到 Chart 模板源码 剖析其 Deployment、Secret、Service、PVC 的底层实现。读完本文你将掌握 MongoDB Chart 的安装/卸载、全部可配置参数与默认值、--set与values.yaml两种参数注入方式、持久化存储的配置逻辑以及它作为 MEAN 全栈应用Node.js MongoDB依赖子 Chart 的集成方式能够直接在自己的集群中复现整套部署。一、Chart 与文档定位MongoDB 是一款跨平台的面向文档document-oriented数据库属于 NoSQL 家族。它摒弃了传统关系型数据库的“表结构”改用带动态模式的 JSON 类文档JSON-like documents使得某些类型应用中数据的集成更简单、更快速。本仓库将其以Helm Chart的形式收录于manifests/charts/mean/charts/mongodb/目录下作为 MEANMongoDB Express Angular Node.js示例应用堆栈中的数据库子 Chart。Chart 的元信息记录在 Chart.yamlname: mongodbversion: 0.4.17appVersion: 3.4.9对应 MongoDB 3.4.9 版本维护者为 Bitnami上游镜像来自 bitnami/bitnami-docker-mongodb描述NoSQL document-oriented database that stores JSON-like documents with dynamic schemas引擎为gotplGo 模板即标准的 Helm 模板渲染引擎。该 Chart 在集群中负责引导bootstrap一个 MongoDB Deployment并提供 Secret、Service、PVC 等配套资源属于典型的“有状态应用 持久化”Helm 包。二、Chart 文件结构总览在深入使用之前先看清 Chart 包的骨架目录manifests/charts/mean/charts/mongodb/charts/mongodb/ ├── Chart.yaml # Chart 元数据名称、版本、维护者等 ├── README.md # 官方使用文档本文主体 ├── values.yaml # 默认配置值镜像、密码、持久化、资源配额 └── templates/ # Helm 模板Go template Sprig 函数 ├── _helpers.tpl # 模板辅助函数name / fullname 生成规则 ├── deployment.yaml # 核心工作负载Deployment 探针 环境变量 ├── pvc.yaml # 持久化卷声明可选由 persistence.enabled 控制 ├── secrets.yaml # 存放 root 密码与自定义用户密码的 Secret ├── svc.yaml # 集群内访问 MongoDB 的 Service └── NOTES.txt # 安装成功后打印的“使用说明”连接方式提示这份结构是后续所有讲解的索引每个配置参数都能在values.yaml找到默认值并在某个模板文件中找到其消费位置。三、安装与卸载 Chart3.1 快速安装TL;DR$ helm install stable/mongodb说明README 中的stable/mongodb是 Helm 官方稳定仓库中的引用名本仓库内对应的 Chart 位于manifests/charts/mean/charts/mongodb/本地使用时可替换为本地路径如helm install ./mongodb。README 书写时对应 Helm v2 语法当前环境请以所用 Helm 版本的实际命令为准。3.2 前置条件PrerequisitesKubernetes 1.4且启用 Beta APIextensions/v1beta1本仓库的 deployment.yaml 正是该 API 版本属于 2017–2018 年主流写法新版集群需适配为apps/v1底层基础设施支持 PV Provisioner用于动态卷供给见下文“持久化”章节。3.3 指定 release 名称安装$ helm install --name my-release stable/mongodb该命令以默认配置在 Kubernetes 集群上部署 MongoDB。可通过helm list查看所有已安装的 release。3.4 卸载$ helm delete my-release该命令会删除与该 Chart 关联的所有 Kubernetes 组件Deployment、Service、Secret、PVC 等并注销该 release。注意若启用了持久化PVC 及其绑定的 PV 是否随之删除取决于集群的回收策略Reclaim Policy删除前请确认数据保留策略。四、配置参数详解核心章节README 给出了一张完整的参数表下面在完整继承的基础上结合本仓库 values.yaml 的实际取值与模板源码逐项深化。4.1 参数总表与仓库内实际默认值参数说明README 默认值本仓库 values.yaml 实际值imageMongoDB 镜像bitnami/mongodb:{VERSION}harbor-001.jimmysong.io/library/bitnami-mongodb:3.4.9-r1imagePullPolicy镜像拉取策略若imageTag为latest则为Always否则IfNotPresent未显式设置模板中default .Values.imagePullPolicy \| quotemongodbRootPasswordMongoDB adminroot密码nil未设置空mongodbUsername自定义普通用户nil未设置空mongodbPassword自定义用户密码nil未设置空mongodbDatabase要创建的数据库nil未设置空serviceTypeKubernetes Service 类型ClusterIPClusterIPpersistence.enabled是否使用 PVC 持久化数据truefalse仓库内实际默认关闭persistence.storageClass后端 PVC 的存储类nil使用 alpha storage class 注解null字符串null等价于不指定persistence.accessMode卷访问模式只读/读写ReadWriteOnceReadWriteOncepersistence.size数据卷大小8Gi8Gi事实提示README 声称persistence.enabled默认为true但本仓库这份 values.yaml 中实际写的是false该 Chart 作为 MEAN 演示应用的依赖为快速启动默认关闭持久化。使用前务必以你实际部署的 values 为准。此外仓库版 values.yaml 还额外配置了资源配额resources: requests: memory: 256Mi cpu: 100m即默认请求 256Mi 内存与 100m CPU模板中通过{{ toYaml .Values.resources | indent 10 }}渲染进 Deployment。4.2 参数与镜像环境变量的映射关系README 明确指出上述参数映射到 bitnami/bitnami-docker-mongodb 镜像定义的环境变量。从 deployment.yaml 可以确认这条调用链参数注入的环境变量取值来源mongodbRootPasswordMONGODB_ROOT_PASSWORDsecretKeyRef引用 Secret 的mongodb-root-password键mongodbUsernameMONGODB_USERNAMEdefault .Values.mongodbUsername \| quotemongodbPasswordMONGODB_PASSWORDsecretKeyRef引用 Secret 的mongodb-password键mongodbDatabaseMONGODB_DATABASEdefault .Values.mongodbDatabase \| quote密码类敏感信息不会明文进入 Pod 环境变量而是先由 secrets.yaml 生成一个Opaque类型的 SecretapiVersion: v1 kind: Secret metadata: name: {{ template mongodb.fullname . }} labels: app: {{ template mongodb.fullname . }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} type: Opaque data: mongodb-root-password: {{ default .Values.mongodbRootPassword | b64enc | quote }} mongodb-password: {{ default .Values.mongodbPassword | b64enc | quote }}再用secretKeyRef挂载到容器环境变量实现“密码只落盘为 base64、只经 Secret 引用注入”的安全实践。这是理解整个 Chart 的关键点你在 values 里写的密码最终以 Secret 的形式进入集群而不是写死在 Deployment 里。4.3 两种参数注入方式方式一--set命令行注入$ helm install --name my-release \ --set mongodbRootPasswordsecretpassword,mongodbUsernamemy-user,mongodbPasswordmy-password,mongodbDatabasemy-database \ stable/mongodb上述命令将 MongoDBroot账号密码设为secretpassword并额外创建标准数据库用户my-user密码my-password该用户对数据库my-database有访问权限。方式二-f指定 values 文件$ helm install --name my-release -f values.yaml stable/mongodb你可以在自定义的values.yaml中按需覆盖参数参考仓库内的 values.yaml 为蓝本。两种方式可叠加--set的优先级高于-f文件。五、模板源码级原理剖析5.1 命名规则_helpers.tpltemplates/_helpers.tpl 定义了资源命名逻辑mongodb.nameChart 名称支持nameOverride覆盖并trunc 63截断mongodb.fullnamerelease-name-chart-name同样截断至 63 字符并在末尾去掉-。注释中解释了 63 字符截断的原因Kubernetes 部分名称字段受 DNS 命名规范限制这是 Helm 官方 Chart 的通用做法。所有模板资源Deployment、Service、Secret、PVC统一使用{{ template mongodb.fullname . }}命名保证同一 release 内资源互相匹配。5.2 Deployment容器、探针与卷deployment.yaml核心片段逐项拆解镜像与拉取策略image: {{ .Values.image }} imagePullPolicy: {{ default .Values.imagePullPolicy | quote }}imagePullPolicy为空时输出空字符串交由 kubelet 按“镜像 tag 是否为 latest”的默认规则处理与 README 参数表描述一致。环境变量见 4.2 节MONGODB_ROOT_PASSWORD与MONGODB_PASSWORD来自 Secret 引用。端口containerPort: 27017即 MongoDB 标准监听端口。存活与就绪探针Liveness/Readiness ProbelivenessProbe: exec: command: - mongo - --eval - db.adminCommand(ping) initialDelaySeconds: 30 timeoutSeconds: 5 readinessProbe: exec: command: - mongo - --eval - db.adminCommand(ping) initialDelaySeconds: 5 timeoutSeconds: 1两个探针都使用容器内mongo客户端执行db.adminCommand(ping)来验证服务可用就绪探针启动 5 秒后开始探测、超时 1 秒存活探针延迟 30 秒、超时 5 秒。这套组合保证 MongoDB 未就绪前流量不会打入readiness进程挂死后能被 kubelet 重启liveness。数据卷挂载与持久化开关volumeMounts: - name: data mountPath: /bitnami/mongodb ... volumes: - name: data {{- if .Values.persistence.enabled }} persistentVolumeClaim: claimName: {{ template mongodb.fullname . }} {{- else }} emptyDir: {} {{- end -}}数据目录固定在容器路径/bitnami/mongodb与 Bitnami 镜像约定一致persistence.enabledtrue时挂载同名 PVC为false本仓库默认时回退为emptyDir——Pod 删除后数据即丢失仅适合演示/临时环境。5.3 Service集群内访问svc.yamlspec: type: {{ .Values.serviceType }} ports: - name: mongodb port: 27017 targetPort: mongodb selector: app: {{ template mongodb.fullname . }}Service 类型由serviceType控制默认ClusterIP仅集群内可达如需外部访问可改为NodePort或LoadBalancer端口 27017 转发到 Pod 的mongodb命名端口即 deployment 中的containerPort: 27017selector 与 Deployment 的 Pod 标签app: fullname对应。5.4 PVC持久化逻辑pvc.yaml{{- if .Values.persistence.enabled }} kind: PersistentVolumeClaim apiVersion: v1 metadata: name: {{ template mongodb.fullname . }} spec: accessModes: - {{ .Values.persistence.accessMode | quote }} resources: requests: storage: {{ .Values.persistence.size | quote }} {{- if .Values.persistence.storageClass }} {{- if (eq - .Values.persistence.storageClass) }} storageClassName: {{- else }} storageClassName: {{ .Values.persistence.storageClass }} {{- end }} {{- end }} {{- end }}模板对storageClass做了三种分支处理这是理解持久化配置的关键storageClass未定义本仓库默认null不输出storageClassName由集群默认 Provisioner 决定README 注释举例AWS 上为 gp2GKE/AWS/OpenStack 上为 standardstorageClass为-输出storageClassName: 禁用动态供给要求使用预先创建的静态 PVstorageClass为具体名称输出storageClassName: 名称使用指定 StorageClass 动态供给。accessMode 与 size 直接透传默认ReadWriteOnce、8Gi。六、持久化Persistence专题Bitnami MongoDB 镜像将数据与配置存放在容器路径/bitnami/mongodbChart 在该位置挂载 Persistent Volume并通过**动态卷供给dynamic volume provisioning**创建卷。结合上文 5.4 节实践中通常按如下组合使用persistence: enabled: true # 生产环境务必开启 storageClass: standard # 指定 StorageClass或用 - 禁用动态供给 accessMode: ReadWriteOnce size: 8Gi要点回顾数据路径是镜像约定/bitnami/mongodb不要随意改动 mountPath仓库版默认关闭持久化enabled: false以便 MEAN 演示快速拉起正式环境需要显式开启卷的回收、快照、备份策略由 StorageClass 与集群运维决定Chart 本身只负责“申请 PVC”。七、作为 MEAN 应用的子 Chart 集成本 Chart 在仓库中不是孤立存在的它是 MEAN 应用Node.js Todo 示例的依赖子 Chart依赖关系声明在 manifests/charts/mean/requirements.yamldependencies: - name: mongodb repository: http://localhost:8879 version: 0.4.x父 Chart manifests/charts/mean/values.yaml 中通过mongodb:字段透传子 Chart 参数例如mongodb.mongodbUsername、mongodb.mongodbPassword、mongodb.mongodbDatabase与持久化配置Node.js 应用侧则通过环境变量MONGODB_USERNAME、MONGODB_PASSWORD、MONGODB_HOST、MONGODB_PORT、MONGODB_DATABASE拼出连接串module.exports { remoteUrl: mongodb:// process.env.MONGODB_USERNAME : process.env.MONGODB_PASSWORD process.env.MONGODB_HOST : process.env.MONGODB_PORT / process.env.MONGODB_DATABASE, localUrl: mongodb:// process.env.MONGODB_USERNAME : process.env.MONGODB_PASSWORD process.env.MONGODB_HOST : process.env.MONGODB_PORT / process.env.MONGODB_DATABASE };这展示了 Helm 的典型编排方式父 Chart 声明依赖 → 子 Chart 负责有状态组件数据库→ 应用通过 Service DNS 与 Secret 注入的凭据接入。MongoDB 的集群内 DNS 名称即为mongodb.fullname生成的release-mongodb。八、安装后的连接与验证Chart 自带的 templates/NOTES.txt 在helm install成功后会自动打印连接指引集群内 DNS 地址端口 27017{{ template mongodb.fullname . }}.{{ .Release.Namespace }}.svc.cluster.local用临时客户端 Pod 连接$ kubectl run my-release-mongodb-client --rm --tty -i \ --image bitnami/mongodb \ --command -- mongo --host my-release-mongodb -p root密码验证流程建议helm list确认 release 状态为DEPLOYEDkubectl get pods观察 Pod 进入Running就绪探针通过kubectl get svc确认 Service 与 Endpoints 正常按 NOTES.txt 提示执行mongo --host ...连接并执行db.adminCommand(ping)验证。九、实操自检清单确认集群版本与 API 兼容性本 Chart 使用extensions/v1beta1新版集群需改写为apps/v1确认底层有可用的 StorageClass/动态供给生产环境部署前通过--set或-f values.yaml设置mongodbRootPassword不设置则镜像侧可能有默认行为务必按 Bitnami 镜像文档确认生产环境将persistence.enabled显式置为true并按需指定storageClass通过kubectl get secret确认密码已以 Secret 形式落盘避免明文泄露卸载前评估 PVC 数据保留策略helm delete的行为受集群回收策略影响。十、总结本仓库中的 MongoDB Helm Chart版本 0.4.17对应 MongoDB 3.4.9是一份结构清晰、可复用的有状态应用部署模板values.yaml定义参数secrets.yaml保管凭据deployment.yaml承载工作负载与探针pvc.yaml负责持久化svc.yaml暴露访问入口并通过_helpers.tpl统一命名。掌握它的参数表、注入方式与模板实现你就能举一反三地理解 Helm 生态中同类数据库 Chart 的通用模式也能把它作为 MEAN 应用的数据库底座在自己的集群中快速搭建一套带持久化的 MongoDB 服务。赞分享教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载相关推荐使用 Kubernetes Handbook 中的 MongoDB Helm Chart 在 Kubernetes 上部署 NoSQL 数据库使用 Kubernetes Handbook 中的 MongoDB Helm Chart 在 Kubernetes 上部署 NoSQL 数据库 本篇技术指南以当教程云原生容器编排在 Kubernetes 上使用 Helm Chart 部署 MEAN 应用kubernetes-handbook 中的 mean Chart 实战指南在 Kubernetes 上使用 Helm Chart 部署 MEAN 应用kubernetes handbook 中的 mean Chart 实战指南 导读教程云原生容器编排vLLM Helm Chart 深度解析用 chart-helm 在 Kubernetes 上部署 vLLM 推理服务vLLM Helm Chart 深度解析用 chart helm 在 Kubernetes 上部署 vLLM 推理服务 本篇基于仓库中的 Helm Chart人工智能大模型模型推理服务推理引擎本地部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。