ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/9/14 21:52:48 拓冰建站 浏览量
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中,并且方便修改配置,修改密码。

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

  • 使用相关版本

  • 步骤
    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的完整流程