使用阿里雲Kubernetes實現MySQL數據持久化存儲--單實例

先決條件:

  1. 需要通過阿里雲容器服務創建Kubernetes創建集羣。

  2. 需要通過阿里雲NAS控制檯創建文件系統,並添加掛載點。如果你的Kubernetes集羣處於專有網絡,那麼掛載點推薦也添加到專有網絡並與Kubernetes處理同一專網。也可以經典網絡,或者其它專網,只要保證Kubernetes集羣網絡可以訪問到你創建的掛載點即可。一個文件系統可以創建多個掛載點。


操作步驟:

在容器服務管理界面點擊【存儲卷】,然後點擊【創建】。

image.png

選擇【NAS】類型,輸入【數據卷名】,輸入需要創建的空間【總量】,選擇【ReadWriteOnce】訪問模式,輸入【掛載點域名】,指定子目錄。

image.png

掛載點域名名:此域名從NAS控制檯獲取。

ReadWriteOnce:只能被單節點以讀寫方式掛載。

子目錄:默認爲根目錄,經測試需要指定一個名稱,否則數據庫在初始化的時候會報“chown: changing ownership of '/var/lib/mysql/': Operation not permitted”。


在容器服務管理界面點擊【存儲卷】,然後點擊【存儲聲明】,再點擊【創建】。

注意:需要將存儲聲明至你應用所需要的【名稱空間】,默認爲【default】,如果爲其它名稱空間需要自行創建。

image.png

選擇【NAS】,輸入【名稱】並選擇【已有存儲卷模式】,最後選擇剛創建的存儲卷即可。

image.png

通過命令行查看剛創建的PV與PVC。

[yuyan@registry:~]
$ kubectl get pv
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
mysql-data   20Gi       RWO            Retain           Bound    test/mysql-data   nas                     44s
[yuyan@registry:~]
$ kubectl get -n test pvc
NAME         STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-data   Bound    mysql-data   20Gi       RWO            nas            36s

創建資源清單配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: mysql-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-test
  template:
    metadata:
      namespace: test
      name: mysql-test
      labels:
        app: mysql-test
    spec:
      containers:
      - name: mysql-test
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "!gogen123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data

通過“pod.spec.volumes”創建一個volume,然後再通過“pod.spec.containers.volumeMounts”掛載我們創建的volume。


測試MySQL是否正常。

$ kubectl exec -ti -n test mysql-test-99bd46dbc-ttqkn -- mysql -uroot -p'!gogen123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database k8s;
Query OK, 1 row affected (0.02 sec)


測試數據持久化。

刪除剛創建的pod(將控制器一併刪除),然後再創建新的pod,這時候我們使用已存在的數據。

如果需要讓MySQL使用老的數據,只需要註釋掉 MYSQL_ROOT_PASSWORD 變量即可,新的資源清單配置文件如下。

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: mysql-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-test
  template:
    metadata:
      namespace: test
      name: mysql-test
      labels:
        app: mysql-test
    spec:
      containers:
      - name: mysql-test
        image: mysql:5.7
        #env:
        #- name: MYSQL_ROOT_PASSWORD
        #  value: "!gogen123"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql/
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data

登錄數據庫驗證,我們前面創建了一個新的庫,名爲:k8s。

$ kubectl exec -ti -n test mysql-test-75fbc84b9f-kpjwc -- mysql -uroot -p'!gogen123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| k8s                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)

mysql>


阿里雲NAS簡要使用說明。

選擇【地域】,點擊【文件系統】,再點擊 【創建文件系統】。

image.png

創建文件系統界面如下。

image.png

地域:默認爲剛選擇的地域,也可以更改。

存儲類型:數據庫的話推薦使用SSD,其它的視情況更改。

協議類型:NFS(用於Linux)。

可用區:隨意。

存儲包:如果有的話可以選擇(需要購買),用於抵扣存儲空間,如果沒有存儲包的話按量付費。


在創建好的文件系統後點擊 【添加掛載點】

image.png

界面如下。

image.png

掛載佔類型:如果放在公網的話,那就選擇經典網絡,如果放在VPC網絡的話就選擇專有網絡。如果你的Kubernetes在專網,那推薦選擇專網。在這個創建完成後還可以創建多個掛載點用於不同的網絡。

VPC網絡:如果選擇專有網絡的話纔有此選項,會自動加載,只需要選擇。

交換機:專有網絡交換機,同樣需要選擇專有網絡纔有,會自動加載,只需要選擇。

權限組:使用默認全部允許即可,如果沒有特殊要求。


點擊剛創建的文件系統【管理】進入下面的界面

image.png在Kubernetes添加NAS存儲卷時就需要此掛載點,是一個域名,將鼠標遷移到上面會顯示出使用mount命令掛載的方法。

也可以點擊【添加掛載點】繼續添加。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章