• k8s 实战篇 - mysql部署 - 2


    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');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    查询表数据是否存在:
    在这里插入图片描述

    已成功创建表及插入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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    删除之后,要在执行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拥有这里定义的标签
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    mysql-k8s.yaml中,添加了如下配置:

              volumeMounts:   ## 指定在pod中数据的存储位置,跟宿主机位置映射
                - name: mysql-data
                  mountPath: /var/lib/mysql # mount的路径,是mysql的配置文件和默认库的位置.
          volumes:     ## 指定宿主机存储位置
            - name: mysql-data
              hostPath:
                path: /var/lib/mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    hostPath是所在宿主机文件路径并保存mysql配置文件和库的本地路径,用chmod命令给好权限。
    编写好脚本之后就可以执行命令kubectl apply -f mysql-k8s.yaml,数据库安装好之后执行sql脚本并查看数据是否执行成功。在删除pod,在执行创建,查看是否存在docker-demo及user数据。
    在这里插入图片描述

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

  • 相关阅读:
    5-13sqli暴力破解在sqli漏洞中的应用
    【区块链实战】——实现简易版dapp【对于用户年龄的获取和更新】
    Hqst百兆网络变压器H81601S高频参数 IR插入损耗 RL回波损耗 CTK串扰 CMRR共模抑制 实测值
    python-----发邮件
    NOIP2023模拟16联测37 D. 小猫吃火龙果
    海光异构智能计算专区上线飞桨AI Studio!
    ESP8266/ESP32 +1.3“ or 0.96“ IIC OLED指针时钟+数字时钟显示
    Remix 2.0 正式发布,现代化全栈Web框架!
    PHP数组的常见操作和常用函数
    vue-cil搭建项目
  • 原文地址:https://blog.csdn.net/exception_class/article/details/126591051