k8s 实战篇 – mysql部署 – 2

  • Post author:
  • Post category:mysql




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数据。

在这里插入图片描述

查询用户数据,存在说明已经进行数据的持久化了。



版权声明:本文为exception_class原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。