3.9.5 部署Mysql并持久化数据¶
1、创建一个 MySQL 的 PVC
# 定义PVC
[root@k8s-master01 ~]# vim mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: nfs-csi
# 创建PVC
[root@k8s-master01 ~]# kaf mysql-pvc.yaml
2、创建一个 MySQL 的 Deployment
[root@k8s-master01 ~]# vim deployment-mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/mysql:8.0.20
ports:
- containerPort: 3306
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 30
timeoutSeconds: 3
periodSeconds: 30
successThreshold: 1
failureThreshold: 2
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 30
timeoutSeconds: 3
periodSeconds: 30
successThreshold: 1
failureThreshold: 2
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql-data
dnsPolicy: ClusterFirst
3、创建MySQL,并查看启动状态
[root@k8s-master01 ~]# kaf deployment-mysql.yaml
# 验证
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
mysql-676759b6c-vlst9 1/1 Running 0 56s
4、MySQL 启动后,会在数据目录初始化基础数据,此时可以在后端存储中看到
[root@k8s-node02 ~]# ls /data/nfs/pvc-6affb118-b431-4f6b-94b8-afb8df4facd1/
auto.cnf client-cert.pem ib_logfile0 performance_schema undo_001
binlog.000001 client-key.pem ib_logfile1 private_key.pem undo_002
binlog.000002 '#ib_16384_0.dblwr' ibtmp1 public_key.pem
binlog.index '#ib_16384_1.dblwr' '#innodb_temp' server-cert.pem
ca-key.pem ib_buffer_pool mysql server-key.pem
ca.pem ibdata1 mysql.ibd sys
5、进入pod创建测试数据
[root@k8s-master01 ~]# k exec -it mysql-676759b6c-vlst9 -- bash
root@mysql-676759b6c-vlst9:/# mysql -uroot -p123456
mysql> create database zq;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zq |
+--------------------+
5 rows in set (0.00 sec)
6、删除pod测试pod数据是否会丢失,观察到因为配置了持久化,数据没有丢失
[root@k8s-master01 ~]# k delete po mysql-676759b6c-vlst9
# 验证,观察到数据仍然存在
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
mysql-676759b6c-6dnnj 1/1 Running 1 (48s ago) 50s
[root@k8s-master01 ~]# k exec -it mysql-676759b6c-6dnnj -- bash
root@mysql-676759b6c-6dnnj:/# mysql -uroot -p123456
mysql> show databases like 'zq';
+---------------+
| Database (zq) |
+---------------+
| zq |
+---------------+
1 row in set (0.01 sec)
7、环境复原
kubectl delete -f deployment-mysql.yaml -f mysql-pvc.yaml