关于helm部署mysql
如果您的kubernetes已有helm,那么部署mysql的步骤可用helm来简化,原先需要自己动手配置的deployment和service都已集成在chart中,今天就来实战通过helm部署mysql,并且将之前遇到的问题和解决方法列出来;
环境信息
- 硬件:三台CentOS 7.7服务器
- kubernetes:1.15
- helm:2.16.1
- mysql:5.7.14
关于helm的部署
kubernetes环境helm的部署和基本操作请参考《部署和体验Helm(2.16.1版本)》
下载chart包
- 执行helm search mysql看看chart仓库有没有mysql,如下图,红框中就是我们需要的chart:
![0084823ce79c1d3e9ee2d78a9c7a4482.png](https://img-blog.csdnimg.cn/img_convert/0084823ce79c1d3e9ee2d78a9c7a4482.png)
- 执行helm fetch stable/mysql,会在当前目录生成文件mysql-0.3.5.tgz
- 执行tar -zxvf mysql-0.3.5.tgz,解压后生成文件夹mysql
- 进入mysql文件夹,打开values.yaml文件,按需要进行设置
- 如下图所示,红框1可以选择mysql镜像的TAG,红框2来设置root账号的密码,注意密码的字符串要加双引号:
![4af0ba787f87d16053d480ca39d843d8.png](https://img-blog.csdnimg.cn/img_convert/4af0ba787f87d16053d480ca39d843d8.png)
- 下图红框1是对存储卷容量的需求,红框2是内存需求,红框3是CPU需求,请按照实际情况调整:
![9d8e5345dd322bdbb789f359132f6fdf.png](https://img-blog.csdnimg.cn/img_convert/9d8e5345dd322bdbb789f359132f6fdf.png)
- 如果您想对mysql做更多配置,就涉及到配置文件mysql.cnf,依然是在values.xml中配置,如下图红框所示,这里设置的是字符集:
![524cc14d0e91dcd81102ee987158e049.png](https://img-blog.csdnimg.cn/img_convert/524cc14d0e91dcd81102ee987158e049.png)
- 下图红框中是Service的设置,可见默认类型是CluesterIP,这个类型无法在外部访问,需要做修改:
![f86e7e6956620d0362466670d1dc09d4.png](https://img-blog.csdnimg.cn/img_convert/f86e7e6956620d0362466670d1dc09d4.png)
- 修改后的Service配置如下图红框所示,类型改成了NodePort,外部端口是32000:
![d61b8249ed0f8d8abf1c589fd83ad4a7.png](https://img-blog.csdnimg.cn/img_convert/d61b8249ed0f8d8abf1c589fd83ad4a7.png)
- 创建名为test001的namespace:
kubectl create namespace test001
- 接下来要配置的是msyql数据的存储,我们分两种情况讨论;
使用本机数据卷
- 如果您是在单机部署kubernetes,那么msyql数据存储在宿主机是最简单的方案
- 在宿主机创建一个文件夹,例如/root/k8s-mysql-data,给此文件夹读写权限
- 进入templates目录,打开deployment.yaml,在文件的最末尾可以看到存储的配置,如下图红框所示:
![4ce24d6f655cffd90cf33663ddc73909.png](https://img-blog.csdnimg.cn/img_convert/4ce24d6f655cffd90cf33663ddc73909.png)
- 上图红框中的内容,修改后如下图红框所示,名为data的数据卷是个本地文件夹:
![d382258c398974f4742197738df92d92.png](https://img-blog.csdnimg.cn/img_convert/d382258c398974f4742197738df92d92.png)
- 至此,配置完毕,下面一节是关于网络数据卷配置的,您要是用了本地存储可以跳过下一节"使用网络存储",进入部署msyql的阶段。
使用网络存储
如果您的kubernetes是集群环境,推荐使用NFS作为MySql的数据存储卷,具体操作如下:
- NFS的server端,在/etc/exports文件上配置MySql用的NFS文件夹时,其属性要用no_root_squash,如下图红框所示,不这么设置会在MySql启动时出现文件夹权限问题:
![c176fc6f71ddaad502e66403cf9f13e9.png](https://img-blog.csdnimg.cn/img_convert/c176fc6f71ddaad502e66403cf9f13e9.png)
- 上述配置完成后,执行命令exportfs -arv使配置生效
- 接下来准备PV,创建文件pv-mysql.yaml,内容如下,192.168.133.142是NFS的server地址,/usr/local/work/mysql是刚才设置的属性为no_root_squash的NFS文件夹:
apiVersion: v1kind: PersistentVolumemetadata: name: mysql namespace: test001spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle nfs: path: /usr/local/work/mysql server: 192.168.133.142
- 执行以下命令创建PV:
kubectl create -f pv-mysql.yaml
- 检查PV是否创建成功:
![70044eb4f06bc17f63e28b6181eed471.png](https://img-blog.csdnimg.cn/img_convert/70044eb4f06bc17f63e28b6181eed471.png)
- 存储准备完毕,可以开始部署MySql了
部署mysql
- 在values.yaml所在目录,执行以下操作即可部署mysql,使用的namespace是test001:
helm install --name-template mysql -f values.yaml . --namespace test001
- 检查pod创建是否成功:
![c95905048e4e5bd977625e7fb6dd5aac.png](https://img-blog.csdnimg.cn/img_convert/c95905048e4e5bd977625e7fb6dd5aac.png)
- 检查service是否正常:
![58566e0804d49120bac692f04c8dfa20.png](https://img-blog.csdnimg.cn/img_convert/58566e0804d49120bac692f04c8dfa20.png)
- 至此,MySql部署成功,使用了宿主机的32000端口,接下来远程连接到此MySql试试;
验证mysql
在另外一台电脑上远程连接MySql服务,我这里是在一台Ubuntu上用mycli工具连接的,MySql宿主机IP地址是192.168.133.149,端口是32000,密码123456,连接和验证操作如下图所示:
![010bbc04c498d32dc79a8f97a14aca84.png](https://img-blog.csdnimg.cn/img_convert/010bbc04c498d32dc79a8f97a14aca84.png)
欢迎关注公众号:程序员欣宸
![bd27451b90999ded063e36d3881a64e3.png](https://img-blog.csdnimg.cn/img_convert/bd27451b90999ded063e36d3881a64e3.png)