Files
kuboard-press/learning/k8s-practice/ocp/mysql.md
huanqing.shao 6c94e4db2e 拼写错误
2019-10-01 20:47:26 +08:00

13 KiB
Raw Blame History

vssueId, layout, description, meta
vssueId layout description meta
88 LearningLayout Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud_open_capacity_platform微服务能力开放平台_部署mysql
name content
keywords Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes MySQL

在K8S上部署mysql

OCP 的 auth-server 和 user-center 都有自己的数据库,同时 auth-server、user-center 和 api-gateway 又都依赖于 redis 缓存服务 和 log-center 数据库。这使得我们的部署结构演变成下图所示:

我们必须先完成 db-auth-center、db-user-center、db-log-center 和 redis 的部署,才能继续部署 auth-server 和 user-center。本文描述了如何部署 db-auth-center、db-user-center、db-log-center。

::: danger 将 mysql 部署到 K8S 中,可以非常便捷地搭建一套测试环境,但是,在生产环境里,并不建议直接将 mysql 部署到 K8S 上。 :::

Kubernetes教程:在K8s上部署MySQL/Redis

构建并推送mysql镜像

OCP 要求 mysql 版本 5.7 以上,当我们在 K8S 上部署 mysql 时,将选择 mysql 官方镜像 并基于此镜像,构建自己的 mysql 镜像,以便:

  • 把数据库初始化脚本打包到镜像中
    • 这样每次部署一个新的 mysql 实例时,可以自动初始化 OCP 所需要的表结构
  • 把自定义的数据库配置文件 my.cnf 打包到镜像中
  • 设置环境变量 本文档不涉及

auth-center-mysql

  • 在 master 节点上,执行命令 cd /root/open-capacity-platform/sql 切换当前目录。

假设您已经完成了 准备OCP的构建环境和部署环境

  • 执行命令 vim auth-center-my.cnf 以创建文件,其内容如下:

    此配置用于解决 mysql 使用时的乱码问题。

    [mysqld]
    
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    
  • 执行命令 vim dockerfile_auth-center 以创建文件,其内容如下:

    FROM mysql:5.7.26
    ADD auth-center-my.cnf /etc/mysql/conf.d/my.cnf
    ADD 02.oauth-center.sql /docker-entrypoint-initdb.d/02.oauth-center.sql
    EXPOSE 3306
    
  • 执行命令 docker build -f dockerfile_auth-center -t ocpsample/auth-center-mysql:latest .

    ::: tip 如果使用私有仓库,则应该按照如下格式填写镜像名:

    my-registry.example.com:5000/example/auth-center-mysql:latest

    • 蓝色部分registry 地址
    • 绿色部分registry 端口
    • 紫色部分repository 名字
    • 红色部分image 名字
    • 棕色部分image 标签 :::
  • 执行命令 docker login 登录镜像仓库

  • 执行命令 docker push ocpsample/auth-center-mysql:latest

    大约2-5分钟可完成镜像推送

user-center-mysql

  • 在 master 节点上,执行命令 cd /root/open-capacity-platform/sql 切换当前目录。(与上一个步骤目录相同)

  • 执行命令 vim user-center-my.cnf 以创建文件,其内容如下:

    [mysqld]
    
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    
  • 执行命令 vim dockerfile_user-center 以创建文件,其内容如下:

    FROM mysql:5.7.26
    ADD user-center-my.cnf /etc/mysql/conf.d/my.cnf
    ADD 01.user-center.sql /docker-entrypoint-initdb.d/01.user-center.sql
    EXPOSE 3306
    

    ::: warning SQL脚本问题 01.user-center.sql 脚本中包含一些 create FUNCTION 的语句,已经确认这些 FUNCTION 并不被用到。在执行 coker build 之前,请确保这些 create FUNCTION 的语句被删除,否则您将在 mysql 初始化时碰到如下错误:

    ERROR 1064 (42000) at line 246: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
    

    :::

  • 执行命令 docker build -f dockerfile_user-center -t ocpsample/user-center-mysql:latest .

  • 执行命令 docker push ocpsample/user-center-mysql:latest

    大约 20 秒,可完成镜像推送

log-center-mysql

  • 在 master 节点上,执行命令 cd /root/open-capacity-platform/sql 切换当前目录。(与上一个步骤目录相同)

  • 执行命令 vim log-center-my.cnf 以创建文件,其内容如下:

    [mysqld]
    
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    
  • 执行命令 vim dockerfile_log-center 以创建文件,其内容如下:

    FROM mysql:5.7.26
    ADD log-center-my.cnf /etc/mysql/conf.d/my.cnf
    ADD 05.log-center.sql /docker-entrypoint-initdb.d/05.log-center.sql
    EXPOSE 3306
    
  • 执行命令 docker build -f dockerfile_log-center -t ocpsample/log-center-mysql:latest .

  • 执行命令 docker push ocpsample/log-center-mysql:latest

    大约 20 秒,可完成镜像推送

部署mysql

部署auth-center-mysql

  • 在 Kuboard 界面中进入 ocp 名称空间

  • 点击 创建工作负载 按钮

    填写表单,如下图所示:

    字段名称 填写内容 说明
    服务类型 StatefulSet
    服务分层 持久层
    服务名称 auth-center
    服务描述 认证中心数据库
    副本数量 1 请填写1
    容器名称 auth-center-mysql
    镜像 ocpsample/auth-center-mysql:latest
    抓取策略 Always
    环境变量 MYSQL_ROOT_PASSWORD=root 参考 mysql官方镜像
    Service ClusterIP集群内访问
    协议:TCP 服务端口: 3306 容器端口: 3306

    ::: tip 持久化

    • 将 mysql 的容器内路径 /var/lib/mysql 映射到外部数据卷,可以使数据持久保存,请参考 数据卷
    • 为了保持教程的简洁,此处并没有为 auth-center-mysql 挂载外部存储,存入 mysql 的数据在每次容器重启后都将丢失,并重新执行初始化脚本 02.auth-center.sql

    :::

    ::: tip 访问方式

    为该 StatefulSet 配置了 ClusterIP集群内访问的访问方式Kuboard 将创建一个与 StatefulSet 同名db-auth-center的 Kubernetes Service。您可以在集群内同名称空间 ocp 下任何容器组中通过 db-auth-center:3306 访问 auth-center-mysql 数据库,用户名为 root密码为 root。

    参考 Service连接应用程序

    :::

    Kubernetes教程:在K8S上部署mysql

  • 点击 保存

  • 点击 应用

  • 点击 完成

验证auth-center-mysql

  • 在 Kuboard 中进入 auth-center-mysql 的终端界面,执行如下命令:

    mysql -uroot -proot
    > show databases;
    > use oauth-center;
    > show tables;
    
  • 可以验证oauth-center 的数据库表结构已经完成初始化,输出结果如下图所示:

    Kubernetes教程:在K8S上部署mysql_验证结果

部署user-center-mysql

按照同样的方式部署 user-center-mysql因此本章节不在截图只将必要的步骤和参数进行罗列

  • 点击 创建工作负载 按钮

  • 填写表单,如下表所示:

字段名称 填写内容 说明
服务类型 StatefulSet
服务分层 持久层
服务名称 user-center
服务描述 用户中心数据库
副本数量 1 请填写1
容器名称 user-center-mysql
镜像 ocpsample/user-center-mysql:latest
抓取策略 Always
环境变量 MYSQL_ROOT_PASSWORD=root 参考 mysql官方镜像
Service ClusterIP集群内访问
协议:TCP 服务端口: 3306 容器端口: 3306
  • 点击 保存
  • 点击 应用
  • 点击 完成

验证user-center-mysql

  • 在 Kuboard 中进入 user-center-mysql 的终端界面,执行如下命令:

    mysql -uroot -proot
    > show databases;
    > use user-center;
    > show tables;
    

部署log-center-mysql

按照同样的方式部署 log-center-mysql因此本章节不在截图只将必要的步骤和参数进行罗列

  • 点击 创建工作负载 按钮

  • 填写表单,如下表所示:

字段名称 填写内容 说明
服务类型 StatefulSet
服务分层 持久层
服务名称 log-center
服务描述 日志中心数据库
副本数量 1 请填写1
容器名称 log-center-mysql
镜像 ocpsample/log-center-mysql:latest
抓取策略 Always
环境变量 MYSQL_ROOT_PASSWORD=root 参考 mysql官方镜像
Service ClusterIP集群内访问
协议:TCP 服务端口: 3306 容器端口: 3306
  • 点击 保存
  • 点击 应用
  • 点击 完成

验证log-center-mysql

  • 在 Kuboard 中进入 log-center-mysql 的终端界面,执行如下命令:

    mysql -uroot -proot
    > show databases;
    > use log-center;
    > show tables;