暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

K8S上部署MongoDB集群

原创 曾云林 2026-04-29
444

一、前言

我们要做什么?

在 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. 无法下载镜像→ 配置国内镜像源

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论