Files
huanqing.shao b4a2a48480 Adsense
2019-10-12 20:01:03 +08:00

282 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
vssueId: 88
layout: LearningLayout
description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud_open_capacity_platform微服务能力开放平台_部署mysql
meta:
- name: keywords
content: Kubernetes教程,K8S教程,Kubernetes微服务,Kubernetes MySQL
---
# 在K8S上部署mysql
<AdSenseTitle/>
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 上。
:::
<p style="max-width: 720px;">
<img src="./mysql.assets/image-20190928183401521.png" alt="Kubernetes教程在K8s上部署MySQL/Redis">
</p>
## 构建并推送mysql镜像
OCP 要求 mysql 版本 5.7 以上,当我们在 K8S 上部署 mysql 时,将选择 [mysql 官方镜像](https://hub.docker.com/_/mysql) 并基于此镜像,构建自己的 mysql 镜像,以便:
* 把数据库初始化脚本打包到镜像中
* 这样每次部署一个新的 mysql 实例时,可以自动初始化 OCP 所需要的表结构
* 把自定义的数据库配置文件 my.cnf 打包到镜像中
* 设置环境变量 <Badge type="warning">本文档不涉及</Badge>
### auth-center-mysql
* 在 master 节点上,执行命令 `cd /root/open-capacity-platform/sql` 切换当前目录。
> 假设您已经完成了 [准备OCP的构建环境和部署环境](./prepare.html)
* 执行命令 `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
如果使用私有仓库,则应该按照如下格式填写镜像名:
<font color="blue" weight="500">my-registry.example.com</font>:<font color="green" weight="500">5000</font>/<font color="purple" weight="500">example</font>/<font color="red" weight="500">auth-center-mysql</font>:<font color="brown" weight="500">latest</font>
* 蓝色部分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 | |
| 环境变量 | <span style="color: blue;">MYSQL_ROOT_PASSWORD=</span>root | 参考 [mysql官方镜像](https://hub.docker.com/_/mysql) |
| Service | ClusterIP集群内访问<br />协议:`TCP` 服务端口: `3306` 容器端口: `3306` | |
::: tip 持久化
* 将 mysql 的容器内路径 `/var/lib/mysql` 映射到外部数据卷,可以使数据持久保存,请参考 [数据卷](/learning/k8s-intermediate/persistent/volume.html)
* 为了保持教程的简洁,此处并没有为 `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连接应用程序](/learning/k8s-intermediate/service/connecting.html)
:::
![Kubernetes教程在K8S上部署mysql](./mysql.assets/image-20190927173409339.png)
* 点击 **保存**
* 点击 **应用**
* 点击 **完成**
### 验证auth-center-mysql
* 在 Kuboard 中进入 `auth-center-mysql` 的终端界面,执行如下命令:
``` sh
mysql -uroot -proot
> show databases;
> use oauth-center;
> show tables;
```
* 可以验证oauth-center 的数据库表结构已经完成初始化,输出结果如下图所示:
![Kubernetes教程在K8S上部署mysql_验证结果](./mysql.assets/image-20190927173921129.png)
### 部署user-center-mysql
按照同样的方式部署 user-center-mysql因此本章节不在截图只将必要的步骤和参数进行罗列
* 点击 **创建工作负载** 按钮
* 填写表单,如下表所示:
| 字段名称 | 填写内容 | 说明 |
| -------- | ------------------------------------------------------------ | ---------------------------------------------------- |
| 服务类型 | StatefulSet | |
| 服务分层 | 持久层 | |
| 服务名称 | user-center | |
| 服务描述 | 用户中心数据库 | |
| 副本数量 | 1 | 请填写1 |
| 容器名称 | user-center-mysql | |
| 镜像 | ocpsample/user-center-mysql:latest | |
| 抓取策略 | Always | |
| 环境变量 | <span style="color: blue;">MYSQL_ROOT_PASSWORD=</span>root | 参考 [mysql官方镜像](https://hub.docker.com/_/mysql) |
| Service | ClusterIP集群内访问<br />协议:`TCP` 服务端口: `3306` 容器端口: `3306` | |
- 点击 **保存**
- 点击 **应用**
- 点击 **完成**
### 验证user-center-mysql
* 在 Kuboard 中进入 `user-center-mysql` 的终端界面,执行如下命令:
```sh
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 | |
| 环境变量 | <span style="color: blue;">MYSQL_ROOT_PASSWORD=</span>root | 参考 [mysql官方镜像](https://hub.docker.com/_/mysql) |
| Service | ClusterIP集群内访问<br />协议:`TCP` 服务端口: `3306` 容器端口: `3306` | |
- 点击 **保存**
- 点击 **应用**
- 点击 **完成**
### 验证log-center-mysql
* 在 Kuboard 中进入 `log-center-mysql` 的终端界面,执行如下命令:
```sh
mysql -uroot -proot
> show databases;
> use log-center;
> show tables;
```