来源: https://www.hangge.com/blog/cache/detail_3158.html
MongoDB 是一个基于分布式文件存储的数据库。我之前文件中介绍如何使用官方提供的安装包进行 MongoDB 数据库的安装(点击查看),以及如何通过 Docker 来快速搭建 MongoDB 数据库环境(点击查看)。本文接着演示如何在 Kubernetes 集群上部署 MongoDB 数据库服务。
一、单节点部署
1,创建 NFS 存储
NFS 存储主要是为了给 MongoDB 提供稳定的后端存储,当 MongoDB 的 Pod 发生故障重启或迁移后,依然能获得原先的数据。 (1)这里我选择在 master 节点创建 NFS 存储,首先执行如下命令安装 NFS:1 2 |
yum -y install nfs-utils
yum -y install rpcbind
|
(2)接着要创建共享文件夹,我们执行如下命令创建 1 个文件夹:
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 部署成功。
(2)接着执行如下命令强制重启 pod,重启后再次查看数据库可以发现数据没有丢失,说明数据持久化也是成功的。1 |
kubectl replace --force -f mongodb.yaml
|
附:开启用户权限认证
(1)通过上面步骤部署好的 MongoDB 数据库无需用户名、密码即可连接,如果想要开启权限验证,只需要在 YAML 文件中入环境变量 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 即可。
注意:由于我这里将密码设置为纯数字(12345),因此需要加上引号。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
标签:教程,name,创建,MongoDB,nfs,mongodb,K8s,mongo From: https://www.cnblogs.com/gaoyanbing/p/17694272.html