一、前言
我们要做什么?
在 Kubernetes 上,用 MongoDB 官方 Operator 一键部署一套 3 节点高可用 MongoDB 副本集。
Operator = 自动帮你安装、扩容、备份、管理 MongoDB 的 “自动化工具”。
二、准备工作
1. 你已经有一套正常运行的 K8s 集群
2. 能执行 kubectl 命令
3. 服务器能访问外网
三、安装步骤 1:安装 MongoDB CRD(必须先装)
CRD 作用:告诉 K8s 什么是 “MongoDB 集群”
3.1 下载 CRD 文件
wget https://raw.githubusercontent.com/mongodb/mongodb-kubernetes-operator/master/config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
3.2 创建 CRD
kubectl apply -f mongodbcommunity.mongodb.com_mongodbcommunity.yaml
3.3 检查是否安装成功
kubectl get crd | grep mongodb
看到输出记录 = 成功 ✅
四、步骤 2:安装 MongoDB Operator
Operator 是真正 “管理 MongoDB” 的核心程序
4.1 创建专用命名空间
kubectl create namespace mongodb
4.2 部署 Operator
准备好 mongodb-operator.yaml 文件,内容如下(直接复制):
apiVersion: apps/v1kind: Deploymentmetadata:
name: mongodb-kubernetes-operator
namespace: mongodbspec:
replicas: 1
selector:
matchLabels:
name: mongodb-kubernetes-operator
template:
metadata:
labels:
name: mongodb-kubernetes-operator
spec:
serviceAccountName: mongodb-kubernetes-operator
containers:
- name: mongodb-kubernetes-operator
image: quay.io/mongodb/mongodb-kubernetes-operator:latest
command:
- /manager
args:
- --leader-elect
- --health-probe-bind-address=:8081
执行部署:
kubectl apply -f mongodb-operator.yaml -n mongodb
4.3 检查 Operator 运行状态
kubectl get pods -n mongodb
看到 STATUS = Running 就成功 ✅
五、步骤 3:创建存储 PV(数据持久化)
MongoDB 需要持久化存储,我们创建 3 个 PV(3 副本用)
for i in 1 2 3; docat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv0${i}
spec:
capacity:
storage: 50Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/mongodb/data0${i}
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8s-node1
EOFdone
检查 PV:
kubectl get pv
六、步骤 4:部署 MongoDB 3 节点副本集
6.1 创建管理员密码(安全必备)
请把 yourpassword 改成你自己的密码
kubectl create secret generic mongodb-admin-password \
--from-literal=password=yourpassword
6.2 编写 MongoDB 集群配置
新建 mongodb-cluster.yaml:
apiVersion: mongodbcommunity.mongodb.com/v1kind: MongoDBCommunitymetadata:
name: mongodb-clusterspec:
members: 3 # 3节点副本集
type: ReplicaSet
version: "6.0.5"
# 开启安全认证
security:
authentication:
modes: ["SCRAM"]
# 管理员账号
users:
- name: admin
db: admin
passwordSecretRef:
name: mongodb-admin-password
roles:
- name: root
db: admin
# 存储配置
statefulSet:
spec:
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
storageClassName: local-storage
6.3 一键部署 MongoDB
kubectl apply -f mongodb-cluster.yaml
6.4 查看部署状态
kubectl get mongodbcommunity
kubectl get pods -l app.kubernetes.io/name=mongodb-cluster
看到 3 个 Pod 全部 Running = 部署成功 ✅
七、步骤 5:连接测试(验证是否可用)
7.1 进入 MongoDB 容器
kubectl exec -it mongodb-cluster-0 -- mongosh
7.2 使用管理员登录
use admin
db.auth("admin", "yourpassword")
7.3 查看副本集状态(查看主节点)
rs.status()
能看到 PRIMARY 主节点 = 完全正常 ✅
八、常见问题:
1. Pod 一直 Pending→ 检查 PV 是否创建、存储类是否匹配
2. Operator 起不来→ 看日志:kubectl logs -n mongodb 你的operator pod
3. 连不上数据库→ 密码是否正确、是否执行了 db.auth()
4. 无法下载镜像→ 配置国内镜像源




