Files
kuboard-press/learning/k8s-practice/spring-cloud/cloud-eureka.md
huanqing.shao b4a2a48480 Adsense
2019-10-12 20:01:03 +08:00

138 lines
4.4 KiB
Markdown
Raw 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.

---
description: Kubernetes教程_使用Kuboard在Kubernetes上部署spring_cloud服务注册发现组件eureka
---
# 部署cloud-eureka
<AdSenseTitle/>
本文所使用的代码请参考 [cloud-eureka](https://github.com/eip-work/kuboard-example/tree/master/cloud-eureka)
## 检查 cloud-eureka 项目的配置
**部署类型**
对于 cloud-eureka 项目,在部署到 Kubernetes 时,建议选择 StatefulSet 作为 Controller因为 StatefulSet 可以为其管理的容器组提供稳定的网络标识 [StatefulSet Pod Identity](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-identity),例如,如果 StatefulSet 的名字是 cloud-eureka副本数为 3 则 StatefulSet 将确保如下三个容器组的按照 cloud-eureka-0cloud-eureka-1cloud-eureka-2 的顺序启动和运行。
| 容器组名字 | HOSTNAME环境变量 | DNS name |
| -------------- | -------------------- | --------------------------- |
| cloud-eureka-0 | cloud-eureka-0 | cloud-eureka-0.cloud-eureka |
| cloud-eureka-1 | cloud-eureka-1 | cloud-eureka-1.cloud-eureka |
| cloud-eureka-2 | cloud-eureka-2 | cloud-eureka-2.cloud-eureka |
Eureka Server 要求将 Eureka 实例的 URL 以逗号分隔配置在 eureka.client.serviceUrl.defaultZone 字段中。请参考 [Spring Cloud Eureka Server Peer Awareness](https://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html#spring-cloud-eureka-server-peer-awareness)
结合 StatefulSet 的特性,在配置 eureka.client.serviceUrl.defaultZone 时,可使用如下类似的参数:
```yaml
eureka.client.serviceUrl.defaultZone: http://cloud-eureka-0.cloud-eureka:9200/eureka, http://cloud-eureka-1.cloud-eureka:9200/eureka, http://cloud-eureka-2.cloud-eureka:9200/eureka
```
**环境变量**
参考 cloud-eureka 项目的 [application.yaml](https://github.com/eip-work/kuboard-example/blob/master/cloud-eureka/src/main/resources/application.yml) 文件
``` yaml
spring:
application:
name: cloud-eureka
server:
port: 9200
management:
endpoints:
web.exposure.include: metrics
server:
port: 9500
eureka:
instance:
preferIpAddress: true
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: ${CLOUD_EUREKA_DEFAULT_ZONE}
server:
eviction-interval-timer-in-ms: 60000
enable-self-preservation: false
```
该项目中有一个值取自环境变量:
* CLOUD_EUREKA_DEFAULT_ZONE 这个参数必须通过环境变量进行配置
建议配置的值为:
`http://cloud-eureka-0.cloud-eureka:9200/eureka, http://cloud-eureka-1.cloud-eureka:9200/eureka, http://cloud-eureka-2.cloud-eureka:9200/eureka`
因为各微服务也需要用到 CLOUD_EUREKA_DEFAULT_ZONE 这个参数(请参考 部署 svc-example 章节),所以建议将该参数配置在 Kubernetes 的 ConfigMap 中最为便捷。
文件中没有配置 `eureka.instance.hostname`,该参数的默认取值通过 java.net.InetAddress 查找机器的 hostname。如前所示当我们使用 StatefulSet 部署 eureka 时hostname 为 cloud-eureka-0 / cloud-eureka-1 / cloud-eureka-2
**容器 Command 参数**
参考 cloud-eureka 项目的 [Dockerfile](https://github.com/eip-work/kuboard-example/blob/master/cloud-eureka/Dockerfile) 文件
```dockerfile
FROM eipwork/jdk:1.0.0
ARG JAR_FILE_NAME=cloud-eureka-0.0.1-SNAPSHOT.jar
ARG PORT=9200
ARG MANAGEMENT_PORT=9500
COPY ./target/lib /eip-work/lib
COPY ./target/$JAR_FILE_NAME.original /eip-work/app.jar
ENV CLASSPATH=/eip-work/lib
EXPOSE $PORT
EXPOSE $MANAGEMENT_PORT
WORKDIR /eip-work
ENTRYPOINT ["java", "-jar", "/eip-work/app.jar"]
```
ENTRYPOINT 中指定了启动命令为
``` sh
java -jar /eip-work/app.jar
```
因此在 kubernetes 中部署该容器时,无需额外指定 Command 参数。
**访问方式及互联网入口**
Eureka 运行在 9200 端口。Spring Cloud 的微服务组件通过 CLOUD_EUREKA_DEFAULT_ZONE 中的配置直接与 Eureka 容器组通信。
是否配置访问方式及互联网入口?
* 如果开发者不需要查看 Eureka 的 Web 界面,则
* 无需配置访问方式和互联网入口;
* 如果开发者需要查看 Eureka 的 Web 界面,则
* 配置集群内访问Type 为 ClusterIP 的 Service
* 容器端口为9200
## 部署 cloud-eureka
**创建ConfigMap**
**创建工作负载**
## 检查部署结果
**查看 Eureka 界面**