作者:超级小豆丁

http://www.mydlq.club/article/75

目录

  • 简介

  • Mysql 参数配置

    • 创建 ConfigMap 存储 Mysql 配置文件

    • 通过 Kubectl 工具部署 ConfigMap

  • Mysql 数据存储

    • 创建 PV、PVC 绑定 Mysql 存储空间

    • 通过 Kubectl 工具部署 PV、PVC

  • Kubernetes 部署 Mysql

    • 创建 Deployment 部署 Mysql

    • 通过 Kubectl 工具部署 PV、PVC

  • 测试 Mysql 是否能够正常使用


系统环境:

  • Mysql 版本:8.0.19

  • Kubernetes 版本:1.17.4

  • 操作系统版本:CentOS 7.8

一、简介

Mysql 是我们常用的关系型数据库,在项目开发、测试、部署到生成环境时,经常需要部署一套 Mysql 进行数据存储。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 Mysql 数据库,当然,部署的是单节点模式,并非用于生产环境的主从或集群模式。

单节点的 Mysql 部署简单,且配置存活探针,能保证快速检测 Mysql 是否可用,当不可用时快速进行重启。

二、Mysql 参数配置

在使用 Kubernetes 部署应用后,一般会习惯与将应用的配置文件外置,用 ConfigMap 存储,然后挂载进入镜像内部。这样,只要修改 ConfigMap 里面的配置,再重启应用就能很方便就能够使应用重新加载新的配置,很方便。

创建 ConfigMap 存储 Mysql 配置文件

创建 Kubernetes 的 ConfigMap 资源,用于存储 Mysql 的配置文件 my.cnf 内容:

mysql-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: mysql-configlabels:app: mysql
data:my.cnf: |-[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld] max_connections = 2000secure_file_priv=/var/lib/mysqlsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

通过 Kubectl 工具部署 ConfigMap

通过 kubectl 工具部署 Kubernetes ConfigMap 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

$ kubectl create -f mysql-config.yaml -n mydlqcloud

三、Mysql 数据存储

Kubernetes 部署的应用一般都是无状态应用,部署后下次重启很可能会漂移到不同节点上,所以不能使用节点上的本地存储,而是徐亚网络存储对应用数据持久化,PV 和 PVC 是 Kubernetes 用于与储空关联的资源,可与不同的存储驱动建立连接,存储应用数据,所以接下来我们要创建 Kubernetes PV、PVC 资源。

PV、PVC 资料可以参考:

http://www.mydlq.club/article/38/

创建 PV、PVC 绑定 Mysql 存储空间

PV 支持多种存储驱动,不同存储驱动的 PV 配置方式是不同的,需要根据你的存储系统来配置 PV 参数。这里用的是 NFS 存储(共享网络文件存储系统),可以按照以下方式进行配置:

mysql-storage.yaml

## PV
apiVersion: v1
kind: PersistentVolume
metadata:name: mysqllabels:app: mysql             #设置 pv 的 label 标签
spec:capacity:          storage: 50Gi          #设置 pv 存储资源大小 accessModes:       - ReadWriteOncemountOptions:- hard- nfsvers=4.1    nfs:                     #指定使用 NFS 存储驱动server: 192.168.2.11   #指定 NFS 服务器 IP 地址path: /nfs/mysql       #指定 NFS 共享目录的位置,且需提前在该目录中创建 mysql 目录persistentVolumeReclaimPolicy: Retain
---
## PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: mysql
spec:resources:requests:storage: 50Gi        #设置 pvc 存储资源大小accessModes:- ReadWriteOnceselector:matchLabels:app: mysql           #根据 Label 选择对应 PV

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Kubernetes PV、PVC 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

$ kubectl create -f mysql-storage.yaml -n mydlqcloud

四、Kubernetes 部署 Mysql

创建 Deployment 部署 Mysql

创建用于 Kubernetes Deployment 来配置部署 Mysql 的参数,需要配置 Mysql 的镜像地址、名称、版本号,还要配置其 CPU 与 Memory 资源的占用,通过环境变量配置 Mysql 的 root 用户默认密码,配置探针监测应用可用性,配置 Volume 挂载之前创建的 PV、PVC、ConfigMap 资源等等,内容如下:

mysql-deploy.yaml

## Service
apiVersion: v1
kind: Service
metadata:name: mysqllabels:app: mysql
spec:type: NodePortports:- name: mysqlport: 3306targetPort: 3306nodePort: 30336selector:app: mysql
---
## Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysql
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:     containers:- name: mysqlimage: mysql:8.0.19ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORD    ## 配置Root用户默认密码value: "123456"resources:limits:cpu: 2000mmemory: 512Mirequests:cpu: 2000mmemory: 512MilivenessProbe:initialDelaySeconds: 30periodSeconds: 10timeoutSeconds: 5successThreshold: 1failureThreshold: 3exec:command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]readinessProbe:  initialDelaySeconds: 10periodSeconds: 10timeoutSeconds: 5successThreshold: 1failureThreshold: 3exec:command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]volumeMounts:- name: datamountPath: /var/lib/mysql- name: configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnf- name: localtimereadOnly: truemountPath: /etc/localtimevolumes:- name: datapersistentVolumeClaim:claimName: mysql- name: config      configMap:name: mysql-config- name: localtimehostPath:type: Filepath: /etc/localtime

参数简介:

  • ports: 配置镜像映射端口。

  • env: 镜像环境变量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 镜像用于配置 root 用户默认密码变量。

  • resources: 配置 CPU、Memory 资源限制,可以通过配置该值来配置 Pod 的 QoS 级别。

  • livenessProbe: 配置存活探针,定时检测 Mysql 应用运行状态,如果检测到 Mysql 挂掉将进行重启操作。

  • readinessProbe: 配置就绪探针,定时检测 Mysql 应用启动状态,如果启动成功将允许流量涌入,启动失败将进行重启操作。

  • command: 探针执行探测时执行的探测命令。

  • volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。

  • volumes: 存储卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存储,需要配置 name 值与 VolumeMounts 进行绑定。

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Deployment 来创建 Msyql,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

$ kubectl create -f mysql-deploy.yaml -n mydlqcloud

五、测试 Mysql 是否能够正常使用

接下来启动个 Mysql 镜像,使用里面的 Msyql 客户端工具,对部署在 Kubernetes 中的 Mysql 进行连接,测试是否能够正常可用。

这里本人 Kubernetes 集群地址为 192.168.2.11 部署的 Mysql 的 NodePort 端口号为 30336,所以这里启动一个对应版本的 Mysql 镜像,然后进入镜像内部,输入 Mysql 登录命令进行测试。

运行一个 mysql 镜像,并且进入镜像内部:

$ docker run -it mysql:8.0.19 /bin/bash

在镜像内部命令行中输入 mysql 登录命令,测试是否能够正常登录:

$ mysql -h 192.168.2.11 -P 30336 --user=root --password=123456

显示如下:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 592
Server version: 8.0.19 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

可以看到,已经成功连接数据库,说明数据库能正常使用。

示例地址:

  • https://github.com/my-dlq/blog-example/tree/master/kubernetes/kubernetes-mysql

END

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

Kubernetes 部署 Mysql 8.0 数据库(单节点)相关推荐

  1. 认识kubernetes(k8s),k8s单节点etcd部署

    认识kubernetes(k8s),k8s单节点etcd部署 一.k8s概述 (一).k8s简介 (二).k8s特性 (三).k8s群集架构与组件 (四).k8s核心概念 (五).k8s三种部署方式 ...

  2. mysql数据库行业应用_腾讯云发布MySQL 8.0数据库 可应用至更多行业场景

    原标题:腾讯云发布MySQL 8.0数据库 可应用至更多行业场景 来源:21财经 目前,腾讯云数据库已有20多种数据库服务,包括云数据库MySQL.云原生数据库CynosDB.数据库智能管家DBbra ...

  3. Docker - 部署 MySQL 5.7 数据库容器

    文章目录 Docker - 部署 MySQL 5.7 数据库容器 环境信息 部署 MySQL 5.7 数据库容器 修改 MySQL 的字符集 参考信息 Docker - 部署 MySQL 5.7 数据 ...

  4. [Kubernetes] 在K8S上部署MySQL 8.0并数据持久化

    在K8S上安装MySQL 1.创建PV apiVersion: v1 kind: PersistentVolume metadata:name: model-db-pv spec:storageCla ...

  5. mysql 5.0 数据库_mysql5.0创建数据库

    CentOS6.5下通过Shell创建.备份.还原MySQL数据库 CentOS6.5下通过Shell创建.备份.还原MySQL数据库 创建数据库: mysql -uroot -p123456 -e ...

  6. 【Java+MySQL】使用JDBC连接MySQL 8.0数据库

    一.Java MySQL 8.0连接驱动包 下载链接:https://pan.baidu.com/s/1YFOImz0dCHtzIajSFq9xgg?pwd=boul 提取码:boul [IDEA]导 ...

  7. Flume部署安装详细图文步骤(单节点)

    步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls apache-flume-1.6.0 ...

  8. etcd mysql集群_Etcd单节点扩容为三节点集群

    Etcd单节点扩容为三节点集群 参考文档 http://www.cnblogs.com/breg/p/5728237.html 开始环境是单节点,存储数据一段时间后发现需要集群高可用环境,幸亏etcd ...

  9. mysql 5.0 数据库_mysql5.0常用命令

    MySQL常用操作基本操作,以下都是MySQL5.0下测试通过首先说明下,记住在每个命令结束时加上:(分号) 1.导出整个数据库 mysqldump -u 用户名 -p --default-chara ...

最新文章

  1. POJ 1860 Currency Exchange
  2. mysql存储引擎处理_[MySql学习笔记] 四 存储引擎事务处理
  3. Spring - Java/J2EE Application Framework 应用框架
  4. XCTF-Reverse:game(涉及异或脚本编写)
  5. mysql无法打开和锁定权限表_MySQL在连续查询后丢弃连接
  6. html5开发ria_用于RIA的JavaFX 2与HTML5
  7. luoguP1463:反素数ant(打表心得☆)
  8. assembly : maven assembly打包报错:maven to create assembly : unable to obtain archiver for extension
  9. IOS开发学习----给表视图设置缩进级别
  10. WLAN概述——无线网络简介
  11. cups 2.4.1编译办法
  12. Vue若依管理系统-实现管理员配置首页计数框/折线图
  13. 操作系统实验 连续内存分配 首次适应(FF)算法
  14. 信息系统集成有以下几个显著特点
  15. Android中EditText优先弹出数字输入法
  16. Linux中阶—文件服务vsftpd (九)
  17. 史上最全的ubuntu服务器搭建环境教程~~~
  18. 在CSDN开博第一篇,以及之前在百度空间的一些文章
  19. 【Mac应用程序】强力卸载Mac应用程序
  20. vs2008安装问题

热门文章

  1. FF公布融资及FF 91交付规划 IPO之前还需8.5亿美元资金
  2. 格力电器详解举报奥克斯 巨头互撕为哪般?
  3. 外媒称苹果挖走特斯拉高管 可能将重启电动汽车开发
  4. 顺丰霸榜!国家邮政局2018快递服务调查结果出了
  5. 老表笔记之电商项目实战测试流程
  6. 计算机系十周年聚会邀请函,毕业十周年同学聚会邀请函
  7. 华为p10plus能用鸿蒙吗,鸿蒙系统第四批什么时候 华为鸿蒙系统第四批 鸿蒙系统第四批升级机型介绍...
  8. word公式编号怎么右对齐_8个能帮你大忙的Word技巧,建议花几分钟学起来!
  9. 学业水平考试容易过吗_天水普通高中冬季学业水平考试圆满结束
  10. 【kafka】kafka /log_dir_event_notification的LogDir脱机事件通知