背景:
节点maser:192.168.153.100
node1:192.168.153.101
node2:192.168.153.102
部署要求:MySQL 8
存储:nsf
选择原因:部署简单,适合测试环境,能够提供多Pod共享存储的能力(支持 ReadWriteMany 访问模式)
一、安装配置nfs
1.在 Master 节点上安装并配置 NFS 服务器
yum -y install nfs-utils
2.创建共享目录并设置权限
mkdir -p /nfs/data/01
chmod 777 /nfs/data/01
3.配置 NFS 导出目录(编辑 /etc/exports 文件)
vim /etc/exports
在文件末尾添加以下行(集群网络段是 192.168.153.0/24,按实际虚拟网络修改):
/nfs_share 192.168.153.0/24(rw,sync,no_subtree_check,no_root_squash)
4.启动nfs并设置为开机自起
systemctl start nfs-server
systemctl enable nfs-server
5.在所有 Node 节点上安装 NFS 客户端
yum -y install nfs-utils
安装后,可以测试一下是否能挂载 Master 上的 NFS 共享,测试成功后再卸载。

二、部署mysql
1.创建mysql专用namespace,就叫mysql,隔离资源。
kubectl create namespace mysql
2.编写mysql-pv.yaml文件内容,要创建的pv对象名称:pv-1gi
vim mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-1gi
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
storageClassName: nfs # 存储类,具有相同存储类名称的pv和pvc才能进行
nfs:
path: /nfs/data/01
server: 192.168.153.100
3.创建pv对象
kubectl apply -v mysql-pv.yaml
4.查看创建的结果
5.创建持久卷声明PVC
声明存储大小为1Gb的PVC资源,k8s会根据storageClassName存储类名称找到匹配的PV对象进行绑定。
vim mysql-pvc.yaml
# 定义mysql的持久卷声明信息
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
# 存储类,具有相同存储类名称的pv和pvc才能进行绑定
storageClassName: nfs
6.创建pvc对象
kubectl apply -f mysql-pvc.yaml
7.查看创建pvc结果
8.创建Secret对象用来保存mysql的root用户密码
kubectl create secret generic mysql-root-password --from-literal=password=root -n tomcat
9.查看结果

10.创建mysql的deployment和service
vim mysql-svc.yaml
service使用NodePort类型,指定暴露的nodePort端口为31234
# 定义mysql的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
#value: "123456"
ports:
- containerPort: 3306
volumeMounts:
- name: mysqlvolume
# 使用pvc
persistentVolumeClaim:
claimName: mysql-pvc
---
#定义Mysql的service
apiVersion: v1
kind: Service
metadata:
labels:
app: svc-mysql
name: svc-mysql
namespace: mysql
spec:
selector:
app: mysql
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 31234
11.创建deployment,service
kubectl apply -f mysql-svc.yaml
12.查看结果

13.测试连接MySQL

以上连接成功!进入数据库。
接下来测试创建表后再删除实例在共享目录中数据是否还存在。
testtable是我新建的表

删除实例

testtable的数据还存在。

2万+

被折叠的 条评论
为什么被折叠?



