使用K8S集群运行MongoDB7.0

参考:
https://hub.docker.com/_/mongo

  1. 创建PVC
    创建PVC用于数据持久化
# cat mongodb-pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongodb-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 22Gi
  storageClassName: gluster-heketi-storageclass

创建pvc

# kubectl apply -f mongodb-pvc.yaml

查看创建的PVC

# kubectl get pvc  mongodb-pvc
NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
mongodb-pvc   Bound    pvc-429a856d-ebdf-11ee-b17f-525400e71cb5   22Gi       RWO            gluster-heketi-storageclass   31m
  1. 创建Deployment
# cat mongodb-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: mongodb
  name: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mongodb
    spec:
      containers:
      - image: mongo:7.0
        name: mongo
        ports:
        - containerPort: 27017
          protocol: TCP
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          value: "root"
        - name: MONGO_INITDB_ROOT_PASSWORD
          value: "password"
        volumeMounts:
        - mountPath: /data/db
          name: mongodb-pvc
      volumes:
      - name: mongodb-pvc
        persistentVolumeClaim:
          claimName: mongodb-pvc

注意添加以下环境变量用于鉴权,该变量名参考hub.docker.com得到

image

env:
- name: MONGO_INITDB_ROOT_USERNAME
  value: "root"
- name: MONGO_INITDB_ROOT_PASSWORD
  value: "qwer1234"

创建Deployment

# kubectl apply -f mongodb-deployment.yaml
  1. 创建Service
    把NodePort端口固定
# cat mongodb-servive.yaml 
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: mongodb
  name: mongodb
spec:
  ports:
  - port: 27017
    protocol: TCP
    targetPort: 27017
    nodePort: 47017
  selector:
    app: mongodb
  type: NodePort
status:
  loadBalancer: {}
  1. 使用NodeIP+端口访问
    下载MongoDB客户端
    下载地址
https://downloads.mongodb.com/compass/mongodb-compass-1.42.3-win32-x64.exe

使用用户名和密码连接
image

2025-01-26补充开始
可能是意外断电或重启导致无法启动
Pod报错信息如下

# ailed to start up WiredTiger under any compatibility version. This may be due to an unsupported upgrade or downgrade

修复方法,使用repair修复
创建一个Job指定PVC启动一次修复

apiVersion: batch/v1
kind: Job
metadata:
  name: mongodb-repair-job
spec:
  template:
    spec:
containers:
- name: mongodb
image: mongo:7.0 # 替换为你的 MongoDB 镜像版本
command: ["mongod"]
args: ["--dbpath", "/data/db", "--repair"] # 指定 --repair 参数
volumeMounts:
- name: mongo-data
mountPath: /data/db
volumes:
- name: mongo-data
persistentVolumeClaim:
claimName: mongodb-pvc # 替换为你的 PersistentVolumeClaim 名称
restartPolicy: Never
  backoffLimit: 0 # 确保 Job 在失败后不会重试

执行一次修复,然后重启mongodb的Pod即可

# 执行修复
# kubectl apply -f job-deployment.yaml 
# 重启Pod
# kubectl delete pod mongodb-6f9469ccb-rvw28

2025-01-26补充结束

posted @ 2024-03-27 10:47  minseo  阅读(106)  评论(0编辑  收藏  举报