MongoDB Kubernetes Operator 部署与配置完全指南
前言
MongoDB Kubernetes Operator 是一个强大的工具,它允许开发者在 Kubernetes 集群中轻松部署和管理 MongoDB 实例。本文将深入讲解如何部署和配置 MongoDBCommunity 资源,涵盖从基础部署到高级配置的各个方面。
基础部署:副本集
部署前的注意事项
重要警告:删除 MongoDB 资源时,持久化卷(PV)会保留以防止意外数据丢失。如果使用相同名称创建新的 MongoDB 资源并重用这些持久化卷,当新资源的拓扑结构与之前不同时,可能会导致问题。
部署步骤详解
-
准备配置文件: 修改示例配置文件中的密码字段,替换
<your-password-here>为您选择的强密码。 -
应用配置:
kubectl apply -f config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml --namespace <my-namespace> -
验证部署:
kubectl get mongodbcommunity --namespace <my-namespace> -
获取连接信息: Operator 会自动创建包含连接字符串和凭证的 Secret。Secret 命名遵循
<metadata.name>-<auth-db>-<username>的格式。使用以下命令获取连接信息(需要 jq 1.6+):
kubectl get secret <connection-string-secret-name> -n <my-namespace> \ -o json | jq -r '.data | with_entries(.value |= @base64d)'输出将包含标准连接字符串和 DNS 种子列表连接字符串。
-
连接测试: 从集群内的 Pod 使用获取的连接字符串测试连接:
mongosh "mongodb+srv://<username>:<password>@example-mongodb-svc.mongodb.svc.cluster.local/admin?ssl=true"
扩展与调整副本集
水平扩展副本集
通过修改spec.members字段可以调整副本集成员数量:
- 编辑 YAML 文件,将
members值更新为目标数量 - 重新应用配置:
kubectl apply -f <example>.yaml --namespace <my-namespace>
注意:缩减副本集时,Operator 可能需要几分钟时间移除对应的 StatefulSet 副本。
添加仲裁节点
仲裁节点(Arbiter)是不存储数据的特殊副本集成员,仅参与选举。添加方法:
- 在配置中添加
arbiters字段 - 确保
arbiters值为正整数且小于members值
示例配置:
spec:
type: ReplicaSet
members: 3
arbiters: 1
version: "4.4.13"
版本升级策略
升级 MongoDB 版本
- 修改
spec.version为目标版本(必须使用完整版本号,如"5.0.3") - 考虑设置
featureCompatibilityVersion以保持降级能力
示例升级配置:
spec:
version: "4.2.7"
featureCompatibilityVersion: "4.0"
功能兼容性版本
featureCompatibilityVersion控制 MongoDB 的功能兼容性级别。设置为当前工作版本可以在升级后保留降级选项。
OpenShift 环境部署
在 OpenShift 上部署需要额外配置:
- 为 Operator 部署设置环境变量
MANAGED_SECURITY_CONTEXT=true - 使用专门的 OpenShift 示例配置文件
高级安全配置
自定义数据库角色
通过spec.security.roles可以定义细粒度的访问控制角色:
security:
roles:
- role: testRole
db: admin
privileges:
- resource:
db: "test"
collection: ""
actions:
- find
roles: []
角色配置包含:
- 权限定义(privileges)
- 继承角色(roles)
- 认证限制(authenticationRestrictions)
就绪探针定制
在特殊情况下可能需要调整就绪探针(Readiness Probe)参数:
spec:
statefulSet:
spec:
template:
spec:
containers:
- name: mongodb-agent
readinessProbe:
failureThreshold: 40
initialDelaySeconds: 5
适用场景:
- 镜像下载速度慢时增加
failureThreshold - Kubernetes API 响应慢时增加
periodSeconds
集群域配置
要修改 MongoDB 服务对象的集群域(默认cluster.local),可在 Operator 部署中设置CLUSTER_DOMAIN环境变量:
env:
- name: CLUSTER_DOMAIN
value: $CUSTOM_DOMAIN
最佳实践建议
- 生产环境密码管理:避免在配置文件中直接写入密码,考虑使用 Kubernetes Secret
- 版本控制:升级前充分测试,并合理设置功能兼容性版本
- 监控配置:根据实际负载调整就绪探针参数
- 安全隔离:合理使用命名空间隔离不同环境的 MongoDB 实例
通过本文的详细指导,您应该能够在 Kubernetes 环境中高效部署和管理 MongoDB 集群,满足各种业务场景的需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



