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

news2024/9/23 15:28:58

文章目录

  • 一、前言
  • 二、打开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-sct
  labels:
    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: mysql
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  #strategy:
  #  type: RollingUpdate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: mysql:5.7 # 选用dockerhub提供的镜像
          imagePullPolicy: IfNotPresent
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD # root账户密码
              valueFrom:
                secretKeyRef:
                  key: mysql-root-password
                  name: mysql-sct
            - name: MYSQL_PASSWORD # mymysql的账户密码
              valueFrom:
                secretKeyRef:
                  key: mysql-password
                  name: mysql-sct
            - name: MYSQL_USER #默认创建除了root之外的账户
              value: mymysql
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-pv
              mountPath: /var/lib/mysql #mysql data的持久化文件
            - name: mysql-cm
              mountPath: /etc/mysql/conf.d/ # mysql的 配置文件
      volumes:
        - name: mysql-pv
          persistentVolumeClaim:
            claimName: mysql-pvc
        - name: mysql-cm
          configMap:
            name: mysql-cm
            items:
              - key: myHome.cnf
                path: myHome.cnf

3.2、编写mysql的data存储位置

编写存储卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  labels:
    app: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    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=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=utf8mb4
  docker.cnf: |
    [mysqld]
    skip-host-cache
    skip-name-resolve
  mysqldump.cnf: |
    [mysqldump]
    quick
    quote-names
    max_allowed_packet      = 16M

3.4、编写mysql的service端口

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30306
  selector:
    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 -A

Database 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: 1

FLUSH 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.coloradmin.cn/o/1313210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想笔记本如何安装Vmware ESXi

环境&#xff1a; Vmware ESXi 8.0 Vmware ESXi 6.7 联想E14笔记本 问题描述&#xff1a; 联想笔记本如何安装Vmware ESXi 解决方案&#xff1a; 1.官网下载镜像文件 https://customerconnect.vmware.com/en/downloads/search?queryesxi%208 下载 2.没有账户注册一个 …

GNSS系统概述

一.GNSS的定义 1.GNSS全称&#xff1a;全球导航卫星系统 ( Global Navigation Satellite System&#xff0c; GNSS)。 人造卫星导航定位系统是一种星基无线电导航系统&#xff0c;它以人造地球卫星为导航台&#xff0c;为陆、海、空、天各种军民载体提供全天候、高精度的位置…

cordic 算法学习记录

参考&#xff1a;b站教学视频FPGA&#xff1a;Cordic算法介绍与实现_哔哩哔哩_bilibili FPGA硬件实现加减法、移位等操作比较简单&#xff0c;但是实现乘除以及函数计算复杂度高且占用资源多&#xff0c;常见的计算三角函数/平方根的求解方式有①查找表&#xff1a;先把函数对应…

腾讯科技Hi Tech Day暨2023数字开物大会:智能涌现将通往无数的未来

腾讯科技讯 12月14日&#xff0c;以“智能涌现 数开万物”为主题的腾讯科技Hi Tech Day暨2023数字开物大会在北京国家会议中心召开&#xff0c;腾讯科技邀请知名院士、知名经济学家、知名大学教授、研究院院长、产业大咖、互联网大厂高管、知名科技领域头部企业高管、产业数字化…

猫粮哪个牌子质量好性价比高?分享十款主食冻干猫粮品牌排行榜!

一款好的、健康的主粮对猫整体有很大的提升&#xff0c;主食作为猫的日常饮食&#xff0c;直接关乎着小猫是否能摄入充分的营养&#xff0c;达到最佳的理想状态&#xff0c;因此对于每一位铲屎官来说&#xff0c;主食选得好不好至关重要。面对种类众多的主食&#xff0c;很多人…

DSP定时器0笔记

首先了解开发板TMS320f28335是150Mhz的频率 定时器结构图和概要 定时器0对应的中断是TINT0 大概是这样&#xff0c;时钟sysclkout 进入和TCR控制时钟进入 &#xff0c;经过标定计数器&#xff08;stm32的预分频&#xff09;&#xff0c;标定器挂这自动装载寄存器&#xff0c…

(独白)我为什么选择了计算机行业?

为什么可能很简单&#xff0c;但为什么的为什么就有点长了。就当作讲故事吧 在高中毕业后选择专业时&#xff0c;和大多数人一样&#xff0c;我根本不知道要选择什么专业&#xff0c;更不知道哪个专业发展前景好&#xff0c;哪个专业好就业。在当时比较火的专业我记得应该是土…

解锁转换成功:12 个基本的成长骇客技巧

什么是增长黑客&#xff1f;增长黑客已成为营销界的流行语&#xff0c;但许多人仍然不知道增长黑客的含义以及它在营销中是如何发挥作用的。如果你也存在这样的困惑&#xff0c;别担心。今天这篇文章将为你解答以上问题。通过黑客增长和走特立独行的发展道路&#xff0c;你可以…

《opencv实用探索·十九》光流法检测运动目标

前言 光流法&#xff08;Optical Flow&#xff09;是计算机视觉中的一种技术&#xff0c;用于估计图像中相邻帧之间的像素位移或运动。它是一种用于追踪图像中物体运动的技术&#xff0c;可以在视频中检测并测量物体的运动轨迹。 光流的直观理解&#xff1a; 光流是一个视频中两…

VINS-MONO代码解读6----pose_graph

开始pose_graph部分&#xff0c;本部分记住一句话无论是快速重定位还是正常重定位&#xff0c;求出 T w 1 w 2 T_{w_1w_2} Tw1​w2​​就是终极目标。 还剩一个整体Pipeline~~ 1. pose_graph_node.cpp 注意&#xff0c;定义全局变量时即实例化了一个对象 PoseGraph posegra…

开关电源这些纹波噪声如何抑制?

电源工程师都知道&#xff0c;开关电源在运行过程中会产生多种纹波噪声&#xff0c;对电路性能和稳定性产生一定影响&#xff0c;所以要针对各种纹波噪声采取合理的措施来解决&#xff0c;那么如何做&#xff1f; 1、低频纹波噪声主要是由于开关管开关状态的快速变化导致的。在…

C++异步网络库workflow系列教程(3)Series串联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的两篇博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 简介 首先,workflow是任务流的意…

图解python | 字典

1.Python字典(Dictionary) 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个键值对之间用逗号 , 分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key…

软件测试职业规划

软件测试人员的发展误区【4】 公司开发的产品专业性较强&#xff0c;软件测试人员需要有很强的专业知识&#xff0c;现在软件测试人员发展出现了一种测试管理者不愿意看到的景象&#xff1a; 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发)&#xff1b; 2、业务…

题目:区间或 (蓝桥OJ 3691)

题目描述: 解题思路: 本题采用位运算.先求出全部数组每一位各自的前缀和,然后再判断区间内每一位区间和是否为0,不为0则乘上相应的2^n并将各个为的2^n相加,得ans. 实现原理图 题解: #include<bits/stdc.h> using namespace std;const int N 1e5 9;int a[N], prefix[35…

2023AI Agent智能体HR商用落地的案例汇集

过去一周在各类智能体产品不断呈现新发展态势的情况下&#xff0c;我们将注意力继续放回AI Agent智能体在大型和超大型企业不同领域商用落地的可能性探索上面去。 本着这一初衷&#xff0c;我们会继续把注意力转向探索AI Agent智能体在HR领域的商用落地所面临的挑战和最可能实…

ida脚本环境开发配置idapythonidacpp三端环境(win,mac,linux)

ida脚本也有一段时间了,一直有个痛点是找不到比较好的方法热重载脚本来实时改动生效,导致开发效率老慢了。固总结下比较友好的环境搭配 使用ida热加载插件让你开发脚本更高效 github地址: GitHub - 0xeb/ida-qscripts: An IDA plugin to increase productivity when developi…

PyTorch: 基于【VGG16】处理MNIST数据集的图像分类任务【准确率98.9%+】

目录 引言在Conda虚拟环境下安装pytorch步骤一&#xff1a;利用代码自动下载mnist数据集步骤二&#xff1a;搭建基于VGG16的图像分类模型步骤三&#xff1a;训练模型步骤四&#xff1a;测试模型运行结果后续模型的优化和改进建议完整代码结束语 引言 在本博客中&#xff0c;小…

MySQL数据库卸载-Windows

目录 1. 停止MySQL服务 2. 卸载MySQL相关组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 5. 再次打开服务&#xff0c;查看是否有MySQL卸载残留 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 "确定" 调出系统服务。 2. 卸载MySQL相关组…