diff --git a/.vuepress/public/kuboard.rp b/.vuepress/public/kuboard.rp index b140b88..6bce0ff 100644 Binary files a/.vuepress/public/kuboard.rp and b/.vuepress/public/kuboard.rp differ diff --git a/learning/k8s-practice/ocp/build.md b/learning/k8s-practice/ocp/build.md index 6af32c9..aee60e1 100644 --- a/learning/k8s-practice/ocp/build.md +++ b/learning/k8s-practice/ocp/build.md @@ -21,6 +21,16 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微 * `project --> properties --> docker.host` 修改为 `unix:///var/run/docker.sock` * `project --> properties --> docker.image.prefix` 修改为 `ocpsample` (此处使用你在 https://hub.docker.com 的账号) + ::: tip + + 如果您使用自己的 docker 镜像仓库,您的 `docker.image.prefix` 要复杂一些,请参考 [使用私有仓库中的docker镜像](/learning/k8s-intermediate/private-registry.html)。具体而言,前缀应该由您的docker镜像仓库的多个参数组成,例如: + my-registry.example.com:5000/example + * 蓝色部分:registry 地址 + * 绿色部分:registry 端口 + * 紫色部分:repository 名字 + + ::: + ``` xml {11,12} 1.8 diff --git a/learning/k8s-practice/ocp/eureka-server.assets/image-20190926204825073.png b/learning/k8s-practice/ocp/eureka-server.assets/image-20190926204825073.png deleted file mode 100644 index 47c7ce1..0000000 Binary files a/learning/k8s-practice/ocp/eureka-server.assets/image-20190926204825073.png and /dev/null differ diff --git a/learning/k8s-practice/ocp/eureka-server.assets/image-20190926205118309.png b/learning/k8s-practice/ocp/eureka-server.assets/image-20190927104441574.png similarity index 51% rename from learning/k8s-practice/ocp/eureka-server.assets/image-20190926205118309.png rename to learning/k8s-practice/ocp/eureka-server.assets/image-20190927104441574.png index c333d6b..5bd0a84 100644 Binary files a/learning/k8s-practice/ocp/eureka-server.assets/image-20190926205118309.png and b/learning/k8s-practice/ocp/eureka-server.assets/image-20190927104441574.png differ diff --git a/learning/k8s-practice/ocp/eureka-server.assets/image-20190927140934092.png b/learning/k8s-practice/ocp/eureka-server.assets/image-20190927140934092.png new file mode 100644 index 0000000..8c77b9b Binary files /dev/null and b/learning/k8s-practice/ocp/eureka-server.assets/image-20190927140934092.png differ diff --git a/learning/k8s-practice/ocp/eureka-server.md b/learning/k8s-practice/ocp/eureka-server.md index 4f43887..5c7b3b6 100644 --- a/learning/k8s-practice/ocp/eureka-server.md +++ b/learning/k8s-practice/ocp/eureka-server.md @@ -10,7 +10,7 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微 * [准备OCP的构建环境和部署环境](/learning/k8s-practice/ocp/prepare.html) * [构建docker镜像并推送到仓库](/learning/k8s-practice/ocp/build.html) - + > 也可以使用 `ocpsample/eureka-server:latest` 镜像 * 理解 Spring Cloud Eureka 组件,请参考 [Eureka服务注册与发现](https://www.jianshu.com/p/c18d140ad9f6) @@ -57,7 +57,11 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微 * 使用 StatefulSet 部署 eureka-server,副本数量为 3 * 使用 OCP eureka-server 的 application-slave0.yml 这个 profile -* 使用环境变量覆盖 `eureka.client.service-url.defaultZone` 取值,将其设置为: `http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka` +* 使用环境变量覆盖 `eureka.client.service-url.defaultZone` 取值,将其设置为: `http://cloud-eureka-0.cloud-eureka.ocp.svc.cluster.local:1111/eureka,http://cloud-eureka-1.cloud-eureka.ocp.svc.cluster.local:1111/eureka,http://cloud-eureka-2.cloud-eureka.ocp.svc.cluster.local:1111/eureka` + ::: tip + 通过 cloud-eureka-0.cloud-eureka 也可以访问到对应的 POD,但是此处必须使用完整域名,否则 eureka-server 将不被认为是 available + ::: +* 使用环境变量覆盖 `eureka.instance.prefer-ip-address` 取值,将其设置为:`false` * 为 eureka-server 创建 Ingress,并分配域名 `cloud-eureka.ocp.demo.kuboard.cn` * 请参考 [Ingress通过互联网访问您的应用](/learning/k8s-intermediate/service/ingress.html#ingress) * 该域名由 `工作负载名`.`名称空间`.`集群名字`.`一级域名` 组成,这种命名规则下,只需要将 `*.demo.kuboard.cn` 的域名解析指向集群 Ingress Controller 的地址就可以,在测试环境中配置新的模块时非常方便。 @@ -81,14 +85,17 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微 | 容器名称 | eureka-server | | | 镜像 | ocpsample/eureka-server:latest | 也可以使用自己构建的镜像 | | 抓取策略 | Always | | - | 环境变量 |
eureka.client.service-url.defaultZone=http://cloud-eureka-0.cloud-eureka:1111/eureka,http://cloud-eureka-1.cloud-eureka:1111/eureka,http://cloud-eureka-2.cloud-eureka:1111/eureka
| | + | 环境变量 |
eureka.client.service-url.defaultZone=http://cloud-eureka-0.cloud-eureka.ocp.svc.cluster.local:1111/eureka,http://cloud-eureka-1.cloud-eureka.ocp.svc.cluster.local:1111/eureka,http://cloud-eureka-2.cloud-eureka.ocp.svc.cluster.local:1111/eureka
eureka.instance.prefer-ip-address=false
| | | Service | NodePort:
协议 `TCP` 服务端口 `1111`节点端口 `31111` 容器端口 `1111` | 可从节点端口访问 | - | Ingress | 域名:1cloud-eureka.ocp.demo.kuboard.cn1
路由配置: 映射URL `/` 服务端口 `1111` | 可通过域名访问 | + | Ingress | 域名:cloud-eureka.ocp.demo.kuboard.cn
路由配置: 映射URL `/` 服务端口 `1111` | 可通过域名访问 | + + ![Kubernetes教程:在K8S中部署SpringCloud](./eureka-server.assets/image-20190927104441574.png) - ![Kubernetes教程:在K8S中部署SpringCloud](./eureka-server.assets/image-20190926205118309.png) * 点击 **保存** 按钮 + * 点击 **应用** 按钮 + * 点击 **完成** 按钮 * 等待 eureka-server 完成部署 * 根据您服务器到 hub.docker.com 的网速不同,等候的时间约 1-5 分钟 @@ -106,4 +113,4 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微 eureka-server 界面如下图所示: -![image-20190926205939831](./eureka-server.assets/image-20190926205939831.png) +![Kubernetes教程:在K8S部署SpringCloud服务注册中心Eureka-Server](./eureka-server.assets/image-20190927140934092.png) diff --git a/learning/k8s-practice/ocp/index.md b/learning/k8s-practice/ocp/index.md index 95aae69..162aaab 100644 --- a/learning/k8s-practice/ocp/index.md +++ b/learning/k8s-practice/ocp/index.md @@ -21,6 +21,8 @@ Kuboard 网站将陆续 **连载** 如何使用 Kuboard 在 Kubernetes 上部署 * [构建docker镜像并推送到仓库](/learning/k8s-practice/ocp/build.html) * [部署顺序](/learning/k8s-practice/ocp/sequence.html) * [在K8S上部署eureka-server](/learning/k8s-practice/ocp/eureka-server.html) +* [在K8S上部署mysql](/learning/k8s-practice/ocp/mysql.html) +* [在K8S上部署redis] * [在K8S上部署auth-server] * [在K8S上部署user-center] * [在K8S上部署api-gateway] diff --git a/learning/k8s-practice/ocp/mysql.assets/image-20190927140239925.png b/learning/k8s-practice/ocp/mysql.assets/image-20190927140239925.png new file mode 100644 index 0000000..37873a8 Binary files /dev/null and b/learning/k8s-practice/ocp/mysql.assets/image-20190927140239925.png differ diff --git a/learning/k8s-practice/ocp/mysql.assets/image-20190927161544525.png b/learning/k8s-practice/ocp/mysql.assets/image-20190927161544525.png new file mode 100644 index 0000000..7e1b439 Binary files /dev/null and b/learning/k8s-practice/ocp/mysql.assets/image-20190927161544525.png differ diff --git a/learning/k8s-practice/ocp/mysql.assets/image-20190927173409339.png b/learning/k8s-practice/ocp/mysql.assets/image-20190927173409339.png new file mode 100644 index 0000000..e49477d Binary files /dev/null and b/learning/k8s-practice/ocp/mysql.assets/image-20190927173409339.png differ diff --git a/learning/k8s-practice/ocp/mysql.assets/image-20190927173921129.png b/learning/k8s-practice/ocp/mysql.assets/image-20190927173921129.png new file mode 100644 index 0000000..761f8dd Binary files /dev/null and b/learning/k8s-practice/ocp/mysql.assets/image-20190927173921129.png differ diff --git a/learning/k8s-practice/ocp/mysql.md b/learning/k8s-practice/ocp/mysql.md new file mode 100644 index 0000000..86ac996 --- /dev/null +++ b/learning/k8s-practice/ocp/mysql.md @@ -0,0 +1,176 @@ +--- +vssueId: 88 +layout: LearningLayout +description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud_open_capacity_platform微服务能力开放平台_部署mysql +--- + + +# 在K8S上部署mysql + +OCP 的 auth-center 和 user-center 都有自己的数据库,同时 auth-center、user-center 和 api-gateway 又都依赖于 redis 缓存服务。这使得我们的部署结构演变成下图所示: + +我们必须先完成 db-auth-center、db-user-center 和 redis 的部署,才能继续部署 auth-center 和 user-center。本文描述了如何部署 db-auth-center、db-user-center。 + +::: danger +将 mysql 部署到 K8S 中,可以非常便捷地搭建一套测试环境,但是,在生产环境里,并不建议直接将 mysql 部署到 K8S 上。 +::: + +

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

+ +## 构建并推送mysql镜像 + +OCP 要求 mysql 版本 5.7 以上,当我们在 K8S 上部署 mysql 时,将选择 [mysql 官方镜像](https://hub.docker.com/_/mysql) 并基于此镜像,构建自己的 mysql 镜像,以便: +* 把数据库初始化脚本打包到镜像中 + * 这样每次部署一个新的 mysql 实例时,可以自动初始化 OCP 所需要的表结构 +* 把自定义的数据库配置文件 my.cnf 打包到镜像中 本文档不涉及 +* 设置环境变量 本文档不涉及 + +### auth-center-mysql + +* 在 master 节点上,执行命令 `cd /root/open-capacity-platform/sql` 切换当前目录。 + +> 假设您已经完成了 [准备OCP的构建环境和部署环境](./prepare.html) + +* 执行命令 `vim dockerfile_auth-center` 以创建文件,其内容如下: + + ``` + FROM mysql:5.7.26 + 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 dockerfile_user-center` 以创建文件,其内容如下: + + ``` + FROM mysql:5.7.26 + ADD 01.user-center.sql /docker-entrypoint-initdb.d/01.user-center.sql + EXPOSE 3306 + ``` + +* 执行命令 `docker build -f dockerfile_user-center -t ocpsample/user-center-mysql:latest .` + +* 执行命令 `docker push ocpsample/user-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官方镜像](https://hub.docker.com/_/mysql) | + | Service | ClusterIP(集群内访问)
协议:`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 | | +| 环境变量 | MYSQL_ROOT_PASSWORD=root | 参考 [mysql官方镜像](https://hub.docker.com/_/mysql) | +| Service | ClusterIP(集群内访问)
协议:`TCP` 服务端口: `3306` 容器端口: `3306` | | + +- 点击 **保存** +- 点击 **应用** +- 点击 **完成** + +### 验证user-center-mysql + +* 在 Kuboard 中进入 `user-center-mysql` 的终端界面,执行如下命令: + + ```sh + mysql -uroot -proot + > show databases; + > use user-center; + > show tables; + ``` diff --git a/support/change-log/change-log-on-the-way.md b/support/change-log/change-log-on-the-way.md index dd32464..02fc7b4 100644 --- a/support/change-log/change-log-on-the-way.md +++ b/support/change-log/change-log-on-the-way.md @@ -19,7 +19,8 @@ Kuboard v1.0.x 的更新说明 - +* kubeadm 1.15升级到1.16 +* kuboard 使用 nfs * Service --> SessionAffinity diff --git a/support/index.md b/support/index.md index 1115bf6..cf09c97 100644 --- a/support/index.md +++ b/support/index.md @@ -7,6 +7,7 @@ description: Kubernetes教程_本文描述了如何获得Kuboard授权 ## Kuboard 授权声明 +* 许多网友在问,Kuboard收费么? * 使用 Kuboard 是 免费 的,无论您是用于学习还是用于生产 * 将来会推出 Kuboard Plus,当前所有的功能,将来仍然免费。Kuboard Plus 侧重点: * 更完善的权限管理(当前只区分集群管理员权限和只读权限)