ocp-eureka-server
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 235 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 236 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 170 KiB |
@ -8,17 +8,102 @@ description: Kubernetes教程_使用Kuboard在Kubernetes上部署Spring_Cloud微
|
|||||||
|
|
||||||
本文假设您已经完成了 [在Kubernetes上部署SpringCloud-OCP](/learning/k8s-practice/ocp/) 教程的前序步骤:
|
本文假设您已经完成了 [在Kubernetes上部署SpringCloud-OCP](/learning/k8s-practice/ocp/) 教程的前序步骤:
|
||||||
* [准备OCP的构建环境和部署环境](/learning/k8s-practice/ocp/prepare.html)
|
* [准备OCP的构建环境和部署环境](/learning/k8s-practice/ocp/prepare.html)
|
||||||
|
|
||||||
* [构建docker镜像并推送到仓库](/learning/k8s-practice/ocp/build.html)
|
* [构建docker镜像并推送到仓库](/learning/k8s-practice/ocp/build.html)
|
||||||
> 也可以使用 ocpsample 已经推送上去的 docker 镜像
|
|
||||||
|
> 也可以使用 `ocpsample/eureka-server:latest` 镜像
|
||||||
|
* 理解 Spring Cloud Eureka 组件,请参考 [Eureka服务注册与发现](https://www.jianshu.com/p/c18d140ad9f6)
|
||||||
|
|
||||||
## 理解eureka-server
|
## 理解eureka-server
|
||||||
|
|
||||||
本章节参考 eureka-server 的 [代码仓库](https://gitee.com/owenwangwen/open-capacity-platform/tree/2.0.1/register-center/eureka-server),并着重从容器化部署的角度来理解 Spring Cloud eureka-server 以及 OCP 中 eureka-server 的配置文件。
|
本章节参考 eureka-server 的 [代码仓库](https://gitee.com/owenwangwen/open-capacity-platform/tree/2.0.1/register-center/eureka-server),并着重从容器化部署的角度来理解 Spring Cloud eureka-server 以及 OCP 中 eureka-server 的配置文件。
|
||||||
|
|
||||||
...待续...2019年9月25日 23:05
|
`open-capacity-platform/register-center/eureka-server/src/main/resources` 目录中包含了 eureka-server 的配置文件,如下所示:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
├── application-slave0.yml
|
||||||
|
├── application-slave1.yml
|
||||||
|
├── application-slave2.yml
|
||||||
|
├── application-slave3.yml
|
||||||
|
├── application.yml
|
||||||
|
└── bootstrap.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
其中, `application-slave0.yml`,`application-slave1.yml`,`application-slave2.yml`,`application-slave3.yml` 为 spring boot 的 4 个 profile 配置,他们之间最重要的差异在于以下两个字段:
|
||||||
|
|
||||||
|
* server.port
|
||||||
|
* eureka.client.defaultZone
|
||||||
|
|
||||||
|
而 `application.yml` 文件中则指定了 `application-slave0.yml` 为默认 profile。通过 `eureka.client.service-url.defaultZone` 字段不难看出:
|
||||||
|
|
||||||
|
* 配置文件 slave0 为一组,在运行 eureka-server 单节点时使用(该文件中还有一些特定于测试环境的配置项)
|
||||||
|
* 配置文件 slave1/slave2/slave3 为一组,在运行 eureka-server 高可用时使用,为了避免端口冲突,为每一个实例单独定义了 `server.port` 字段,通过 `--spring.profiles.active `启动参数为 eureka-server 的实例指定激活的配置文件
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 确定部署方案
|
## 确定部署方案
|
||||||
|
|
||||||
|
在 Kubernetes 中部署多个 eureka-server 的实例组成集群时,主要有如下考虑因素:
|
||||||
|
|
||||||
|
* 每个 eureka-server 需要被赋予一个唯一的 id,通过字段 `eureka.instance.instance-id` 指定。OCP 中,该字段的配置为 `${spring.application.name}:${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}`
|
||||||
|
* Kubernetes 为每一个 Pod 分配一个 IP 地址,此要求可以满足
|
||||||
|
* eureka-server 的每一个实例需要知道集群中其他实例的地址和端口号,通过字段 `eureka.client.serviceUrl.defaultZone` 指定
|
||||||
|
* 请参考 [StatefulSet的使用场景](/learning/k8s-intermediate/workload/wl-statefulset/#statefulset-使用场景) 以理解为何选择 StatefulSet 部署 eureka
|
||||||
|
* 请参考 [StatefulSet稳定的网络ID](/learning/k8s-intermediate/workload/wl-statefulset/basics.html#稳定的网络-id) 以理解 StatefulSet 如何为其中的 Pod 分配 DNS name
|
||||||
|
* eureka-server 的多个实例之间,不能存在端口冲突
|
||||||
|
* 请参考 [Kubernetes的网络模型](/learning/k8s-intermediate/service/connecting.html#kubernetes-的网络模型) 以理解 Kubernetes 中如何避免端口冲突
|
||||||
|
|
||||||
|
我们在 Kubernetes 上部署 eureka-server 时:
|
||||||
|
|
||||||
|
* 使用 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-server 创建 Ingress,并分配域名 `cloud-eureka.ocp.demo.kuboard.cn`
|
||||||
|
* 请参考 [Ingress通过互联网访问您的应用](/learning/k8s-intermediate/service/ingress.html#ingress)
|
||||||
|
* 该域名由 `工作负载名`.`名称空间`.`集群名字`.`一级域名` 组成,这种命名规则下,只需要将 `*.demo.kuboard.cn` 的域名解析指向集群 Ingress Controller 的地址就可以,在测试环境中配置新的模块时非常方便。
|
||||||
|
|
||||||
|
|
||||||
## 部署eureka-server
|
## 部署eureka-server
|
||||||
|
|
||||||
|
本教程将 eureka-server 及其他 OCP 组件部署到 `ocp` 名称空间,并假设您已经创建好了该名称空间,参考 [创建名称空间](/guide/cluster/namespace.html)
|
||||||
|
|
||||||
|
* 在 Kuboard 界面中进入 `ocp` 名称空间,并点击页头的按钮 `创建工作负载`,如下图所示:
|
||||||
|
|
||||||
|
填写表单:
|
||||||
|
|
||||||
|
| 字段名称 | 填写内容 | 备注 |
|
||||||
|
| -------- | ------------------------------------------------------------ | ---- |
|
||||||
|
| 服务类型 | StatefulSet | |
|
||||||
|
| 服务分层 | 中间件 | |
|
||||||
|
| 服务名称 | eureka | |
|
||||||
|
| 服务描述 | 服务注册中心 | |
|
||||||
|
| 副本数量 | 3 | |
|
||||||
|
| 容器名称 | eureka-server | |
|
||||||
|
| 镜像 | ocpsample/eureka-server:latest | 也可以使用自己构建的镜像 |
|
||||||
|
| 抓取策略 | Always | |
|
||||||
|
| 环境变量 | <div style="max-width: 600px;">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</div> | |
|
||||||
|
| Service | NodePort:<br />协议 `TCP` 服务端口 `1111`节点端口 `31111` 容器端口 `1111` | 可从节点端口访问 |
|
||||||
|
| Ingress | 域名:1cloud-eureka.ocp.demo.kuboard.cn1<br />路由配置: 映射URL `/` 服务端口 `1111` | 可通过域名访问 |
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
* 点击 **保存** 按钮
|
||||||
|
* 点击 **应用** 按钮
|
||||||
|
* 点击 **完成** 按钮
|
||||||
|
* 等待 eureka-server 完成部署
|
||||||
|
* 根据您服务器到 hub.docker.com 的网速不同,等候的时间约 1-5 分钟
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 查看部署结果
|
## 查看部署结果
|
||||||
|
|
||||||
|
按照上面的部署方式,有如下两种方式可以从浏览器访问 eureka-server 的界面:
|
||||||
|
|
||||||
|
* 使用域名: [http://cloud-eureka.ocp.demo.kuboard.cn/](http://cloud-eureka.ocp.demo.kuboard.cn/)
|
||||||
|
* 使用节点端口:http://${任意节点的IP地址}:31111
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
eureka-server 界面如下图所示:
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
@ -25,7 +25,7 @@ description: Kubernetes教程_本文描述了如何获得Kuboard授权
|
|||||||
|
|
||||||
### 微信即时答复
|
### 微信即时答复
|
||||||
|
|
||||||
* 非常能够理解大家学习 Kubernetes 的热情,QQ群人数有了一个快速的增长
|
* 由于大家学习 Kubernetes 的热情,QQ群人数有了一个快速的增长
|
||||||
* 为了给真正需要的人分配更多提问机会,设置了微信群聊
|
* 为了给真正需要的人分配更多提问机会,设置了微信群聊
|
||||||
* 必要时可提供 TeamViewer 远程协助
|
* 必要时可提供 TeamViewer 远程协助
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user