k8s mysql数据同步_K8s——MySQL实现数据持久化
1、搭建nfs存儲(chǔ)
[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、創(chuàng)建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
//執(zhí)行yaml文件
[root@docker-k8s01 mysql]# kubectl apply -f mysql-pv.yaml
3、創(chuàng)建PVC
//編寫PVC的yaml文件
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce //訪問(wèn)模式定義為只能以讀寫的方式掛載到單個(gè)節(jié)點(diǎn)
resources:
requests:
storage: 1Gi
storageClassName: nfs //這里指定關(guān)聯(lián)的PV名稱
[root@docker-k8s01 mysql]# kubectl apply -f mysql-pvc.yaml
4、確認(rèn)pv及pvc的狀態(tài)
//可以看到pv及pvc的狀態(tài)都是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、創(chuàng)建pod+svc(service)
這個(gè)pod是提供的MySQL服務(wù),并將其映射到宿主機(jī),可以做和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: //配置變量,設(shè)置mysql的密碼
- 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名稱
---
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運(yùn)行正常
[root@docker-k8s01 mysql]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
mysql-6d898f8bcb-fc7bb 1/1 Running 0 60s
6、進(jìn)入MySQL數(shù)據(jù)庫(kù),添加測(cè)試數(shù)據(jù)
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; //確定數(shù)據(jù)添加成功
+------+
| id |
+------+
| 1234 |
+------+
7、手動(dòng)刪除節(jié)點(diǎn)上的容器,驗(yàn)證數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)是否還存在
//查看Pod運(yùn)行在哪個(gè)節(jié)點(diǎn)
[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的保護(hù)策略,當(dāng)刪除容器后,它會(huì)根據(jù)pod的yaml文件生成一個(gè)新的容器,但新容器的ID號(hào)就變了
//回到master節(jié)點(diǎn),登錄到數(shù)據(jù)庫(kù),查看數(shù)據(jù)是否還存在
[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)
證明:當(dāng)使用PV來(lái)做數(shù)據(jù)持久化的話,容器的新陳代謝并不會(huì)造成丟失數(shù)據(jù)的。
8、模擬MySQL容器所在的節(jié)點(diǎn)宕機(jī),驗(yàn)證數(shù)據(jù)是否會(huì)丟失
//查看容器所在節(jié)點(diǎn)
[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節(jié)點(diǎn)宕機(jī),動(dòng)態(tài)查看Pod的狀態(tài)
//大概node01關(guān)機(jī)五分鐘左右,可以看到pod就被轉(zhuǎn)移到node02上運(yùn)行了
[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端訪問(wèn)MySQL數(shù)據(jù)庫(kù)
因?yàn)槲覀冊(cè)趧?chuàng)建pod的yaml文件中,將其svc的端口映射類型是nodeport,所以,我們是可以通過(guò)訪問(wèn)群集內(nèi)的任意主機(jī)的31111端口(yaml文件中自定義的端口)來(lái)登錄到數(shù)據(jù)庫(kù)的。
[root@docker-k8s01 ~]# mysql -uroot -p123.com -h 192.168.171.151 -P 31111
MySQL [(none)]> select * from test.my_id; #查看數(shù)據(jù)
+------+
| id |
+------+
| 1234 |
+------+
1 row in set (0.01 sec)
總結(jié)
以上是生活随笔為你收集整理的k8s mysql数据同步_K8s——MySQL实现数据持久化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql导出二进制日志_使用mysql
- 下一篇: 微信小程序python token验证_