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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS基础面试题

介绍一下标准css盒子模型与低版本IE的盒子模型&#xff1f; 标准盒子模型&#xff1a;宽度内容的宽度&#xff08;content&#xff09; border padding margin 低版本IE盒子模型&#xff1a;宽度内容宽度&#xff08;contentborderpadding&#xff09; margin box-sizing 属性…

GroupMixFormer:基于Group-Mix注意力的视觉Transformer

文章目录 摘要1、简介2、相关工作2.1、视觉转换器2.2、全面的自注意力建模 3、组混合注意力和GroupMixFormer3.1. 动机&#xff1a;从个体到群体3.2. GMA: 混合组以获得更好的注意力3.3. 架构配置 4、实验4.1、实现细节4.2. 与最先进模型的比较4.3. 消融实验 5、结论 摘要 htt…

Temu重启诉讼和Shein战火重燃?出海知识产权保护成焦点

撰稿 | 故里 来源 | 亿恩 12月14日&#xff0c;Temu在美重诉Shein称别无选择&#xff0c;并表示Shein反竞争行为愈演愈烈。 对此&#xff0c;一位接近Shein人士称&#xff0c;Temu不但一直大规模抄袭SHEIN自有品牌产品、持续进行不正当竞争&#xff0c;还颠倒黑白、贼喊捉贼&…

LVS负载均衡群集,熟悉LVS的工作模式,了解LVS的调度策略以及ipvsadm工具的命令格式

目录 一、什么是群集 群集的作用&#xff1a; 群集的目的是什么 根据群集所针对的目标差异&#xff0c;可分为三种类型 负载均衡群集&#xff08;LBC&#xff09;load balance cluster 高可用群集&#xff08;HAC&#xff09;high availability cluster 高性能运算群集&a…

模拟真实内网渗透过程

环境搭建 kali为cs服务器 win11为攻击者主机 DMZ模拟目标web服务器&#xff0c;配置两块网卡&#xff0c;一个连外网&#xff0c;一个连内网域控 最终要求在win11上使用cs对目标域控进行提权 实施过程 一、域控主机搭建域环境&#xff0c;DMZ主机加入域内 搭建域控 w…

SE考研真题总结(二)

接上条&#xff0c;今天继续更新~ SE考研真题总结&#xff08;一&#xff09;-CSDN博客文章浏览阅读340次&#xff0c;点赞6次&#xff0c;收藏11次。本帖开始分享考研真题中设计【软件工程】的部分&#xff0c;预计会出5期左右&#xff0c;敬请期待~https://blog.csdn.net/js…

ububtu16.04下安装MQTT服务器

1、mqtt服务器安装 直接上root用户&#xff0c;顺序执行以下命令完成服务器安装&#xff1a; sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa sudo apt-get update sudo apt-get install mosquitto …

P21 类神经网络训练不起来怎么办- 自动调整学习率 Adapative learning rate

梯度大&#xff0c;学习率减小梯度小&#xff0c;学习率变大adam随时间变化 &#xff0c; decay / warm up 调整学习率方法一 adagrad 学习率除以 梯度的方差 方法二 RMSProp 目前最常用的&#xff1a; Adam: RMSProp Moment Learning rate schedule : decay/ warm up l…

什么是数据可视化?数据可视化的优势、方法及示例

前言 在当今的数字时代&#xff0c;数据是企业和组织的命脉&#xff0c;生成的数据量呈指数级增长。这种被称为大数据的海量数据在洞察力和决策方面具有巨大的潜力。然而&#xff0c;如果没有一种有效的方法来分析和理解这些数据&#xff0c;它就会变得毫无意义和难以管理。这就…

基于物理的AlGaN/GaN HEMT器件2DEG电荷密度分析模型(文献阅读)

标题&#xff1a;A Physics-Based Analytical Model for 2DEG Charge Density in AlGaN/GaN HEMT Devices (IEEE TRANSACTIONS ON ELECTRON DEVICES) 重要公式 2DEG电荷密度建模的困难源于量子阱中Ef随ns的复杂变化。此关系由给出 n s D V t h [ l n ( l e E f − E 0 V t …

12.15_黑马数据结构与算法笔记Java

目录 144 avl树 balance 145 avl树 put 146 avl树 remove 147 红黑树 概述 148 红黑树 put case1-3 149 红黑树 put case4 150 红黑树 remove case0-1 151 红黑树 remove case2 152 红黑树 remove case3 153 红黑树 remove case4 154 红黑树 remove case5 155 红黑树…

问卷推广策略:如何让问卷被更多人看到

企业想要了解最新客户需求痛点、产品上新、活动营销的时候&#xff0c;往往会采取市场调研的方式。而做市场调研大家通常会采取问卷调查的形式&#xff0c;在这个网络高度发达的时代&#xff0c;大家每天都会被海量的信息淹没&#xff0c;想让自己的问卷让更多的人看到并不容易…

Java小案例-RocketMQ的11种消息类型,你知道几种?(事务消息)

前言 上一节给大家讲了Rocket的延迟消息&#xff0c;这一节和大家聊一下事务消息&#xff0c;关于延迟消息大家可以点下面这个链接直接看。 事务消息 事务消息是RocketMQ提供的一种类似X/Open XA的分布式事务功能。通过RocketMQ的事务消息&#xff0c;可以达到分布式事务的最…

探讨前端技术的未来:创新与适应的必要性

一、引言 2023年&#xff0c;IT圈似乎被一种悲观的论调所笼罩&#xff0c;那就是“Java 已死、前端已凉”。然而&#xff0c;真相是否如此呢&#xff1f;本文将围绕这一主题&#xff0c;探讨前端的现状和未来发展趋势。 二、为什么会出现“前端已死”的言论 这一言论的出现并…

蓝凌EIS智慧协同平台 SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能&#xff0c;旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 UniformEntry.asp接口处未对用户输入的SQL语句进行…

volatile 关键字的作用(变量可见性、禁止重排序)

volatile 关键字的作用&#xff08;变量可见性、禁止重排序&#xff09; Java 语言提供了一种稍弱的同步机制&#xff0c;即 volatile 变量&#xff0c;用来确保将变量的更新操作通知到其他线程。volatile 变量具备两种特性&#xff0c;volatile 变量不会被缓存在寄存器或者对…

python和pygame实现捉小兔游戏

python和pygame实现捉小兔游戏 python和pygame实现捉小兔游戏&#xff0c;需要安装使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 下面是使用Python和Pygame创建的游戏&#xff0c;其中有…

仿淘宝、京东首页icons横向滑动效果

一、效果展示 淘宝&#xff1a; 京东&#xff1a; 二、话不多说&#xff0c;直接上demo 案例效果 代码 <template><div class"demo-page"><h1>滚动效果</h1><div classicons-slide-wrapper><div class"icons-container&quo…

【Java代码审计】SQL注入篇

【Java代码审计】SQL注入篇 1.Java执行SQL语句的几种方式2.Java SQL注入SQL语句参数直接动态拼接预编译依然采用拼接order by注入%和_模糊查询MyBatis中使用存在风险的语法 3.Java常规注入代码审计思路4.二次注入代码审计 1.Java执行SQL语句的几种方式 1、JDBC Statement执行S…

java综合实验-图书管理系统

二、实验项目内容&#xff08;实验题目&#xff09; 1. 使用Java编程语言进行实验。 2. 采用面向对象的思想进行系统设计。 3. 实现基本的图书管理功能&#xff0c;包括添加图书、删除图书、查询图书信息等。 4. 要求有良好的用户交互界面。 步骤参考&#xff1a; 步骤一…