本篇以實際場景介紹如何發布無狀態工作負載,并連接有狀態數據庫,并配合使用持久存儲,在本片教程中,我們使用Local PV作為持久存儲介質,在生產使用中建議使用Ceph存儲。
創建持久存儲類
選擇Local存儲,如下:

創建持久存儲卷:在新建存儲卷界面,選擇第一步中創建的持久存儲類
選擇LocalPV所在節點以及LocalPV的目錄,這里LocalPV所在節點即想要把容器數據持久化到哪一個k8s節點上,LocalPV的目錄即是我們所選節點上的指定目錄。
注意此目錄需要在我們所選擇節點上存在,若不存在需要手動在改節點上創建目錄。
創建MySQL有狀態服務并使用持久存儲卷:

出現新建存儲卷界面,我們創建MySQL的流程如下:

點擊新建PVC后,我們需要格外注意下圖中的注意點。
StorageClasss名稱:必須和第二步中創建的持久存儲卷使用同一個StorageClass。
所需容量:這里選擇的容量不能超過第二步中創建的持久存儲卷的容量。
然后開始設置MySQL容器的參數,依次輸入MySQL容器名稱、選擇MySQL鏡像及版本號,需要格外注意掛載點的名稱和容器路徑。
其中數據卷選擇剛剛添加的數據卷。
MySQL容器的數據目錄為/Var/lib/mysql,所以容器路徑輸入這個目錄。

設置容器的資源參數及環境變量,MySQL容器正常運行我們必須要設置MYSQL_ROOT_PASSWORD這個環境變量,設置root用戶密碼,同時如果需要在MySQL容器啟動后幫我們創建一個database,我們可以使用MYSQL_DATABASE這個環境變量。
最后一步,我們為MySQL容器配置集群內訪問方式,所以我們選擇類型為ClusterIP。
注意服務端口可以直接與容器端口相同。
創建web無狀態工作負載并連接數據庫
1、web工作負載配置
我們使用的web工作負載使用的配置文件如下:
spring:
jpa:
show-sql: false
open-in-view: true
datasource:
driver-class-name:"com.mysql.cj.jdbc.Driver"
jdbc-url:
"jdbc:mysql://{MYSQL_HOST}:MYSQLHOST:{MYSQL_PORT}/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false"
username: "${MYSQL_USERNAME}"
password:"${MYSQL_PASSWORD}"
在上述配置中,我們通過讀取環境變量來設置應用所需的MySQL主機IP、端口、用戶名、密碼。
2、創建無狀態工作負載
這里我們只介紹無狀態工作負載的環境變量怎么設置,其他的參數配置與MySQL的類似:

查看MySQL容器(可選)
進入k8s集群,通過命令查看我們剛剛創建出來的MySQL容器。

執行命令進入這個MySQL容器。

執行MySQL命令連接MySQL客戶端,此處的參數分別為:-h后面的參數為我們在3.1步驟中創建的MySQL工作負載名稱,-u指定用戶為root用戶,-p參數指定root用戶的密碼,指定的密碼為我們在3.1中創建MySQL容器時指定的MYSQL_ROOT_PASSWORD這個環境變量的值。

查看MySQL中的database,即可看到我們在3.1中通過MYSQL_DATABASE這個環境變量創建的database。

驗證MySQL容器的持久存儲(可選)
創建一個database 容器化Web訪問MySQL(LocalPV)連續指定兩次exit命令分別退出MySQL客戶端和MySQL容器。

我們可以在容器界面上重新部署MySQL容器,然后查看數據是否仍然存在。