真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

k8s怎么部署mysql k8s怎么部署前后端應(yīng)用

K8S系列第十篇(一鍵部署MySQL主從復(fù)制)

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

龍泉驛網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

更多精彩文章,猛戳這里:kubernetes系列技術(shù)文檔

容器化 | 在 KubeSphere 中部署 MySQL 集群

本文將演示如何在 KubeSphere[1] 上部署 RadonDB MySQL on Kubernetes 2.1.2 ,快速實(shí)現(xiàn)高可用的 MySQL on K8s。

若已在 KubeSphere 部署過歷史版本 Operator,可以選擇如下方式更新到最新版本。

可任選一個(gè) RadonDB MySQL 配置示例[5] 部署,或自定義配置部署。

以 mysql_v1alpha1_mysqlcluster.yaml 模版為例,創(chuàng)建一個(gè) RadonDB MySQL 集群。

注意

未指定項(xiàng)目時(shí),集群將被默認(rèn)安裝在 kubesphere-controls-system 項(xiàng)目中。若需指定項(xiàng)目,安裝命令需添加 --namespace=project_name 。

預(yù)期結(jié)果

預(yù)期結(jié)果

在 demo-project 項(xiàng)目中,查看 RadonDB MySQL 集群狀態(tài)。

至此,完成在 KubeSphere 中部署 RadonDB MySQL 集群。

[1]:KubeSphere:

[2]:OpenPitrix:

[3]:創(chuàng)建操作:

[4]:項(xiàng)目網(wǎng)關(guān):

[5]:配置示例:

k8s安裝部署

K8s集群搭建

1 centos版本信息查看

[root@localhost ~]# uname -a

Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

k8s集群機(jī)器關(guān)閉防火墻

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

2 安裝必要的包

k8s集群安裝以下安裝包

[root@k8s-node ~]# yum -y install net-tools wget vim ntpd

[root@k8s-node ~]# systemctl enable ntpd

[root@k8s-node ~]# systemctl start ntpd

3配置hosts

[root@k8s-node ~]# cat /etc/hosts

127.0.0.1?? localhost localhost.localdomain localhost4 localhost4.localdomain4

::1???????? localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.248.141 k8s-master

192.168.248.142 k8s-node

4 部署master節(jié)點(diǎn)

4.1 Master節(jié)點(diǎn)安裝必要的安裝包

[root@k8s-master ~]# yum -y install etcd

4.2更改/etc/etcd/etcd.conf配置文件

[root@k8s-master etcd]# cat /etc/etcd/etcd.conf | grep -v "^#"

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS=""

ETCD_NAME="master"

ETCD_ADVERTISE_CLIENT_URLS=

4.3設(shè)置開機(jī)啟動(dòng)并驗(yàn)證狀態(tài)

[root@k8s-master ~]#systemctl enable etcd

[root@k8s-master ~]#systemctl start etcd

etcd檢查

[root@k8s_master ~]# etcdctl -C cluster-health

member 8e9e05c52164694d is healthy: got healthy result from cluster is healthy

[root@k8s_master ~]# etcdctl -C cluster-health

member 8e9e05c52164694d is healthy: got healthy result from cluster is healthy

5 安裝部署docker環(huán)境(略)

6 安裝kubernetes

[root@k8s_master ~]# yum install kubernetes

安裝過程中報(bào)錯(cuò)如下

Error: docker-ce conflicts with 2:docker-1.13.1-75.git8633870.el7.centos.x86_64

可以執(zhí)行如下命令解決

1、查看安裝過的docker:yum list installed | grep docker

2、卸載docker:yum remove -y?docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

3、刪除容器鏡像:rm -rf /var/lib/docker

再次安裝kubernetes,安裝成功,而且會(huì)自動(dòng)安裝docker

6.1修改apiserver服務(wù)的配置文件

[root@k8s-master kubernetes]# cat /etc/kubernetes/apiserver | grep -v "^#"

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBE_ETCD_SERVERS="--etcd-servers="

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

KUBE_API_ARGS=""

6.2修改config配置文件:

[root@k8s-master kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master="

設(shè)置開機(jī)啟動(dòng),開啟服務(wù)

[root@k8s-master ~]#systemctl enable kube-apiserver kube-controller-manager kube-scheduler docker

[root@k8s-master ~]#systemctl start kube-apiserver kube-controller-manager kube-scheduler docker

6.3查看服務(wù)端口:

[root@k8s-master ~]# netstat –tnlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address?????????? Foreign Address???????? State?????? PID/Program name???

tcp??????? 0????? 0 127.0.0.1:25??????????? 0.0.0.0:*?????????????? LISTEN????? 1273/master????????

tcp??????? 0????? 0 127.0.0.1:2380????????? 0.0.0.0:* ??????????????LISTEN????? 2126/etcd??????????

tcp??????? 0????? 0 0.0.0.0:111???????????? 0.0.0.0:*?????????????? LISTEN????? 571/rpcbind????????

tcp??????? 0????? 0 192.168.122.1:53??????? 0.0.0.0:*?????????????? LISTEN????? 1362/dnsmasq???????

tcp??? ????0????? 0 0.0.0.0:22????????????? 0.0.0.0:*?????????????? LISTEN????? 998/sshd???????????

tcp??????? 0????? 0 127.0.0.1:631?????????? 0.0.0.0:*?????????????? LISTEN????? 996/cupsd??????????

tcp6?????? 0????? 0 ::1:25????????????????? :::*???????????? ???????LISTEN????? 1273/master????????

tcp6?????? 0????? 0 :::4001???????????????? :::*??????????????????? LISTEN????? 2126/etcd??????????

tcp6?????? 0????? 0 :::6443???????????????? :::*??????????????????? LISTEN????? 3216/kube-apiserver

tcp6?????? 0? ????0 :::10251??????????????? :::*??????????????????? LISTEN????? 3222/kube-scheduler

tcp6?????? 0????? 0 :::2379???????????????? :::*??????????????????? LISTEN????? 2126/etcd??????????

tcp6?????? 0????? 0 :::10252??????????????? :::*??????????????????? LISTEN????? 3221/kube-controlle

tcp6?????? 0????? 0 :::111????????????????? :::*??????????????????? LISTEN????? 571/rpcbind????????

tcp6?????? 0????? 0 :::8080???????????????? :::*??????????????????? LISTEN????? 3216/kube-apiserver

tcp6?????? 0????? 0 :::22?????????????????? :::*??????????????????? LISTEN????? 998/sshd???????????

tcp6?????? 0????? 0 ::1:631???????????????? :::*??????????????????? LISTEN????? 996/cupsd?

7部署node節(jié)點(diǎn)

7.1安裝docker(略)安裝k8s(略)

7.2 Node節(jié)點(diǎn)主機(jī)做以下配置:

修改config配置文件

[root@k8s-node kubernetes]# cat /etc/kubernetes/config | grep -v "^#"

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master="

修改kubelet配置文件

[root@k8s-node kubernetes]# cat /etc/kubernetes/kubelet | grep -v "^#"

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_HOSTNAME="--hostname-override=192.168.248.142"

KUBELET_API_SERVER="--api-servers="

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

設(shè)置開機(jī)啟動(dòng)、開啟服務(wù)

[root@k8s_client1 ~]# systemctl enable kubelet kube-proxy

[root@k8s_client1 ~]# systemctl start kubelet kube-proxy

查看端口:

[root@k8s_client1 ~]# netstat –ntlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address?????????? Foreign Address???????? State?????? PID/Program name???

tcp??????? 0????? 0 127.0.0.1:25??????????? 0.0.0.0:*???????????? ??LISTEN????? 1277/master????????

tcp??????? 0????? 0 127.0.0.1:10248???????? 0.0.0.0:*?????????????? LISTEN????? 3246/kubelet???????

tcp??????? 0????? 0 127.0.0.1:10249???????? 0.0.0.0:*?????????????? LISTEN????? 3133/kube-proxy????

tcp??????? 0????? 0 0.0.0.0:111???????????? 0.0.0.0:*?????????????? LISTEN????? 575/rpcbind????????

tcp??????? 0????? 0 192.168.122.1:53??????? 0.0.0.0:*?????????????? LISTEN????? 1332/dnsmasq???????

tcp??????? 0????? 0 0.0.0.0:22????????????? 0.0.0.0:*?????????????? LISTEN????? 1000/sshd??????????

tcp??????? 0????? 0 127.0.0.1:631?????????? 0.0.0.0:*?????????????? LISTEN????? 998/cupsd??????????

tcp6?????? 0????? 0 ::1:25????????????????? :::*??????????????????? LISTEN????? 1277/master????????

tcp6?????? 0????? 0 :::4194???????????????? :::*??????????????????? LISTEN????? 3246/kubelet???????

tcp6?????? 0????? 0 :::10250??????????????? :::*??????????????????? LISTEN????? 3246/kubelet???????

tcp6?????? 0????? 0 :::10255??????????????? :::*????? ??????????????LISTEN????? 3246/kubelet???????

tcp6?????? 0????? 0 :::111????????????????? :::*??????????????????? LISTEN????? 575/rpcbind????????

tcp6?????? 0????? 0 :::22?????????????????? :::*??????????????????? LISTEN????? 1000/sshd??????????

tcp6?? ????0????? 0 ::1:631???????????????? :::*??????????????????? LISTEN????? 998/cupsd??????

Master上查看集群中的節(jié)點(diǎn)及節(jié)點(diǎn)狀態(tài)

[root@k8s-master kubernetes]# kubectl get node

NAME????????????? STATUS??? AGE

192.168.248.142?? Ready???? 2m

[root@k8s-master kubernetes]# kubectl -s get node

NAME????????????? STATUS??? AGE

192.168.248.142?? Ready???? 2m

kubernetes集群搭建完成。

在k8s集群中創(chuàng)建pod,如果出現(xiàn)如下錯(cuò)誤

其中最主要的問題是:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)

解決方案:

查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt (該鏈接就是上圖中的說明) 是一個(gè)軟鏈接,但是鏈接過去后并沒有真實(shí)的/etc/rhsm,所以需要使用yum安裝:

yum install *rhsm*

安裝完成后,執(zhí)行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

如果依然報(bào)錯(cuò),可參考下面的方案:

wget

rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

注釋:rpm2cpio命令用于將rpm軟件包轉(zhuǎn)換為cpio格式的文件

cpio命令主要是用來建立或者還原備份檔的工具程序,cpio命令可以復(fù)制文件到歸檔包中,或者從歸檔包中復(fù)文件。? ? ? ? ??

? ? ? ?-i ? 還原備份檔 ?

? ? ? ?-v? 詳細(xì)顯示指令的執(zhí)行過程

這兩個(gè)命令會(huì)生成/etc/rhsm/ca/redhat-uep.pem文件.

[root@k8s-node ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

在master節(jié)點(diǎn)新建pod并查看起狀態(tài)為正常

flannel是CoreOS提供用于解決Dokcer集群跨主機(jī)通訊的覆蓋網(wǎng)絡(luò)工具。它的主要思路是:預(yù)先留出一個(gè)網(wǎng)段,每個(gè)主機(jī)使用其中一部分,然后每個(gè)容器被分配不同的ip;讓所有的容器認(rèn)為大家在同一個(gè)直連的網(wǎng)絡(luò),底層通過UDP/VxLAN等進(jìn)行報(bào)文的封裝和轉(zhuǎn)發(fā)。

k8s本地構(gòu)建后臺(tái)開發(fā)環(huán)境

近期陸續(xù)遇到幾個(gè)問題,涉及到zk和kafka相關(guān)。為了學(xué)習(xí)zk和kafka等中間件,同時(shí)也更方便的程序,萌生了在本地部署mysql,zk,kafka集群的想法。畢竟集群維度的擴(kuò)容,啟停等操作沒有辦法在測試環(huán)境中執(zhí)行。

在云原生的背景下,使用k8s來部署這些中間件無疑是最方便的選擇之一,也可以順便學(xué)習(xí)一下k8s,于是有了這篇文章。使用k8s還有一個(gè)好處,只需寫好yaml文件,其他同學(xué)也可以快速復(fù)制這個(gè)環(huán)境。

本文不會(huì)可以介紹k8s相關(guān)的概念,這是一篇tutorial,重點(diǎn)在于可以快速的復(fù)刻。

雖然不刻意介紹k8s相關(guān)的概念,但是有些概念還是不得不提。k8s中服務(wù)分為有狀態(tài)的服務(wù)(stateful)和無狀態(tài)的服務(wù)(stateless),mysql、zk、kafka等都屬于有狀態(tài)的服務(wù)。我們要部署多節(jié)點(diǎn)的集群,而不是像使用docker似的直接拉起一個(gè)單節(jié)點(diǎn)服務(wù)。對(duì)這些細(xì)節(jié)感興趣的同學(xué),請閱讀k8s的官方文檔進(jìn)行學(xué)習(xí)。

k8s關(guān)于stateful的介紹和示例:

最后提一點(diǎn),學(xué)無止境,也要適可而止,重點(diǎn)還是放在測試業(yè)務(wù)上,比如測試集群節(jié)點(diǎn)down機(jī)后業(yè)務(wù)軟件的高可用設(shè)計(jì)等。

ok, let's go

部署mysql集群僅需按照 官方文檔 步驟操作即可,有如下點(diǎn)改動(dòng):

mysql-services.yaml

mysql-statefulset.yaml

執(zhí)行如下命令即可創(chuàng)建mysql集群

查看services列表,可看到有讀寫兩個(gè)services,其中可寫的集群外部可通過30001訪問。請注意cluster ip列都是k8s內(nèi)部訪問的IP,本地訪問IP地址使用127.0.0.1

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 none 443/TCP 25h

mysql NodePort 10.110.247.59 none 3306:30001/TCP 13m

mysql-read ClusterIP 10.108.247.87 none 3306/TCP 13m

在外部訪問方式:mysql -h127.0.0.1 -P30001 -uroot

參考這篇文檔:

kafka的這個(gè)鏡像給的配置較低,存在服務(wù)啟動(dòng)慢和健康檢查執(zhí)行時(shí)間長的問題,需要設(shè)置readinessProbe下的initialDelaySeconds和timeoutSeconds參數(shù),檢查間隔也調(diào)整為20s。

如何訪問k8s集群內(nèi)部署的mysql服務(wù)

雖然 kubernetes 社區(qū)一直在努力使得有狀態(tài)應(yīng)用成為一等公民,也推出了 statefulset 控制器支持 pod 的順序部署,穩(wěn)定的域名訪問和存儲(chǔ)訪問。但鑒于 MySQL 部署運(yùn)維的多樣性和復(fù)雜性,在 kubernetes 上部署 MySQL 仍然要面臨眾多挑戰(zhàn)。

1、業(yè)務(wù)流量入口的配置方式

傳統(tǒng)虛擬機(jī)環(huán)境下,我們通過虛IP的方式,讓業(yè)務(wù)應(yīng)用都配置事先定義的一個(gè)虛IP為鏈接數(shù)據(jù)庫的地址,然后由高可用服務(wù)保證虛IP始終能被路由到master數(shù)據(jù)庫。在kubernetes中,出現(xiàn)了一層網(wǎng)絡(luò)插件屏蔽了底層網(wǎng)絡(luò)拓?fù)洌呖捎梅?wù)管理虛IP的方式需要隨之適應(yīng)調(diào)整,比如通過service結(jié)合標(biāo)簽完成虛IP的漂移,但service本身是kubernetes提供的一項(xiàng)功能,其可靠性和性能都取決于kubernetes服務(wù)的穩(wěn)定。以性能來說,service是kubeproxy組件通過配置iptables實(shí)現(xiàn)的,當(dāng)iptables規(guī)則較多時(shí)不可避免的會(huì)產(chǎn)生時(shí)延,需要我們針對(duì)性的解決。

2、容器隔離帶來的監(jiān)控視野問題

在 kubernetes 中,如果將 MySQL 制作為 container 運(yùn)行在一個(gè) pod 中,container 會(huì)將 MySQL 進(jìn)程和運(yùn)行環(huán)境隔離在一個(gè)單獨(dú)的 namespace 中。監(jiān)控組件在獲取 MySQL 的一些 metirc 時(shí),可能不得不進(jìn)入與 MySQL 同一個(gè) namespace 中,在部署和設(shè)計(jì)監(jiān)控組件時(shí)需要考慮到這些限制。

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

如果使用本地存儲(chǔ) local persistent volume,則需要綁定 MySQL 在一個(gè)固定的節(jié)點(diǎn),這就完全浪費(fèi)了 kubernetes 靈活調(diào)度的天然優(yōu)勢;而如果使用遠(yuǎn)程共享存儲(chǔ),確實(shí)是將 MySQL 進(jìn)程與其存儲(chǔ)完全解耦,使得 MySQL 進(jìn)程可以在任意節(jié)點(diǎn)調(diào)度,然而考慮到高 I/O 吞吐量的情況,就不是那么美好了。設(shè)計(jì)時(shí)需要考量遠(yuǎn)程存儲(chǔ)是否能夠滿足 MySQL 的帶寬要求。

4、高可用/備份恢復(fù)

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

k8s中的Mysql數(shù)據(jù)庫持久化存儲(chǔ)

一、配置:

環(huán)境:

CentOS7?

VMware

筆者配置了四臺(tái)虛擬機(jī):

K8S-Master節(jié)點(diǎn): 3GB內(nèi)存? ?2核CPU ? 20GB硬盤空間

K8S-node1節(jié)點(diǎn):? 2GB內(nèi)存? ?2核CPU ? 30GB硬盤空間

K8S-node2節(jié)點(diǎn):? 2GB內(nèi)存? ?2核CPU ? 30GB硬盤空間

鏡像倉庫節(jié)點(diǎn):? ? ? 2GB內(nèi)存? ?2核CPU ? 50GB硬盤空間

二、節(jié)點(diǎn)規(guī)劃:

使用三臺(tái)虛擬機(jī)搭建K8S集群,使用一臺(tái)虛擬機(jī)搭建鏡像倉庫。

每臺(tái)虛擬機(jī)配置兩塊網(wǎng)卡,其中一塊為“NAT模式”,用于拉取鏡像等功能。

另外一塊網(wǎng)卡為“僅主機(jī)模式”,用于集群節(jié)點(diǎn)間的通信。歸劃如下:

K8s-master節(jié)點(diǎn):

僅主機(jī)模式:10.10.10.200

NAT模式: ?192.168.200.130

K8S-node1節(jié)點(diǎn):

僅主機(jī)模式:10.10.10.201

NAT模式: ?192.168.200.131

K8S-node2節(jié)點(diǎn):

僅主機(jī)模式:10.10.10.202

NAT模式: ?192.168.200.132

鏡像倉庫節(jié)點(diǎn):

僅主機(jī)模式:10.10.10.101

NAT模式: ?192.168.200.150

三、版本信息

Linux內(nèi)核版本:

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持久化存儲(chǔ)實(shí)驗(yàn)

1. 在每個(gè)節(jié)點(diǎn)安裝nfs服務(wù)

在“鏡像倉庫”節(jié)點(diǎn),執(zhí)行以下命令:

yum install -y nfs-common nfs-utils rpcbind

在k8s集群,執(zhí)行以下命令:

yum install -y nfs-utils rpcbind

2. 在“鏡像倉庫”節(jié)點(diǎn)下,配置nfs服務(wù)器

mkdir /nfs_mysql

Chmod?777?/nfs_mysql/

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

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服務(wù)是否可用

mkdir /test

showmount -e 10.10.10.101

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

在master節(jié)點(diǎn)下執(zhí)行:

mount -t nfs 10.10.10.101:/nfs_mysql /test/

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

在鏡像倉庫節(jié)點(diǎn)下查看1.txt是否存在,若存在則掛載成功:

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

在鏡像倉庫下:

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

在Master節(jié)點(diǎn)下:

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

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

同理,依照以上步驟同時(shí)創(chuàng)建:(提供多個(gè)mysql副本進(jìn)行掛載)

nfs_mysql1

nfs_mysql2

完成后需要重啟nfs服務(wù)

systemctl restart rpcbind

systemctl restart nfs

最終效果:

4. 將nfs封裝成pv

創(chuàng)建mysql_test文件夾,將yaml文件統(tǒng)一保存在此目錄下

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

執(zhí)行命令:

kubectl create -f mysql-pv.yml

kubectl get pv

如圖所示,即為Pv創(chuàng)建成功。

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 ?

執(zhí)行以下命令,部署mysql服務(wù):

kubectl create -f mysql.yml

如圖可知,mysql按StatefulSet依次創(chuàng)建了mysql-0 mysql-1 mysql-2

查看各個(gè)Pod部在哪個(gè)節(jié)點(diǎn):

6. 通過創(chuàng)建臨時(shí)容器,使用MySQL客戶端發(fā)送測試請求給MySQL master節(jié)點(diǎn)

注意:

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

這里筆者打算關(guān)閉node2節(jié)點(diǎn)來模擬node2宕機(jī),來測試是否實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ),

所以我們向node2上的mysql1寫入數(shù)據(jù)。

執(zhí)行以下命令,訪問mysql1:

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

創(chuàng)建數(shù)據(jù)庫demo,并向messages表中寫入hello-world

CREATE DATABASE demo;?

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

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

如圖所示

接下來我們來關(guān)閉k8s-node2虛擬機(jī),模擬宕機(jī)

查看nodes的運(yùn)行狀態(tài),可知node2的狀態(tài)已轉(zhuǎn)變?yōu)镹otReady

一段時(shí)間后,k8s將Pod MySql -1遷移到節(jié)點(diǎn)k8s-node1

由于時(shí)間過長,筆者把三個(gè)Pod都刪除重啟后,驗(yàn)證數(shù)據(jù):

MySQL服務(wù)恢復(fù),數(shù)據(jù)完好無損!


本文名稱:k8s怎么部署mysql k8s怎么部署前后端應(yīng)用
當(dāng)前鏈接:http://weahome.cn/article/hhjsid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部