K8S脈絡整理(013)-2MySQL如何使用PV和PVC


 MySQL如何使用PV和PVC

本節演示如何為 MySQL 數據庫提供持久化存儲,步驟為:

  1. 創建 PV 和 PVC。
  2. 部署 MySQL。
  3. 向 MySQL 添加數據。
  4. 模擬節點宕機故障,Kubernetes 將 MySQL 自動遷移到其他節點。
  5. 驗證數據一致性。

首先創建 PV 和 PVC,配置如下:

mysql-pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    path: /nfsdata/mysql-pv
    server: 172.28.2.210
mysql-pv.yml

749.png

mysql-pvc.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs
mysqlpvc.yml

750.png

創建 mysql-pv 和 mysql-pvc

751.png

接下來部署 MySQL,配置文件如下:

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.6
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
mysql.yml

752.png

PVC mysql-pvc Bound 的 PV mysql-pv 將被 mount 到 MySQL 的數據目錄 var/lib/mysql

753.png

MySQL 被部署到 k8s-node2,下面通過客戶端訪問 Service mysql

kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword

754.png

更新數據庫:

755.png

① 切換到數據庫 mysql。

② 創建數據庫表 my_id。

③ 插入一條數據。

④ 確認數據已經寫入。

關閉 k8s-node2,模擬節點宕機故障。

756.png

一段時間后,Kubernetes 將 MySQL 遷移到 k8s-node1

757.png

驗證數據的一致性:

758.png

MySQL 服務恢復,數據也完好無損。

小結

本章我們討論了 Kubernetes 如何管理存儲資源。

emptyDir 和 hostPath 類型的 Volume 很方便,但可持久性不強,Kubernetes 支持多種外部存儲系統的 Volume。

PV 和 PVC 分離了管理員和普通用戶的職責,更適合生產環境。

我們還學習了如何通過 StorageClass 實現更高效的動態供給。

最后,我們演示了如何在 MySQL 中使用 PersistentVolume 實現數據持久性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM