k8s部署mysql并使用nfs持久化数据
- 一、配置nfs服务器
- 1.1 修改配置文件
- 1.2. 载入配置
- 1.3. 检查服务配置
- 二、创建K8S资源文件
- 2.1 mysql-deployment.yml
- 2.2 mysql-svc.yml
一、配置nfs服务器
参考文章:
- pod使用示例https://cloud.tencent.com/developer/article/1914388
- nfs配置示例https://blog.csdn.net/weixin_43466725/article/details/88252404
- nfs介绍https://blog.csdn.net/qq_41959899/article/details/105899689
1.1 修改配置文件
连接nfs服务器,vim /etc/exports
修改exports文件内容:
说明:
/data/monitor-test/tracing/mysql_data
目录是用来作为数据持久化
的目录
每一条数据对应的ip是k8s的节点IP(node),把k8s的所有node都配置上去
1.2. 载入配置
执行命令exportfs -rv
载入配置
1.3. 检查服务配置
执行命令showmount -e
查看是否添加成功:
二、创建K8S资源文件
2.1 mysql-deployment.yml
创建mysql-deployment.yml
文件:
apiVersion: apps/v1 # apiserver的版本
kind: Deployment # 副本控制器deployment,管理pod和RS
metadata:
name: mysql-nfs # deployment的名称,全局唯一
namespace: kube-monitor # deployment所在的命名空间
labels:
app: mysql
spec:
replicas: 1 # Pod副本期待数量
selector:
matchLabels: # 定义RS的标签
app: mysql # 符合目标的Pod拥有此标签
strategy: # 定义升级的策略
type: RollingUpdate # 滚动升级,逐步替换的策略
template: # 根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql # Pod副本的标签,对应RS的Selector
spec:
nodeName: 192.168.1xx.1xx # 指定pod运行在的node
containers: # Pod里容器的定义部分
- name: mysql # 容器的名称
image: 192.168.116.12x:18080/monitor-test/mysql:5.7.42 # 容器对应的docker镜像
volumeMounts: # 容器内挂载点的定义部分
- name: time-zone # 容器内挂载点名称
mountPath: /etc/localtime # 容器内挂载点路径,可以是文件或目录
- name: nfs-mysql-data
mountPath: /var/lib/mysql # 容器内mysql的数据目录
- name: nfs-mysql-logs
mountPath: /var/log/mysql # 容器内mysql的日志目录
ports:
- containerPort: 3306 # 容器暴露的端口号
env: # 写入到容器内的环境容量
- name: MYSQL_ROOT_PASSWORD # 定义了一个mysql的root密码的变量
value: "root"
volumes: # 本地需要挂载到容器里的数据卷定义部分
- name: time-zone # 数据卷名称,需要与容器内挂载点名称一致
hostPath:
path: /etc/localtime # 挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
- name: nfs-mysql-data
nfs:
server: 192.168.116.1xx # nfs服务器地址
path: /data/monitor-test/tracing/mysql_data/data # nfs存放mysql数据的目录
- name: nfs-mysql-logs
nfs:
server: 192.168.116.1xx
path: /data/monitor-test/tracing/mysql_data/logs # nfs存入mysql日志的目录
执行命令创建deployment:kubectl apply -f mysql-deployment.yml
2.2 mysql-svc.yml
创建mysql-svc.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: mysql-nfs
namespace: kube-monitor
labels:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30014
selector:
app: mysql
执行命令创建svc:kubectl apply -f mysql-svc.yml