K8s - 安装部署MongoDB数据库教程1(单实例)
来源: https://www.hangge.com/blog/cache/detail_3158.html
MongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Kubernetes 集群上部署 MongoDB 数据库服务。
一、单节点部署
1,创建 NFS 存储
1
2
|
yum -y install nfs-utils yum -y install rpcbind |
1
|
mkdir -p /usr/local/k8s/mongodb/pv |
(3)编辑 /etc/exports 文件:
1
|
vi /etc/exports |
(4)在里面添加如下内容:
1
|
/usr/local/k8s/mongodb/pv *(rw,sync,no_root_squash) |
(5)保存退出后执行如下命令重启服务:
- sudo service nfs-server start
1
2
3
|
systemctl restart rpcbind systemctl restart nfs.service systemctl enable nfs.service |
(6)执行 exportfs -v 命令可以显示出所有的共享目录:
1
|
yum -y install nfs-utils |
(8)然后其他的 Node 节点上可执行如下命令(ip 为 Master 节点 IP)查看 Master 节点上共享的文件夹:
1
|
showmount -e 10.0.16.8 |
2、部署 MongoDB 应用服务
(1)首先创建一个名为 mongodb.yaml 的配置文件,文件里的内容如下:
# 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-pv
namespace: default
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-mongodb
nfs:
path: /usr/local/k8s/mongodb/pv
server: 10.0.16.8
---
# 创建pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mongodb-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs-mongodb
---
# 创建Service
apiVersion: v1
kind: Service
metadata:
name: mongodb-svc
namespace: default
spec:
type: NodePort
ports:
- name: mongo
port: 27017
targetPort: 27017
nodePort: 30017
protocol: TCP
selector:
app: mongodb
---
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-deploy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:4.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-pvc
mountPath: /data/db
volumes:
- name: mongo-pvc
persistentVolumeClaim:
claimName: mongodb-pvc
(2)接着执行如下命令对这个 YAML 文件进行部署:
1
|
kubectl apply -f mongodb.yaml |
(3)稍等片刻,执行如下命令可以查看是否创建成功:
1
2
3
|
kubectl get pv kubectl get pods kubectl get service |
3,访问测试
(1)我们使用客户端工具连接上我们刚刚创建的 MongoDB,然后创建一个 hangge 数据库以及 test 集合,并给集合中插入一些数据,说明 MongoDB 部署成功。
1
|
kubectl replace --force -f mongodb.yaml |
附:开启用户权限认证
(1)通过上面步骤部署好的 MongoDB 数据库无需用户名、密码即可连接,如果想要开启权限验证,只需要在 YAML 文件中入环境变量 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# 创建Deployment apiVersion: apps/v1 kind: Deployment metadata: name: mongo-deploy namespace: default spec: replicas: 1 selector: matchLabels: app: mongodb template: metadata: labels: app: mongodb spec: containers: - name: mongodb image: mongo:4.4 imagePullPolicy: IfNotPresent env: - name: MONGO_INITDB_ROOT_USERNAME value: root - name: MONGO_INITDB_ROOT_PASSWORD value: '12345' ports: - containerPort: 27017 volumeMounts: - name: mongo-pvc mountPath: /data/db volumes: - name: mongo-pvc persistentVolumeClaim: claimName: mongodb-pvc |
(2)注意如果之前已经使用没有鉴权的方式部署过 MongoDB,并且做了持久化,那么再改动 YMAL 文件重新部署是不会起作用的。这种情况我们可以进入执行如下命令进入容器:
1
|
kubectl exec -it mongo-deploy-8558c64994-pxcg5 /bin/bash |
(3)进入 mongodb 客户端:
1
|
mongo admin |
(4)执行如下命令创建用户即可:
1
2
3
4
5
6
7
8
|
use admin db.createUser( { user: "root" , pwd: "12345" , roles: [ { role: "userAdminAnyDatabase" , db: "admin" }, "readWriteAnyDatabase" ] } ) |
原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_3158.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了