要在 Kubernetes 上安装 MongoDB Operator(以 MongoDB Community Kubernetes Operator 为例),以下是详细步骤:
前提条件
- 运行中的 Kubernetes 集群(v1.16+)
kubectl
已配置访问集群- 网络可访问 Docker Hub/GitHub(下载 Operator 资源)
安装步骤
1. 克隆 Operator 仓库
git clone https://github.com/mongodb/mongodb-kubernetes-operator.git
cd mongodb-kubernetes-operator
2. 安装自定义资源定义 (CRD)
kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
3. 创建 Namespace
kubectl create namespace mongodb
4. 部署 Operator
kubectl apply -k config/rbac/ --namespace mongodb
kubectl apply -f config/manager/manager.yaml --namespace mongodb
5. 验证 Operator 运行状态
kubectl get pods -n mongodb
输出应包含类似:
NAME READY STATUS RESTARTS AGE
mongodb-kubernetes-operator-xxxxx 1/1 Running 0 1m
部署 MongoDB 实例
1. 创建示例配置
cat <<EOF > mongodb.yaml
apiVersion: mongodbcommunity.mongodb.com/v1
kind: MongoDBCommunity
metadata:
name: example-mongodb
namespace: mongodb
spec:
members: 3
type: ReplicaSet
version: "7.0.5"
security:
authentication:
modes: ["SCRAM"]
users:
- name: admin
db: admin
passwordSecretRef:
name: admin-password
roles:
- name: clusterAdmin
db: admin
- name: userAdminAnyDatabase
db: admin
additionalMongodConfig:
storage.wiredTiger.engineConfig.journalCompressor: zlib
---
apiVersion: v1
kind: Secret
metadata:
name: admin-password
namespace: mongodb
stringData:
password: "securepassword123!"
EOF
2. 部署 MongoDB 集群
kubectl apply -f mongodb.yaml
3. 检查部署状态
kubectl get mongodbcommunity -n mongodb
kubectl describe mongodbcommunity example-mongodb -n mongodb
连接 MongoDB
# 获取服务地址
kubectl get svc -n mongodb
# 临时端口转发(测试用)
kubectl port-forward svc/example-mongodb-svc 27017:27017 -n mongodb
使用连接字符串:
mongodb://admin:securepassword123!@localhost:27017/?authSource=admin
关键注意事项
-
持久化存储:
默认使用临时存储(测试),生产环境需配置PersistentVolumeClaim
(在spec.statefulSet.spec.volumeClaimTemplates
中定义)。 -
安全:
- 使用
Secret
管理密码(避免明文) - 启用 TLS 加密(参考 Operator 文档)
- 使用
-
版本兼容:
检查 Operator 发布页 支持的 MongoDB 版本。 -
高级配置:
通过spec.additionalMongodConfig
自定义 MongoDB 参数。
卸载
kubectl delete -f mongodb.yaml
kubectl delete -f config/manager/manager.yaml -n mongodb
kubectl delete -k config/rbac/ -n mongodb
kubectl delete crd mongodbcommunity.mongodbcommunity.mongodb.com
kubectl delete namespace mongodb
提示:生产环境建议使用 MongoDB Atlas Operator 或 MongoDB Enterprise Operator 获得企业级支持。
(二) MongoDB Atlas Operator VS MongoDB Enterprise Operator
以下是 MongoDB Atlas Operator 与 MongoDB Enterprise Operator 的详细对比,帮助您根据需求选择合适方案:
1. 核心定位
特性 | MongoDB Atlas Operator | MongoDB Enterprise Operator |
---|---|---|
管理对象 | MongoDB Atlas 云服务(托管在 MongoDB 公有云) | 自托管的 MongoDB Enterprise 集群(私有环境) |
部署位置 | Atlas 云端(数据不在您的 K8s 集群内) | 您的 Kubernetes 集群内(数据本地化) |
目标用户 | 云优先策略、减轻运维负担 | 需要完全控制基础设施/数据主权的企业 |
License | 免费(但 Atlas 服务按用量付费) | 需 MongoDB Enterprise 高级订阅(付费) |
2. 架构差异
Atlas Operator
- 特点:
- Operator 通过 Atlas API 管理云端资源
- 无需在 K8s 中运行 MongoDB 实例
- 数据存储在 MongoDB 的全球云基础设施中
Enterprise Operator
- 特点:
- Operator 直接在 K8s 集群部署 MongoDB Pods
- 数据存储在您的 Persistent Volumes 中
- 需自行管理存储/网络/备份等基础设施
3. 关键功能对比
功能 | Atlas Operator | Enterprise Operator |
---|---|---|
高可用 | 自动全球多区域部署 | 需手动配置副本集/分片 |
备份恢复 | 自动持续备份(时间点恢复) | 依赖 Ops Manager 或自定义方案 |
扩缩容 | 一键垂直/水平扩容(无停机) | 需手动操作或脚本 |
安全 | 自动 TLS、IP 白名单、加密存储 | 需自行配置证书/KMS/网络策略 |
监控 | 内置实时性能监控(Atlas UI) | 需集成 Prometheus + Ops Manager |
版本升级 | 全自动滚动更新 | 需人工干预 |
多云支持 | 全球 100+ 区域(AWS/Azure/GCP) | 仅限于您的 K8s 集群所部署的云/本地环境 |
4. 运维复杂度
方面 | Atlas Operator | Enterprise Operator |
---|---|---|
运维责任 | MongoDB 负责数据库层运维 | 用户负责全栈运维 |
基础设施依赖 | 无需管理存储/网络/备份 | 需配置 PV、网络策略、备份存储等 |
灾难恢复 | 自动跨区域容灾 | 需自行设计 DR 方案 |
成本模型 | 按使用量付费(计算/存储/流量) | 前期投入高(企业订阅 + 基础设施成本) |
5. 适用场景
选择 Atlas Operator 当您需要:
- ☁️ 完全托管的数据库服务
- ⚡️ 快速启动全球分布式应用
- 🌍 自动多区域容灾能力
- 📊 内置监控/备份/安全功能(开箱即用)
- 典型用例:云原生应用、Serverless 架构、跨区域 SaaS 服务
选择 Enterprise Operator 当您需要:
- 🔒 数据主权合规(数据必须保留在私有环境)
- 🛡️ 深度定制 MongoDB 配置参数
- 💻 与现有私有云/数据中心集成
- 📡 离线环境部署能力
- 典型用例:金融/政府机构、本地数据中心、混合云架构
6. 集成生态
组件 | Atlas Operator | Enterprise Operator |
---|---|---|
管理控制台 | Atlas Web UI | Ops Manager / Cloud Manager |
CI/CD 集成 | Atlas CLI + Terraform Provider | Kubernetes Native Tools (Helm/Argo CD) |
监控栈 | Atlas 内置 + Datadog/New Relic 集成 | Prometheus + Grafana + Ops Manager |
备份方案 | Atlas 云备份(自动) | 需配置 Ops Manager 备份或 Velero |
7. 安装复杂度
- Atlas Operator:
helm install atlas-operator mongodb/atlas-operator # 3分钟完成
- Enterprise Operator:
# 需前置部署 Ops Manager 和配置存储 kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml helm install enterprise-operator mongodb/enterprise-operator
结论建议
需求 | 推荐方案 |
---|---|
快速云原生部署 + 减少运维 | ✅ Atlas Operator |
数据本地化/合规要求 | ✅ Enterprise Operator |
全球分布式应用 | ✅ Atlas Operator |
有限运维团队 | ✅ Atlas Operator |
全生命周期控制(高级调优) | ✅ Enterprise Operator |
💡 混合方案提示:部分企业同时使用两者——
- 用 Atlas Operator 处理面向用户的全球工作负载
- 用 Enterprise Operator 管理内部敏感数据