时间:2021-07-01 10:21:17 帮助过:17人阅读
目录
我们接着之前的文档的架构规划进行下面的操作。
IP | 角色 |
---|---|
192.168.1.200 | k8s-master |
192.168.1.201 | k8s-node01 |
192.168.1.202 | k8s-node02 |
192.168.1.203 | k8s-store |
我们演示如何为 MySQL 数据库提供持久化存储,主要分为下面几个步骤:
我们 PV 的配置文件mysql-pv.yaml
如下:
- <code>apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: mysql-pv
- spec:
- capacity:
- storage: 1Gi
- accessModes:
- - ReadWriteOnce
- nfs:
- path: /data/volumes/mysql-pv
- server: 192.168.1.203</code>
创建 PV。
- <code>[root@master ~]# kubectl apply -f mysql-pv.yaml
- persistentvolume/mysql-pv created
- [root@master ~]# kubectl get pv
- NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
- mysql-pv 1Gi RWO Retain Available 7s</code>
PVC 的配置文件mysql-pvc.yaml
内容如下:
- <code>apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: mysql-pvc
- spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 1Gi</code>
创建 PVC。
- <code>[root@master ~]# kubectl apply -f mysql-pvc.yaml
- persistentvolumeclaim/mysql-pvc created
- [root@master ~]# kubectl get pvc
- NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
- mysql-pvc Bound mysql-pv 1Gi RWO 7s</code>
MySQL 的配置文件mysql.yaml
如下:
- <code>apiVersion: v1
- kind: Service
- metadata:
- name: mysql
- spec:
- ports:
- - port: 3306
- selector:
- app: mysql
- ---
- 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.6
- env:
- - name: MYSQL_ROOT_PASSWORD
- value: password
- ports:
- - name: mysql
- containerPort: 3306
- volumeMounts:
- - name: mysql-persistent-storage
- mountPath: /var/lib/mysql
- volumes:
- - name: mysql-persistent-storage
- persistentVolumeClaim:
- claimName: mysql-pvc</code>
PVC mysql-pvc
Bound 的 PV mysql-pv
将被 mount 到 MySQL 的数据目录 /var/lib/mysql
。
- <code>[root@master ~]# kubectl apply -f mysql.yaml
- service/mysql created
- deployment.extensions/mysql created
- [root@master ~]# kubectl get pod -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- mysql-7686899cf9-d4m42 1/1 Running 0 62s 10.244.2.17 node02 <none> <none></code>
MySQL 被部署到 k8s-node02
,下面通过客户端访问 Service mysql:
- <code>[root@master ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
- If you don‘t see a command prompt, try pressing enter.
- mysql></code>
我们在mysql
库中创建一个表myid
,然后在表里新增几条数据。
- <code>mysql> use mysql
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> create table myid( id int(4) );
- Query OK, 0 rows affected (0.04 sec)
- mysql> insert myid values( 111 );
- Query OK, 1 row affected (0.00 sec)
- mysql> select * from myid;
- +------+
- | id |
- +------+
- | 111 |
- +------+
- 1 row in set (0.00 sec)</code>
我们现在把 node02 机器关机,模拟节点宕机故障。
一段时间之后,Kubernetes 将 MySQL 迁移到 k8s-node01
。
- <code>[root@master ~]# kubectl get pod -o wide
- NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
- mysql-7686899cf9-8z6tc 1/1 Running 0 21s 10.244.1.19 node01 <none> <none>
- mysql-7686899cf9-d4m42 1/1 Terminating 0 23m 10.244.2.17 node02 <none> <none></code>
验证数据的一致性。
- <code>[root@master ~]# kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
- If you don‘t see a command prompt, try pressing enter.
- mysql> use mysql
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> select * from myid;
- +------+
- | id |
- +------+
- | 111 |
- +------+
- 1 row in set (0.00 sec)</code>
MySQL 服务恢复,数据也完好无损,我们可以可以在存储节点上面查看一下生成的数据库文件。
- <code>[root@datanode03 mysql-pv]# ll
- 总用量 110604
- -rw-rw---- 1 systemd-bus-proxy ssh_keys 56 12月 14 09:53 auto.cnf
- -rw-rw---- 1 systemd-bus-proxy ssh_keys 12582912 12月 14 10:15 ibdata1
- -rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 12月 14 10:15 ib_logfile0
- -rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 12月 14 09:53 ib_logfile1
- drwx------ 2 systemd-bus-proxy ssh_keys 4096 12月 14 10:05 mysql
- drwx------ 2 systemd-bus-proxy ssh_keys 4096 12月 14 09:53 performance_schema</code>
Kubernetes 之 MySQL 持久存储和故障转移(十一)
标签:cli Once 服务 cto port val quic match 文档