k8s容器部署mysql5.7全流程分享

文章目录

  • 一、前言
  • 二、打开dockerhub 看到mysql的版本为 5.7
  • 三、K8S 容器编排
    • 3.1、编写POD的相关信息
    • 3.2、编写mysql的data存储位置
    • 3.3、编写mysql的my.cnf的挂载文件
    • 3.4、编写mysql的service端口
  • 四、启动并禁用root账户
    • 4.1 登录,默认密码123456
    • 4.2 配置账户权限
  • 五 navicat连接数据库

一、前言

有些人只是部署了一个kubernetes(简称k8s),mysql自然是也是想部署到该容器底座中。但是为了方便,一般只是想部署一个单机版本的mysql。该教程主要是分享,如何把mysql5.7单机版快速的部署到k8s中,并且方便修改my.cnf配置,同时修改密码,适用于中小型项目中。

文章最后附完整的 k8s yaml,直接 kubectl apply -f 即可使用。

  • 本问使用相关版本
    20 > docker版本 >= 19
    1.20 > kubernetes >= 1.19

  • 步骤
    1、在dockerhub中选择mysql5.7容器,选择官网的容器,方便查资料,以及更加可靠
    2、分析mysql5.7 my.cnf的位置,方便后续使用k8s的 configmap 进行修改
    3、编写K8S的声明式API,也有人说这个是在做k8S的容器编排
    3.1、编写POD的相关信息
    3.2、编写mysql的data存储位置
    3.3、编写mysql的my.cnf的挂载文件
    3.4、编写mysql的service端口
    4、启动mysql之后,禁用root账户
    5、修改service的nodeport即可直接使用

二、打开dockerhub 看到mysql的版本为 5.7

从中获取的信息有:
容器的名称和版本为:mysql:5.7

cd /etc/docker
cat my.cnf
...
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

从以上可以看出,挂载的文件夹有 /etc/mysql/conf.d/ 和 /etc/mysql/mysql.conf.d/ 两个

进入 /etc/mysql/conf.d/ 里面查看

cd /etc/mysql/conf.d/
docker.cnf  mysqldump.cnf

可以看出,里面有两个文件,如果我们需要配置,直接在这个里面创建 .cnf 的配置文件即可,例如,填入以下内容

创建 myHome.cnf

# vi myHome.cnf
[mysqld]
default_storage_engine=innodb
max_connections=2000
skip_external_locking
lower_case_table_names=1
skip_host_cache
skip_name_resolve
default-time-zone='+8:00'
character_set_server=utf8mb

三、K8S 容器编排

3.1、编写POD的相关信息

初始化密码,默认密码为 123456

apiVersion: v1
kind: Secret
metadata:name: mysql-sctlabels:app: mysql
type: Opaque
data:mysql-root-password: "MTIzNDU2"mysql-password: "MTIzNDU2"
#注mysql-root-password, mysql-password需经过base6 4命令行下使用base64 <<< "密码",默认密码123456

编写pod

apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysql
spec:selector:matchLabels:app: mysql#strategy:#  type: RollingUpdatetemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:5.7 # 选用dockerhub提供的镜像imagePullPolicy: IfNotPresentname: mysqlenv:- name: MYSQL_ROOT_PASSWORD # root账户密码valueFrom:secretKeyRef:key: mysql-root-passwordname: mysql-sct- name: MYSQL_PASSWORD # mymysql的账户密码valueFrom:secretKeyRef:key: mysql-passwordname: mysql-sct- name: MYSQL_USER #默认创建除了root之外的账户value: mymysqlports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-pvmountPath: /var/lib/mysql #mysql data的持久化文件- name: mysql-cmmountPath: /etc/mysql/conf.d/ # mysql的 配置文件volumes:- name: mysql-pvpersistentVolumeClaim:claimName: mysql-pvc- name: mysql-cmconfigMap:name: mysql-cmitems:- key: myHome.cnfpath: myHome.cnf

3.2、编写mysql的data存储位置

编写存储卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvclabels:app: mysql
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10Gi

3.3、编写mysql的my.cnf的挂载文件

一共编写了三个文件,myHome.cnf docker.cnf mysqldump.cnf

kind: ConfigMap
apiVersion: v1
metadata:name: mysql-cm
data:myHome.cnf: |[mysqld]default_storage_engine=innodbmax_connections=2000skip_external_lockinglower_case_table_names=1skip_host_cacheskip_name_resolvedefault-time-zone='+8:00'character_set_server=utf8mb4docker.cnf: |[mysqld]skip-host-cacheskip-name-resolvemysqldump.cnf: |[mysqldump]quickquote-namesmax_allowed_packet      = 16M

3.4、编写mysql的service端口

apiVersion: v1
kind: Service
metadata:name: mysql-svclabels:app: mysql
spec:type: NodePortports:- port: 3306nodePort: 30306selector:app: mysql

四、启动并禁用root账户

进到k8s容器控制台里面处理,获取使用navica等mysql客户端连接工具进行处理。

完整yaml下载地址:https://gitee.com/chencanzhan/cancan-java-share/blob/master/kubernetes/yaml/mysql.yaml

下载后,运行 kubectl apply -f mysql.yaml

persistentvolumeclaim/mysql-pvc created
secret/mysql-sct created
deployment.apps/mysql created
configmap/mysql-cm created
service/mysql-svc created

查看k8s日志,出现该日志说明正确部署
在这里插入图片描述

4.1 登录,默认密码123456

# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.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>

同时查看date,如果时间对,则说明配置生效

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-12-11 23:17:18 |
+---------------------+
1 row in set (0.00 sec

时间对,则说明我们的 myHome.cnf 生效了

4.2 配置账户权限

1 删除root远程访问权限,并创建另一个拥有root权限账户

-- 切换到mysql数据库,并查看user表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 -ADatabase changed
mysql> select user,host from user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| mymysql       | %         |
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
5 rows in set (0.00 sec)
--- 删除mysql数据库user表中  user="root",host="%"的那条记录,并刷新权限
mysql> delete user from mysql.user where user='root' and host='%';
Query OK, 1 row affected (0.00 sec)flush privileges;

1 把mysql账户的密码修改复杂一点,并赋予root权限

mysql> UPDATE mysql.user SET authentication_string=PASSWORD('admin@123') WHERE User='mymysql';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1FLUSH PRIVILEGES;

并赋予root权限

mysql> GRANT ALL ON *.* TO 'mymysql'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

五 navicat连接数据库

在这里插入图片描述

从上图可以看出,mymysql采用密码 admin@123 顺利登录,而且有root权限。

在这里插入图片描述
root账户无法登录

当前控制台 本地可以登录

在这里插入图片描述
本教程到此,完美的解决了k8s部署mysql的完整流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267304.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#科学绘图之scottPlot绘制多个图像

文章目录 示例移除图像图例信号图 scott系列&#xff1a;绘图初步 示例 从名字就能看出&#xff0c;ScottPlot的绘图函数AddScatter的作用是为图窗添加数据点&#xff0c;换言之&#xff0c;每调用一次AddScatter&#xff0c;就可以在图窗中添加一组图像。下面添加两个按钮&a…

前后端请求之nginx配置

问题&#xff1a; 前端发送的请求&#xff0c;是如何请求到后端服务器的&#xff1f; 如&#xff0c;前端请求地址&#xff1a;http://loclhost/api/employee/login&#xff1a; 后端相应请求地址&#xff1a;http://loclhost:8080/admin/employee/login 回答&#xff1a; …

【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 单调栈 题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。 如果 nums[j] 满足以下条件&#xff…

通过3000个传感器帮助大型大学附属医院实现远程环境监测

来源&#xff1a;虹科环境监测技术 虹科案例 | 通过3000个传感器帮助大型大学附属医院实现远程环境监测 原文链接&#xff1a;https://mp.weixin.qq.com/s/wRxhT4n13cuCA7pEj4M-4w 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 在本案例研究中&#xff0c;您将了解…

Java EE 多线程之多线程案例

文章目录 1. 多线程案例1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式1.1.3 多线程下的单例模式 1.2 阻塞队列1.2.1 阻塞队列定义1.2.2 生产者消费者模型的意义1.2.4 标准库中的阻塞队列1.2.5 实现阻塞队列1.2.6 用阻塞队列实现生产者消费者模型 1.3 实现定时器1.3.1 标准库中的定…

Python:核心知识点整理大全14-笔记

目录 ​编辑 7.2.2 让用户选择何时退出 parrot.py 7.2.3 使用标志 7.2.4 使用 break 退出循环 cities.py 7.2.5 在循环中使用 continue counting.py 7.2.6 避免无限循环 counting.py 7.3 使用 while 循环来处理列表和字典 7.3.1 在列表之间移动元素 confirmed_user…

软件科技成果鉴定测试有什么好处?注意事项有哪些?

软件科技成果鉴定测试是指对软件科技成果进行检测和评估的过程。通过这个测试&#xff0c;可以评估软件科技成果的技术水平、功能性能以及可靠性&#xff0c;并为相关单位和个人提供科学的评价依据。    一、进行软件科技成果鉴定测试有以下好处&#xff1a;   1、客观评价…

L1-024:后天

题目描述 如果今天是星期三&#xff0c;后天就是星期五&#xff1b;如果今天是星期六&#xff0c;后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天&#xff0c;请你输出那天的“后天”是星期几。 输入格式&#xff1a; 输入第一行给出一个正整数D&#xff08;1 …

软件设计师——软件工程(一)

&#x1f4d1;前言 本文主要是【软件工程】——软件设计师——软件工程的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

Qt 线程

&#x1f4a1; 进度条显示拷贝进度&#xff08;verson 1&#xff09; 窗口上放置一个按钮和一个进度条部件&#xff0c;点击按钮&#xff0c;进行拷贝操作 —— 打开对话框选择源文件&#xff0c;然后再打开一个对话框 选择 目标文件存放位置和名称。拷贝过程中进度条显示当前…

在接触新的游戏引擎的时候,如何能快速地熟悉并开发出一款新游戏?

引言 大家好&#xff0c;今天分享点个人经验。 有一定编程经验或者游戏开发经验的小伙伴&#xff0c;在接触新的游戏引擎的时候&#xff0c;如何能快速地熟悉并开发出一款新游戏&#xff1f; 利用现成开发框架。 1.什么是开发框架&#xff1f; 开发框架&#xff0c;顾名思…

ArkUI List组件

我们在column中使用foreach循环渲染数据的时候&#xff0c;如果数据过多&#xff0c;超出屏幕高度&#xff0c;会出现隐藏的情况。 class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name: string, image: ResourceStr, price: number,dis…