您好,登錄后才能下訂單哦!
本文主要給大家簡(jiǎn)單講講搭建k8s集群實(shí)現(xiàn)MySQL數(shù)據(jù)持久化,相關(guān)專(zhuān)業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書(shū)籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望搭建k8s集群實(shí)現(xiàn)MySQL數(shù)據(jù)持久化這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。
為了方便操作,我直接在master上搭建nfs存儲(chǔ)。
[root@master ~]# yum -y install nfs-utils [root@master ~]# systemctl enable rpcbind [root@master lv]# mkdir -p /nfsdata/mysql [root@master ~]# vim /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@master ~]# systemctl start nfs-server [root@master ~]# systemctl enable nfs-server [root@master ~]# showmount -e Export list for master: /nfsdata *
[root@master lv]# vim mysql-pv.yaml #編寫(xiě)pv的yaml文件 kind: PersistentVolume apiVersion: v1 metadata: name: mysql-pv spec: accessModes: - ReadWriteOnce #訪問(wèn)模式定義為只能以讀寫(xiě)的方式掛載到單個(gè)節(jié)點(diǎn) capacity: storage: 1Gi persistentVolumeReclaimPolicy: Retain storageClassName: nfs nfs: path: /nfsdata/mysql server: 192.168.20.6 [root@master lv]# kubectl apply -f mysql-pv.yaml #執(zhí)行yaml文件
[root@master lv]# vim mysql-pvc.yaml #編寫(xiě)pvc的yaml文件 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: nfs #這里指定關(guān)聯(lián)的PV名稱(chēng) [root@master lv]# kubectl apply -f mysql-pvc.yaml #執(zhí)行yaml文件
至此,PV和PVC的狀態(tài)類(lèi)應(yīng)該都是Bound。
[root@master lv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 5m8s [root@master lv]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql-pvc Bound mysql-pv 1Gi RWO nfs 60s
這個(gè)pod是提供的MySQL服務(wù),并將其映射到宿主機(jī),可以做和client端通信。
這里我將pod和svc的yaml文件寫(xiě)在同一個(gè)文件中。
[root@master lv]# vim mysql-pod.yaml #編寫(xiě)pod的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: #以下是設(shè)置MySQL數(shù)據(jù)庫(kù)的密碼 - name: MYSQL_ROOT_PASSWORD value: 123.com ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql #MySQL容器的數(shù)據(jù)都是存在這個(gè)目錄的,要對(duì)這個(gè)目錄做數(shù)據(jù)持久化 volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc #指定pvc的名稱(chēng) --- #以下是創(chuàng)建svc的yaml文件 apiVersion: v1 kind: Service metadata: name: mysql spec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 31111 selector: app: mysql selector: app: mysql [root@master lv]# kubectl apply -f mysql-pod.yaml #執(zhí)行yaml文件 [root@master lv]# kubectl get pod #確定pod運(yùn)行正常 NAME READY STATUS RESTARTS AGE mysql-6d898f8bcb-lhqxb 1/1 Running 0 51s
[root@master lv]# kubectl exec -it mysql-6d898f8bcb-lhqxb -- mysql -uroot -p123.com mysql> create database test; mysql> use test; mysql> create table my_id(id int(4)); mysql> insert my_id values(9527); mysql> select * from my_id; #確認(rèn)有數(shù)據(jù)存在
[root@master lv]# kubectl get pod -o wide #查看pod運(yùn)行在哪個(gè)節(jié)點(diǎn) NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE mysql-6d898f8bcb-cz8gr 1/1 Running 0 10m 10.244.1.3 node01 #我這是運(yùn)行在node01節(jié)點(diǎn),現(xiàn)在去node01節(jié)點(diǎn)手動(dòng)將其容器刪除 [root@node01 ~]# docker ps #查看MySQL容器的ID [root@node01 ~]# docker rm -f 1a524e001732 #將MySQL的容器刪除 #由于Deployment的保護(hù)策略,當(dāng)刪除容器后,它會(huì)根據(jù)pod的yaml文件生成一個(gè)新的容器,但新容器的ID號(hào)就變了 #回到master節(jié)點(diǎn),登錄到數(shù)據(jù)庫(kù),查看數(shù)據(jù)是否還存在 [root@master lv]# kubectl exec -it mysql-6d898f8bcb-cz8gr -- mysql -uroot -p123.com mysql> select * from test.my_id; #數(shù)據(jù)還在,OK +------+ | id | +------+ | 1996 | +------+ 1 row in set (0.01 sec)
至此,即可證明,當(dāng)使用PV來(lái)做數(shù)據(jù)持久化的話,容器的新陳代謝并不會(huì)造成丟失數(shù)據(jù)的。
[root@master lv]# kubectl get pod -o wide #查看容器所在節(jié)點(diǎn),我這里還是在node01 #然后我這里將node01關(guān)機(jī),然后動(dòng)態(tài)查看pod的狀態(tài) [root@master lv]# kubectl get pod -o wide -w #動(dòng)態(tài)查看pod的狀態(tài) #大概node01關(guān)機(jī)五分鐘左右,可以看到pod就被轉(zhuǎn)移到node02上運(yùn)行了。 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01 <none> <none> mysql-6d898f8bcb-cz8gr 1/1 Running 0 20m 10.244.1.3 node01 <none> <none> mysql-6d898f8bcb-cz8gr 1/1 Terminating 0 25m 10.244.1.3 node01 <none> <none> mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s <none> <none> <none> <none> mysql-6d898f8bcb-gp4t5 0/1 Pending 0 0s <none> node02 <none> <none> mysql-6d898f8bcb-gp4t5 0/1 ContainerCreating 0 0s <none> node02 <none> <none> mysql-6d898f8bcb-gp4t5 1/1 Running 0 1s 10.244.2.4 node02 <none> <none>
因?yàn)槲覀冊(cè)趧?chuàng)建pod的yaml文件中,將其svc的端口映射類(lèi)型是nodeport,所以,我們是可以通過(guò)訪問(wèn)群集內(nèi)的任意主機(jī)的31111端口(yaml文件中自定義的端口)來(lái)登錄到數(shù)據(jù)庫(kù)的。如下:
[root@master lv]# mysql -uroot -p123.com -h 192.168.20.8 -P 31111 MySQL [(none)]> select * from test.my_id; #查看數(shù)據(jù) +------+ | id | +------+ | 1996 | +------+ 1 row in set (0.01 sec)
搭建k8s集群實(shí)現(xiàn)MySQL數(shù)據(jù)持久化就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專(zhuān)業(yè)知識(shí)分享給大家的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。