k8s怎么加mysql,k8s干嘛用的

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

我們提供的服務有:網站制作、成都做網站、微信公眾號開發、網站優化、網站認證、陵水黎族ssl等。為成百上千企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的陵水黎族網站制作公司

一、配置:

環境:

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服務恢復,數據完好無損!

如何訪問k8s集群內部署的mysql服務

雖然 kubernetes 社區一直在努力使得有狀態應用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩定的域名訪問和存儲訪問。但鑒于 MySQL 部署運維的多樣性和復雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰。

1、業務流量入口的配置方式

傳統虛擬機環境下,我們通過虛IP的方式,讓業務應用都配置事先定義的一個虛IP為鏈接數據庫的地址,然后由高可用服務保證虛IP始終能被路由到master數據庫。在kubernetes中,出現了一層網絡插件屏蔽了底層網絡拓撲,高可用服務管理虛IP的方式需要隨之適應調整,比如通過service結合標簽完成虛IP的漂移,但service本身是kubernetes提供的一項功能,其可靠性和性能都取決于kubernetes服務的穩定。以性能來說,service是kubeproxy組件通過配置iptables實現的,當iptables規則較多時不可避免的會產生時延,需要我們針對性的解決。

2、容器隔離帶來的監控視野問題

在 kubernetes 中,如果將 MySQL 制作為 container 運行在一個 pod 中,container 會將 MySQL 進程和運行環境隔離在一個單獨的 namespace 中。監控組件在獲取 MySQL 的一些 metirc 時,可能不得不進入與 MySQL 同一個 namespace 中,在部署和設計監控組件時需要考慮到這些限制。

3、存儲在 kubernetes 中,支持配置各種不同的存儲。

如果使用本地存儲 local persistent volume,則需要綁定 MySQL 在一個固定的節點,這就完全浪費了 kubernetes 靈活調度的天然優勢;而如果使用遠程共享存儲,確實是將 MySQL 進程與其存儲完全解耦,使得 MySQL 進程可以在任意節點調度,然而考慮到高 I/O 吞吐量的情況,就不是那么美好了。設計時需要考量遠程存儲是否能夠滿足 MySQL 的帶寬要求。

4、高可用/備份恢復

kubernetes 提供的 statefulset 控制器只能提供最基本的部署,刪除功能,無法實現完善的 MySQL 集群高可用/備份恢復操作。對于有狀態應用的部署,仍需要定制開發,所以多數公司提供了定制的 operator 來完成應用容器的管理。比如 etcd operator,MySQL operator,后文將為大家詳述我測試使用 MySQL operator 的一些記錄。

Kubernetes 部署 Mysql 8

mysql可以以docker的形式在集群內部署,也可以安裝在集群之外,以服務的形式部署到集群內。

(1)、如果是在集群內部署,可以啟動一個ReplicationController,用以對mysql pod進行監控,并同時啟動一個Service,用以集群訪問。

(2)、如果mysql是安裝在集群之外,那么可以啟動一個Endpoint和Service,將mysql引入集群之中。

下面分別對這兩種方式進行部署。

創建mysql-rc.yaml和mysql-svc.yaml,分別如下:

mysql-rc.yaml

mysql-svc.yaml

在mysql-rc.yaml中,image參數可以指定mysql的版本,如8.0.11、5.7.22等。這里省略了,表示用latest。另外,可以指定鏡像庫,這里使用阿里云鏡像庫,在安裝docker時進行了配置。env參數指定了mysql的root密碼。

在mysql-svc.yaml中,targetPort表示mysql pod中mysql窗口的目標端口,默認為3306,type類型為NodePort,表示將映射到本地端口,本地端口為nodePort: 30306。

接下來啟動ReplicationController和Service,執行以下命令:

啟動后可以查看mysql部署在了哪個node上,執行以下命令可以查看:

(6)、退出mysql和容器,執行quit;退出mysql,按ctrl+p后,再按ctrl+q從容器中返回node主機。

設置好mysql后,可以遠程連接node中的mysql,node的ip為127.0.0.1,映射的端口為30306,可以用navicat工具連接到這個myql。

網站標題:k8s怎么加mysql,k8s干嘛用的
網頁網址:http://m.kartarina.com/article4/hddioe.html

成都網站建設公司_創新互聯,為您提供商城網站ChatGPT面包屑導航網站建設標簽優化虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 未满十八18禁止免费无码网站| 无码国产69精品久久久久孕妇| 午夜福利无码不卡在线观看| 国产精品无码久久久久久| 亚洲中文字幕无码永久在线| 久久人妻av无码中文专区| 中文字幕无码日韩欧毛| 中文字幕AV中文字无码亚| 亚洲精品无码久久毛片波多野吉衣| 国模无码视频一区| 亚洲AV无码国产丝袜在线观看| 亚洲AV无码成人精品区狼人影院 | 亚洲va中文字幕无码| 无码专区中文字幕无码| 国产精品无码制服丝袜| 亚洲av永久无码精品秋霞电影秋| 精品无码综合一区| 无码少妇一区二区三区芒果| 精品一区二区三区无码免费视频| 亚洲色偷拍区另类无码专区| 亚洲av无码专区青青草原| 精品无码久久久久久午夜| 亚洲国产无套无码av电影| 精品无码av无码专区| 无码中文2020字幕二区| 四虎成人精品无码| 无码一区二区三区老色鬼| 亚洲乱亚洲乱妇无码麻豆| 亚洲成av人片不卡无码久久| 久久久久久久久免费看无码| 中文字幕乱偷无码av先锋蜜桃 | 中文字幕乱码无码人妻系列蜜桃| 无码亚洲成a人在线观看| 亚洲av无码专区在线观看下载| 久久久无码精品亚洲日韩蜜臀浪潮| 中文字幕无码免费久久9一区9| 亚洲人成无码网站久久99热国产| 无码日韩人妻AV一区二区三区| 国产aⅴ激情无码久久久无码| 国产精品va无码免费麻豆 | 国产成年无码v片在线|