使用K8S集群运行MongoDB7.0
参考:
https://hub.docker.com/_/mongo
- 创建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
- 创建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得到
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: "root"
- name: MONGO_INITDB_ROOT_PASSWORD
value: "qwer1234"
创建Deployment
# kubectl apply -f mongodb-deployment.yaml
- 创建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: {}
- 使用NodeIP+端口访问
下载MongoDB客户端
下载地址
https://downloads.mongodb.com/compass/mongodb-compass-1.42.3-win32-x64.exe
使用用户名和密码连接
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补充结束