k8s mysql數據同步_K8s——MySQL實現數據持久化

1、搭建nfs存儲

[root@docker-k8s01 ~]# yum -y install nfs-utils

[root@docker-k8s01 ~]# mkdir /nfsdata/mysql -p

[root@docker-k8s01 ~]# cat /etc/exports

/nfsdata *(rw,sync,no_root_squash)

[root@docker-k8s01 ~]# systemctl restart nfs-server

[root@docker-k8s01 ~]# systemctl enable rpcbind

[root@docker-k8s01 ~]# systemctl enable nfs-server

[root@docker-k8s01 ~]# showmount -e

Export list for docker-k8s01:

/nfsdata *

2、創建PV

//編寫pv的yaml文件

kind: PersistenVolume

apiVersion: v1

metadata:

name: mysql-pv

spec:

accessModes:

- ReadWriteOnce

capacity:

storage: 1Gi

persistentVolumeReclaimPolicy: Retain

storageClassName: nfs

nfs:

path: /nfsdata/mysql

server: 192.168.171.151

//執行yaml文件

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pv.yaml

3、創建PVC

//編寫PVC的yaml文件

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: mysql-pvc

spec:

accessModes:

- ReadWriteOnce //訪問模式定義為只能以讀寫的方式掛載到單個節點

resources:

requests:

storage: 1Gi

storageClassName: nfs //這里指定關聯的PV名稱

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pvc.yaml

4、確認pv及pvc的狀態

//可以看到pv及pvc的狀態都是Bound

[root@docker-k8s01 mysql]# kubectl get pv

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

mysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 6m21s

[root@docker-k8s01 mysql]# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pvc Bound mysql-pv 1Gi RWO nfs 2m4s

5、創建pod+svc(service)

這個pod是提供的MySQL服務,并將其映射到宿主機,可以做和client端通信

//編寫deployment及service的yaml文件

---

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: mysql

spec:

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

- name: mysql

image: mysql:5.7

env: //配置變量,設置mysql的密碼

- name: MYSQL_ROOT_PASSWORD

value: 123.com

ports:

- containerPort: 3306

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql //MySQL容器的數據都是存在這個目錄的,要對這個目錄做數據持久化

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-pvc //指定pvc名稱

---

apiVersion: v1

kind: Service

metadata:

name: mysql

spec:

type: NodePort

ports:

- port: 3306

targetPort: 31111

selector:

app: mysql

[root@docker-k8s01 mysql]# kubectl apply -f mysql-pod.yaml

//確定pod運行正常

[root@docker-k8s01 mysql]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 60s

6、進入MySQL數據庫,添加測試數據

mysql> create database test;

mysql> use test

mysql> create table my_id(id int(11));

mysql> insert my_id values(1234);

mysql> select * from test.my_id; //確定數據添加成功

+------+

| id |

+------+

| 1234 |

+------+

7、手動刪除節點上的容器,驗證數據庫內的數據是否還存在

//查看Pod運行在哪個節點

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 7m6s 10.244.1.2 docker-k8s02

[root@docker-k8s02 ~]# docker ps // 查看mysql容器的id

//刪除mysql容器

[root@docker-k8s02 ~]# docker rm -f 7ba3f9d9ad35

//由于Deployment的保護策略,當刪除容器后,它會根據pod的yaml文件生成一個新的容器,但新容器的ID號就變了

//回到master節點,登錄到數據庫,查看數據是否還存在

[root@docker-k8s01 mysql]# kubectl exec -it mysql-6d898f8bcb-fc7bb -- mysql -uroot -p123.com

mysql> select * from test.my_id;

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

證明:當使用PV來做數據持久化的話,容器的新陳代謝并不會造成丟失數據的。

8、模擬MySQL容器所在的節點宕機,驗證數據是否會丟失

//查看容器所在節點

[root@docker-k8s01 mysql]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

mysql-6d898f8bcb-fc7bb 1/1 Running 0 13m 10.244.1.2 docker-k8s02

//將docker-k8s02節點宕機,動態查看Pod的狀態

//大概node01關機五分鐘左右,可以看到pod就被轉移到node02上運行了

[root@docker-k8s01 ~]# kubectl get pod -w

NAME READY STATUS RESTARTS AGE

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Running 0 22m

mysql-6d898f8bcb-fc7bb 1/1 Terminating 0 27m

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 Pending 0 0s

mysql-6d898f8bcb-2h47v 0/1 ContainerCreating 0 0s

mysql-6d898f8bcb-2h47v 1/1 Running 0 33s

9、client端訪問MySQL數據庫

因為我們在創建pod的yaml文件中,將其svc的端口映射類型是nodeport,所以,我們是可以通過訪問群集內的任意主機的31111端口(yaml文件中自定義的端口)來登錄到數據庫的。

[root@docker-k8s01 ~]# mysql -uroot -p123.com -h 192.168.171.151 -P 31111

MySQL [(none)]> select * from test.my_id; #查看數據

+------+

| id |

+------+

| 1234 |

+------+

1 row in set (0.01 sec)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287632.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機圖形學】實驗:C#語言采用GDI+定義筆刷并填充圖形完整實驗操作流程

一、實驗目的: 熟練掌握在.net環境下對筆刷的定義,并可用定義好的筆刷填充多邊形。 二、實驗準備: 學習在.net環境下GDI+所提供的5種筆刷類型,掌握定義筆刷的方法和填充圖形的函數,如FillRectange ( )、FillEllipse ( )等。 三、實驗內容: 在.net環境中設計一個窗體…

Android之提示Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed

1 問題 02-28 22:44:33.031 7379 7379 E AndroidRuntime: java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed 02-28 22:44:33.031 7379 7379 E AndroidRuntime: at android.graphics.Canvas.checkValidClipOp(C…

使用Java API的5個技巧

本文介紹了一些關于Java API安全和性能方面的簡單易用的技巧,其中包括保證API Key安全和開發Web Service方面中在框架方面選擇的一些建議。 程序員都喜歡使用API!例如為app應用構建API或作為微服務架構體系的一部分。當然,使用API的前提是能讓…

管道模式 pipe

先放一個圖,預則立嘛 PipelinePattern.rar 這里是 不完整的碼轉載于:https://www.cnblogs.com/ganmk--jy/p/5525897.html

《零基礎看得懂的C++入門教程 》——(7)小數組玩起來

一、學習目標 了解數組的使用方法了解一維數組的使用方法了解一維數組與循環的使用方法 目錄 預備第一篇,使用軟件介紹在這一篇,C與C使用的軟件是一樣的,查看這篇即可:《軟件介紹》 想了解編譯原理和學習方法點這篇&#xff0c…

SSO 方案演進

1背景介紹 隨著業務與技術的發展,現今比以往任何時候都更需要單點登錄 SSO 身份驗證。現在幾乎每個網站都需要某種形式的身份驗證才能訪問其功能和內容。隨著網站和服務數量的增加,集中登錄系統已成為一種必要。在本文中,我們將討論下 …

【計算機圖形學】實驗:VB.net環境下的圖形裁剪完整實驗操作流程

一、實驗目的: 熟練掌握在.net環境下對圖形的裁剪。 二、實驗準備: 學習圖形裁剪的基本算法,以及在.net環境下裁剪圖形的基本方法。 三、實驗內容: 在.net環境中利用裁剪圖形的基本方法對任意圖形進行裁剪。

UI之常用通過顏色值和透明度怎么得到最后的顏色值

1 、問題 UI給了顏色#000000,透明度是75%,我需要最終的顏色值。 2 、透明度色值表 00%FF(不透明) 5%F2 10%E5 15%D8 20%CC 25%BF 30%B2 35%A5 40%99 45%8c 50%7F 55%72 60%66 65%59 70%4c 75%3F 80%33 85%21 90%19 95%0c 100%00…

《零基礎看得懂的C++入門教程 》——(8)搞定二維數組與循環嵌套

一、學習目標 了解二維數組的使用方法了解循環嵌套的使用方法 目錄 預備第一篇,使用軟件介紹在這一篇,C與C使用的軟件是一樣的,查看這篇即可:《軟件介紹》 想了解編譯原理和學習方法點這篇,學習方法和一些原理C與C都…

mybatis模糊查詢不同寫法

工作中用到,寫三種用法吧,第四種為大小寫匹配查詢 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT(%, #{text}), %); 2. 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE %${text}%; 3. 程序中拼接 Java …

常見的Ubuntu命令30條(一)

Ubuntu命令是指在Ubuntu操作系統中用于執行各種任務和操作的命令行指令。這些命令可以用于管理系統、配置網絡、安裝軟件、瀏覽文件等。Ubuntu命令通常在終端(Terminal)應用程序中輸入并執行。 在Ubuntu中,有許多常用的命令和指令。以下是一…

【計算機圖形學】實驗:C#.net環境下的圖形變換完整實驗操作流程

一、實驗目的: 熟練掌握在.net環境下對圖形的變換方法。 二、實驗準備: 學習圖形變換的基本算法,如平移、旋轉、縮放等,以及在.net環境下變換圖形的基本方法。 三、實驗內容: 在.net環境中利用變換圖形的基本方法對圖形進行變換,包括平移、旋轉、縮放、對稱、復合變…

Android之給ImageView添加點擊效果

1 問題 給ImageView添加點擊效果 2 解決辦法 1&#xff09;、新建selector.xml文件 <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item android:drawable&…

python基礎知識縱覽(下)

python函數 1.函數作用 最大化代碼重用和最小化代碼冗余流程的分解2.函數基本概念 def創建對象并賦值給某一變量## 創建一個函數對象并賦值給fn_namedef fn_name(args1,args2,...,argsN): <statements>復制代碼def是可執行的代碼## 通過if語句判斷來做定義函數,def是實…

《零基礎看得懂的C++入門教程 》——(9)結構體原來如此

一、學習目標 了解C語言的結構體的使用方法了解C語言結構體的結構的賦值了解多種C語言結構體變量的賦值方法和取值方法 目錄 預備第一篇&#xff0c;使用軟件介紹在這一篇&#xff0c;C與C使用的軟件是一樣的&#xff0c;查看這篇即可&#xff1a;《軟件介紹》 想了解編譯原…

微信小程序python token驗證_微信小程序python 用戶認證

按流程圖來先通過wx.login()獲取code,再通過我們后臺配置的接口獲取openid和session_key// 登錄wx.login({success: res > {console.log(res)// 發送 res.code 到后臺換取 openId, sessionKey, unionIdwx.request({url: api.GET_OPENID, //data: {js_code: res.code},succes…

C#實用技巧之:將圖標打包進DLL并讀取

概述個人的項目界面有時候需要用到很多圖標&#xff0c;這些圖片可以建立一個文件夾單獨存放&#xff0c;但有時涉及到多臺設備部署的話&#xff0c;每臺設備都需要隨項目一起拷貝過去&#xff0c;如果忘記了界面顯示就會出問題&#xff0c;有沒有更好的辦法解決&#xff1f;有…

強制IE瀏覽器或WebBrowser控件使用指定版本顯示網頁

最近為了抓取淘寶的成交數據,用C#的WebBrowser控件開發了一個簡單的程序. 發現WebBrowser控件默認使用的版本是IE7的兼容模式.而淘寶的寶貝詳細頁居然對IE7的支持不是很好. 成交記錄無法顯示,而我本機安裝的是IE10,那么有沒有辦法使我的WebBrowser控件的使用的IE版本高點呢? 查…

【計算機圖形學】實驗:VB.net環境下的繪制貝賽爾(Bezier)自由曲線完整實驗操作步驟

一、實驗目的 熟練掌握在.net環境下繪制貝賽爾自由曲線。 二、實驗準備 學習生成貝賽爾自由曲線的基本算法,以及在.net環境下繪制貝賽爾自由曲線的基本方法(DrawBezier和DrawBeziers)。 三、實驗內容 在.net環境中繪制二次、三次貝賽爾曲線。 四、實驗過程及步驟 (包…

Git之撤銷add操作

1 問題 git add file或者git add folder錯了 2 解決辦法 git reset HEAD 如果后面什么都不跟的話 就是上一次add 里面的全部撤銷了 git reset HEAD XXX/XXX/XXX.java 就是對某個文件進行撤銷了 git reset HEAD XXX/XXX/XXX/. 就是對某個文件夾進行撤銷了