K8s - 安装部署MongoDB数据库教程1(单实例)
作者:hangge | 2022-01-25 08:10
MongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Kubernetes 集群上部署 MongoDB 数据库服务。
1,创建 NFS 存储
(3)编辑 /etc/exports 文件:
(4)在里面添加如下内容:
(5)保存退出后执行如下命令重启服务:
(6)执行 exportfs -v 命令可以显示出所有的共享目录:
(8)然后其他的 Node 节点上可执行如下命令(ip 为 Master 节点 IP)查看 Master 节点上共享的文件夹:
(2)接着执行如下命令对这个 YAML 文件进行部署:
(3)稍等片刻,执行如下命令可以查看是否创建成功:
(2)注意如果之前已经使用没有鉴权的方式部署过 MongoDB,并且做了持久化,那么再改动 YMAL 文件重新部署是不会起作用的。这种情况我们可以进入执行如下命令进入容器:
(3)进入 mongodb 客户端:
(4)执行如下命令创建用户即可:
一、单节点部署
1,创建 NFS 存储
NFS 存储主要是为了给 MongoDB 提供稳定的后端存储,当 MongoDB 的 Pod 发生故障重启或迁移后,依然能获得原先的数据。
(1)这里我选择在 master 节点创建 NFS 存储,首先执行如下命令安装 NFS:
yum -y install nfs-utils yum -y install rpcbind
(2)接着要创建共享文件夹,我们执行如下命令创建 1 个文件夹:
mkdir -p /usr/local/k8s/mongodb/pv
(3)编辑 /etc/exports 文件:
vi /etc/exports
(4)在里面添加如下内容:
/usr/local/k8s/mongodb/pv *(rw,sync,no_root_squash)
(5)保存退出后执行如下命令重启服务:
如果执行 systemctl restart nfs 报“Failed to restart nfs.service: Unit nfs.service not found.”错误,可以尝试改用如下命令:
- sudo service nfs-server start
systemctl restart rpcbind systemctl restart nfs systemctl enable nfs
(6)执行 exportfs -v 命令可以显示出所有的共享目录:
(7)而其他的 Node 节点上需要执行如下命令安装 nfs-utils 客户端:
yum -y install nfs-util
(8)然后其他的 Node 节点上可执行如下命令(ip 为 Master 节点 IP)查看 Master 节点上共享的文件夹:
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 文件进行部署:
kubectl apply -f mongodb.yaml
(3)稍等片刻,执行如下命令可以查看是否创建成功:
kubectl get pv kubectl get pods kubectl get service
3,访问测试
(1)我们使用客户端工具连接上我们刚刚创建的 MongoDB,然后创建一个 hangge 数据库以及 test 集合,并给集合中插入一些数据,说明 MongoDB 部署成功。(2)接着执行如下命令强制重启 pod,重启后再次查看数据库可以发现数据没有丢失,说明数据持久化也是成功的。
kubectl replace --force -f mongodb.yaml
附:开启用户权限认证
(1)通过上面步骤部署好的 MongoDB 数据库无需用户名、密码即可连接,如果想要开启权限验证,只需要在 YAML 文件中入环境变量 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 即可。注意:由于我这里将密码设置为纯数字(12345),因此需要加上引号。
# 创建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 文件重新部署是不会起作用的。这种情况我们可以进入执行如下命令进入容器:
kubectl exec -it mongo-deploy-8558c64994-pxcg5 /bin/bash
(3)进入 mongodb 客户端:
mongo admin
(4)执行如下命令创建用户即可:
use admin db.createUser( { user: "root", pwd: "12345", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] } )
全部评论(0)