mysql部署
在
k8s 实战篇 - mysql部署 - 1
章节中,已经部署好了mysql。部署好之后需要使用到mysql的存储及查询数据等功能。但是mysql不可避免的会出现宕机或者误删除的情况。数据能持久保存下来的话,在下次mysql重启或者是重新部署的时候,就不需要在导入数据。这一章主要讲解如何存储数据到宿主机硬盘,在重新部署的时候加载宿主机硬盘数据。
1、准备初始化脚本信息
创建表空间
执行sql插入,以下sql摘自
Mybatis-plus快速开始
初始化脚本:
## 创建表空间 docker-demo
## create database docker-demo;
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
查询表数据是否存在:
已成功创建表及插入sql语句
2、删除pod并启动
## 删除mysql 的pod
PS C:\Users\smy1102> kubectl delete deploy mysql
deployment.apps "mysql" deleted
## 查看pod是否存在
PS C:\Users\smy1102> kubectl get pods
No resources found in default namespace.
删除之后,要在执行mysql部署脚本,查看之前的数据是否存在。可以在
kubernetes 实战篇 - mysql部署 - 1
中找到执行脚本
mysql-k8s.yaml
;之后执行端口跳转,使用mysql客户端进行链接。如图:
查看图片可知,之前我们创建的表空间及表都不见了。
3、对数据进行持久化,删除pod之后还能恢复数据
对数据进行持久化,删除pod之后还能恢复数据。首先,数据要有存储的位置,在删除pod之后,对存储位置的数据无影响。k8s所在的宿主机上的本地硬盘是可以持久化数据文件的。在进行mysql部署的时候,可以指定数据文件的存储位置,同时在重新创建pod的时候,加载宿主机的数据文件。相关脚本如下:
apiVersion: apps/v1
kind: Deployment # 副本控制器RC
metadata:
name: mysql #RC 的名称,全局唯一
namespace: default # 默认空间
spec:
replicas: 1 #Pod 副本的期待数量
selector:
matchLabels:
app: mysql # 符合目标的Pod拥有此标签
template: # 根据此模版创建Pod的副本
metadata:
labels:
app: mysql # Pod副本拥有的标签,对应RC的Selector
spec:
containers: # Pod的内容的定义部分
- name: mysql # 容器的名称
image: mysql # 容器对应的Docker Image
ports:
- containerPort: 3306 # 容器应用监听的端口号
env:
- name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码
value: "123456" # 设置mysql的初始化密码
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
hostPath:
path: /var/lib/mysql
---
apiVersion: v1
kind: Service # 表明是Kubernetes Service
metadata:
name: mysql # Service 的全局唯一名称
spec:
type: NodePort
selector:
app: mysql
ports: # Service 提供服务的端口
- port: 3306 # Service 对应的Pod拥有这里定义的标签
在
mysql-k8s.yaml
中,添加了如下配置:
volumeMounts: ## 指定在pod中数据的存储位置,跟宿主机位置映射
- name: mysql-data
mountPath: /var/lib/mysql # mount的路径,是mysql的配置文件和默认库的位置.
volumes: ## 指定宿主机存储位置
- name: mysql-data
hostPath:
path: /var/lib/mysql
hostPath
是所在宿主机文件路径并保存mysql配置文件和库的本地路径,用chmod命令给好权限。
编写好脚本之后就可以执行命令
kubectl apply -f mysql-k8s.yaml
,数据库安装好之后执行sql脚本并查看数据是否执行成功。在删除pod,在执行创建,查看是否存在docker-demo及user数据。
查询用户数据,存在说明已经进行数据的持久化了。