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

这篇具有很好参考价值的文章主要介绍了k8s容器部署mysql5.7全流程分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

有些人只是部署了一个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日志,出现该日志说明正确部署
k8s部署mysql5.7,kubernetes,容器,云原生

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连接数据库

k8s部署mysql5.7,kubernetes,容器,云原生

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

k8s部署mysql5.7,kubernetes,容器,云原生
root账户无法登录

当前控制台 本地可以登录

k8s部署mysql5.7,kubernetes,容器,云原生
本教程到此,完美的解决了k8s部署mysql的完整流程文章来源地址https://www.toymoban.com/news/detail-773016.html

到了这里,关于k8s容器部署mysql5.7全流程分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C站首发】全网最新Kubernetes(K8s)1.28版本探秘及部署 基于Containerd容器运行时(100年证书kubeadm)

    序号 操作系统及版本 备注 1 CentOS7u9 需求 CPU 内存 硬盘 角色 主机名 值 8C 8G 1024GB master k8s-master01 值 8C 16G 1024GB worker(node) k8s-worker01 值 8C 16G 1024GB worker(node) k8s-worker02 1.3.1 主机名配置 由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为wor

    2024年02月08日
    浏览(67)
  • 【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes 是一个强大的容器编排平台,可以帮助我们管理和部署容器化应用。MySQL 是一个流行的关系型数据库,在生产环境中通常需要高可用性和数据持久性。 本文将介绍如何在 Kubernetes 中部署 MySQL 集群,以确保数据的高可用性和持久

    2024年04月17日
    浏览(49)
  • 容器化进阶Kubernetes(K8S)详解

    1.1.1 Kubernetes是什么及作用 Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。 Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 官网地址 Kubernetes 中文社区 Kubernetes(k8s)中文文档 目录_Kubernetes中文社

    2024年02月05日
    浏览(78)
  • 基于k8s搭建mysql5.7主从集群实现读写分离

    一,准备工作 1,拥有一个运行中的k8s集群 2,拥有一个ceph分布式存储集群,此mysql集群基于ceph块存储,部署方案可参考我前面的rook部署ceph方案 二,集群搭建 1,创建存储类storageclass       将此 StorageClass 定义保存为 storageclass.yaml : 创建存储类   2,MySQL 部署包含一个 Con

    2024年02月08日
    浏览(42)
  • Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目

    wordpress是用于快速搭建博客系统。 该yaml文件创建一个mysql,并且生成一个service,service对外暴露的端口是3306 我们发现,搭建成功了,用浏览器访问192.168.56.101:30493,发现访问成功了! 在集群中,pod之间可以通过service 的name进行访问,不仅仅是ip,这就意味着,service中不仅帮

    2024年02月12日
    浏览(98)
  • 容器技术,1. Docker,2. Kubernetes(K8s):

    目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。 容器技术指通过在物理主机操作系统上创建一个一个

    2024年02月11日
    浏览(71)
  • Kubernetes(K8s):容器化应用的航空母舰

    Kubernetes(K8s)是一个开源的容器编排系统,它的出现就像是为容器化应用提供了一艘强大的航空母舰。在这艘母舰上,你的应用容器就像是一架架战斗机,Kubernetes负责指挥它们起飞、飞行、降落,确保它们能在正确的时间、正确的地点执行任务。 Pod: Kubernetes的基本飞行编队

    2024年04月08日
    浏览(67)
  • Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(85)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(58)
  • Kubernetes (K8s) 解读:微服务与容器编排的未来

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack : 📚 MERN/MEAN/MEVN Stack | 🌐 Jamstack | 🌍 GraphQL | 🔁 RESTful API | ⚡ WebSockets | 🔄 CI/CD | 🌐 Git Version Control | 🔧 DevOps 🌐 前端技术 Frontend : 🖋️ HTML CSS |

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包