在平安科技接触到openshift技术后,出于对技术的热衷,决定写博客记录一下自己学习openshift的学习过程与所知所会,让更多的人能够从中受益。
这篇文章主要是介绍在openshift上如何安装mysql服务,并且后端使用持久存储保存数据,持久化存储方案使用NFS。
步骤一:提前创建好NFS共享目录
1.1、先创建存储文件夹
mkdir -p /pv/mysql
1.2、安装nfs相关软件包
yum -y install nfs-utils rpcbind
1.3 、修改创建好的目录权限
chown root:root /pv/ -R
1.4、设置目录导出权限
echo "/pv/mysql *(rw,sync,all_squash)" >> /etc/exports
1.5、启动rpcbind服务
systemctl start rpcbind
1.6、使用exportfs命令重新加载/etc/exports中的设置
exportfs -r
1.7、启动nfs服务
systemctl start nfs-server
通过以上步骤即完成了nfs共享存储的搭建。
步骤二、验证nfs共享存储是否搭建成功
2.1、暂时关闭SELinux
setenforce 0
2.2、挂载前面创建好的NFS目录,先创建挂载路径目录,然后使用mount命令进行挂载(注意:192.168.10.102替换成nfs共享目录所在的服务器ip)
mkdir -p /mnt/pv/mysql
mount 192.168.10.102:/pv/mysql /mnt/pv/mysql
2.2 通过挂载路径新建一个文件并查看
touch /mnt/pv/mysql/test
注意,执行touch /mnt/pv/mysql/test 会出现touch: cannot touch ‘/mnt/pv/mysql/test’: Permission denied异常,此时我们通过chmod命令改变/pv目录的权限
chmod -R 777 /pv
重新执行touch /mnt/pv/mysql/test创建文件成功
进入/pv/mysql 目录查看文件已经存在,此时验证了nfs共享目录创建成功且能成功挂载。
cd /pv/mysql
ls
2.3 删除测试文件并卸载挂载目录
rm -f /pv/mysql/test
umount /mnt/pv/mysql
通过以上步骤我们已经搭建好了nfs共享存储且验证可以正常使用。
步骤三、登录openshift平台创建mysql服务
(此处不对openshift安装进行详解,通过其他文件另行介绍)
3.1、通过Project->Add to Project->Deploy Image,进行第一次部署mysql服务
image name 处输入 daocloud.io/library/mysql:5.7
此处使用的是daocloud镜像市场的镜像进行部署,使用的镜像是mysql:5.7
daoclond访问网址: https://hub.daocloud.io/
*Name处填写mysql
Environment Variables(环境变量),输入MYSQL_ROOT_PASSWORD(参数名) root(参数值)
通过以上环境变量设置mysql的root账号密码为root
点击创建即可
稍等片刻,mysql pod将创建并成功运行。
通过以上web控制台界面化操作第一次部署运行的mysql服务是没有进行持久化存储的。后续步骤会对mysql服务关联NFS持久化存储。
步骤四、 创建 pv 和 pvc
4.1、创建pv
先新建一个yaml格式的空白文件
touch nfs-mysql-pv.yaml
然后插入以下pv定义文本(ip替换成自己服务器所在的ip)
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-mysql-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /pv/mysql
server: 191.168.10.102
readOnly: false
执行 oc create -f 命令创建pv
oc create -f nfs-mysql-pv.yaml
4.2 创建pvc
先新建一个yaml格式的空白文件
touch nfs-mysql-pvc.yaml
然后插入以下pvc定义文本
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-mysql-pvc-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
4.3 查看前两步创建的pv和pvc是否创建成功,且是否已经绑定成功
oc get pv
oc get pvc
红色框中的就是我们创建好的pv和pvc,且已经是Bound(绑定)状态。
步骤五,在openshift平台中为mysql部署配置增加存储
路径 applications->deployments->mysql->action->add storage
*Storage处选中我们前面创建好的pvc:nfs-mysql-pvc-claim
Mount Path:填写mysql数据存储目录 :/var/lib/mysql
Volume Name:填写卷名称,可以根据需求填写,此处我填写:mysql-nfs-volume
然后点击创建。
点击创建后出现如下提示:Volume mount in that path already exists. Please choose another mount path.
原因:这是因为我们第一次部署mysql时,mysql部署配置默认已经挂载了/var/lib/mysql目录。
解决方案:mount path修改为:/var/lib/mysql/data,然后点击创建。
然后通过路径:applications->deployments->mysql->action->edit yaml,修改volumeMounts的值
如下 mountPaht:/va/lib/mysql,并删掉mysql-1相关的volumeMount。
点击保存后,配置文件修改即可触发一次新的部署,此时还会部署失败。
通过以下命令查看创建好的nfs共享目录的权限
ls -lZ /pv/mysql -d
发现权限没问题,
由于默认情况下,SELinux不允许从pod写入远程NFS服务器。要使用SELinux在每个节点上强制写入NFS卷,需要执行一下命令
setsebool -P virt_use_nfs on
修改mysql dc 配置:增加
securityContext:
supplementalGroups:
- 0
点击save即可。
查看logs日志可看到mysql启动成功,如下为启动成功后的截图
查看挂载目录/pv/mysql,可看到mysql相关的文件数据
进入mysql pod中登录mysql
部署过程中遇到的常见问题解决方案:
1、确保创建pv时指定的nfs服务器ip正确
2、确保nfs共享目录没有文件。保证挂载的目录/pv/mysql为空目录,否则启动mysql会失败。
3、确保启动容器的系统账号有写入nfs的权限
可执行以下命令提高账号scc 权限
oc adm policy add-scc-to-user privileged -z default -n myproject
4、确保启动了rpcbind服务和nfs-server服务。
启动rpcbind服务命令
systemctl start rpcbind
启动nfs-server服务命令
systemctl start nfs-server