先決條件:
需要通過阿里雲容器服務創建Kubernetes創建集羣。
需要通過阿里雲NAS控制檯創建文件系統,並添加掛載點。如果你的Kubernetes集羣處於專有網絡,那麼掛載點推薦也添加到專有網絡並與Kubernetes處理同一專網。也可以經典網絡,或者其它專網,只要保證Kubernetes集羣網絡可以訪問到你創建的掛載點即可。一個文件系統可以創建多個掛載點。
操作步驟:
在容器服務管理界面點擊【存儲卷】,然後點擊【創建】。
選擇【NAS】類型,輸入【數據卷名】,輸入需要創建的空間【總量】,選擇【ReadWriteOnce】訪問模式,輸入【掛載點域名】,指定子目錄。
掛載點域名名:此域名從NAS控制檯獲取。
ReadWriteOnce:只能被單節點以讀寫方式掛載。
子目錄:默認爲根目錄,經測試需要指定一個名稱,否則數據庫在初始化的時候會報“chown: changing ownership of '/var/lib/mysql/': Operation not permitted”。
在容器服務管理界面點擊【存儲卷】,然後點擊【存儲聲明】,再點擊【創建】。
注意:需要將存儲聲明至你應用所需要的【名稱空間】,默認爲【default】,如果爲其它名稱空間需要自行創建。
選擇【NAS】,輸入【名稱】並選擇【已有存儲卷模式】,最後選擇剛創建的存儲卷即可。
通過命令行查看剛創建的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簡要使用說明。
選擇【地域】,點擊【文件系統】,再點擊 【創建文件系統】。
創建文件系統界面如下。
地域:默認爲剛選擇的地域,也可以更改。
存儲類型:數據庫的話推薦使用SSD,其它的視情況更改。
協議類型:NFS(用於Linux)。
可用區:隨意。
存儲包:如果有的話可以選擇(需要購買),用於抵扣存儲空間,如果沒有存儲包的話按量付費。
在創建好的文件系統後點擊 【添加掛載點】
界面如下。
掛載佔類型:如果放在公網的話,那就選擇經典網絡,如果放在VPC網絡的話就選擇專有網絡。如果你的Kubernetes在專網,那推薦選擇專網。在這個創建完成後還可以創建多個掛載點用於不同的網絡。
VPC網絡:如果選擇專有網絡的話纔有此選項,會自動加載,只需要選擇。
交換機:專有網絡交換機,同樣需要選擇專有網絡纔有,會自動加載,只需要選擇。
權限組:使用默認全部允許即可,如果沒有特殊要求。
點擊剛創建的文件系統【管理】進入下面的界面
在Kubernetes添加NAS存儲卷時就需要此掛載點,是一個域名,將鼠標遷移到上面會顯示出使用mount命令掛載的方法。
也可以點擊【添加掛載點】繼續添加。