k8s中的Mysql數據庫持久化存儲

?

一、配置:

環境:

CentOS7?

VMware

筆者配置了四臺虛擬機:

K8S-Master節點: 3GB內存? ?2核CPU ? 20GB硬盤空間

K8S-node1節點:? 2GB內存? ?2核CPU ? 30GB硬盤空間

K8S-node2節點:? 2GB內存? ?2核CPU ? 30GB硬盤空間

鏡像倉庫節點:? ? ? 2GB內存? ?2核CPU ? 50GB硬盤空間


二、節點規劃:

使用三臺虛擬機搭建K8S集群,使用一臺虛擬機搭建鏡像倉庫。

每臺虛擬機配置兩塊網卡,其中一塊為“NAT模式”,用于拉取鏡像等功能。

另外一塊網卡為“僅主機模式”,用于集群節點間的通信。歸劃如下:

K8s-master節點:

僅主機模式:10.10.10.200

NAT模式: ?192.168.200.130

K8S-node1節點:

僅主機模式:10.10.10.201

NAT模式: ?192.168.200.131

K8S-node2節點:

僅主機模式:10.10.10.202

NAT模式: ?192.168.200.132

鏡像倉庫節點:

僅主機模式:10.10.10.101

NAT模式: ?192.168.200.150


三、版本信息

Linux內核版本:

Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org)

(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) )

?#1 SMP Fri Apr 20 16:44:24 UTC 2018


K8s集群版本為1.15.0版本:


四、基于StatefulSet與PV/PVC的MySql持久化存儲實驗


1. 在每個節點安裝nfs服務



在“鏡像倉庫”節點,執行以下命令:

yum install -y nfs-common nfs-utils rpcbind

在k8s集群,執行以下命令:

yum install -y nfs-utils rpcbind


2. 在“鏡像倉庫”節點下,配置nfs服務器

mkdir /nfs_mysql

Chmod?777?/nfs_mysql/

(在測試環境中,為了不考慮用戶屬性,暫時賦予777權限,但在生產環境不推薦這樣做)

Chown?nfsnobody?/nfs_mysql/

echo “/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)”?>> /etc/exports

cat /etc/exports

/nfs_mysql?*(rw,no_root_squash,no_all_squash,sync)

systemctl start rpcbind

systemctl start nfs


3. 測試nfs服務是否可用

mkdir /test

showmount -e 10.10.10.101


可見/nfs_mysql *已暴露于共享目錄,接下來測試掛載是否可用:

在master節點下執行:

mount -t nfs 10.10.10.101:/nfs_mysql /test/

echo "hello-world">>/test/1.txt




在鏡像倉庫節點下查看1.txt是否存在,若存在則掛載成功:


可見nfs服務可以正常使用,接下來刪除test目錄和1.txt


在鏡像倉庫下:

[root@hub nfs_mysql]# rm -f 1.txt

在Master節點下:

[root@k8s-master ~]# umount /test/

[root@k8s-master ~]# rm -rf /test/


同理,依照以上步驟同時創建:(提供多個mysql副本進行掛載)

nfs_mysql1

nfs_mysql2

完成后需要重啟nfs服務

systemctl restart rpcbind

systemctl restart nfs

最終效果:



4. 將nfs封裝成pv

創建mysql_test文件夾,將yaml文件統一保存在此目錄下

mkdir mysql_test

cd mysql_test

vim mysql-pv.yml


mysql-pv.yml配置如下:


apiVersion: v1

kind: PersistentVolume

metadata:

??name: mysql-pv

spec:

??capacity:

????storage: 5Gi

??accessModes:

????- ?ReadWriteOnce

??persistentVolumeReclaimPolicy: Retain

??storageClassName: nfs

??nfs:

????path: /nfs_mysql

????server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

??name: mysql-pv1

spec:

??capacity:

????storage: 5Gi

??accessModes:

????- ?ReadWriteOnce

??persistentVolumeReclaimPolicy: Retain

??storageClassName: nfs

??nfs:

????path: /nfs_mysql1

????server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

??name: mysql-pv2

spec:

??capacity:

????storage: 5Gi

??accessModes:

????- ?ReadWriteOnce

??persistentVolumeReclaimPolicy: Retain

??storageClassName: nfs

??nfs:

????path: /nfs_mysql2

????server: 10.10.10.101



注意:

在k8s集群15版本中recycle回收策略已被刪除,只能用retain策略或者Delete策略。這里我們使用persistentVolumeReclaimPolicy: Retain

?


執行命令:

kubectl create -f mysql-pv.yml

kubectl get pv



如圖所示,即為Pv創建成功。


5. 部署MySQL,在mysql_test目錄下編寫mysql.yml,配置文件如下


apiVersion: v1

kind: Service

metadata:

??name: mysql

??labels:

????app: mysql

spec:

??ports:

??- port: 3306

????name: mysql

??clusterIP: None

??selector:

????app: mysql

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

??name: mysql

spec:

??selector:

????matchLabels:

??????app: mysql

??serviceName: "mysql"

??replicas: 3

??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

??volumeClaimTemplates:

??- metadata:

??????name: mysql-persistent-storage

????spec:

??????accessModes: ["ReadWriteOnce"]

??????storageClassName: "nfs"

??????resources:

????????requests:

??????????storage: 1Gi ?


執行以下命令,部署mysql服務:

kubectl create -f mysql.yml


如圖可知,mysql按StatefulSet依次創建了mysql-0 mysql-1 mysql-2

查看各個Pod部在哪個節點:



6. 通過創建臨時容器,使用MySQL客戶端發送測試請求給MySQL master節點


注意:

主機名為mysql-0.mysql;跨命名空間的話,主機名請使用mysql-0.mysql.[NAMESPACE_NAME].如果沒有指定命名空間,默認為default,即mysql-0.mysql.default。

??

這里筆者打算關閉node2節點來模擬node2宕機,來測試是否實現數據的持久化存儲,

所以我們向node2上的mysql1寫入數據。

?

執行以下命令,訪問mysql1:

kubectl run mysql-client --image=mysql:5.6 -it --rm --restart=Never -- mysql -h mysql-1.mysql.default -p?password





創建數據庫demo,并向messages表中寫入hello-world

CREATE DATABASE demo;?

CREATE TABLE demo.messages (message VARCHAR(250));?

INSERT INTO demo.messages VALUES ('hello-world');

如圖所示



接下來我們來關閉k8s-node2虛擬機,模擬宕機




查看nodes的運行狀態,可知node2的狀態已轉變為NotReady



一段時間后,k8s將Pod MySql -1遷移到節點k8s-node1



由于時間過長,筆者把三個Pod都刪除重啟后,驗證數據:



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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容