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