diff --git a/.vuepress/config.js b/.vuepress/config.js index b8fa309..08c0ec0 100644 --- a/.vuepress/config.js +++ b/.vuepress/config.js @@ -85,6 +85,7 @@ module.exports = { collapsable: false, children: [ 'k8s-core-concepts', + 'quick-win', 'why-kuboard', 'concepts' ] diff --git a/micro-service/spring-cloud/cloud-eureka.md b/micro-service/spring-cloud/cloud-eureka.md index 0fd10bf..d7bbb79 100644 --- a/micro-service/spring-cloud/cloud-eureka.md +++ b/micro-service/spring-cloud/cloud-eureka.md @@ -1 +1,139 @@ -# 部署 cloud-eureka \ No newline at end of file +# 部署 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-0,cloud-eureka-1,cloud-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 + hostname: ${HOSTNAME} + 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 +``` + +该项目中有两个值取自环境变量: + +* HOSTNAME + + Kubernetes 自动配置,如前所述,实际运行时取值为 cloud-eureka-0,cloud-eureka-1,cloud-eureka-2 + +* 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 中最为便捷。 + + + +**容器 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 界面** + + + diff --git a/overview/quick-win.assets/image-20190731135811556.089b0e53.png b/overview/quick-win.assets/image-20190731135811556.089b0e53.png new file mode 100644 index 0000000..9b75d07 Binary files /dev/null and b/overview/quick-win.assets/image-20190731135811556.089b0e53.png differ diff --git a/overview/quick-win.assets/image-20190731225235232.png b/overview/quick-win.assets/image-20190731225235232.png new file mode 100644 index 0000000..9dce78c Binary files /dev/null and b/overview/quick-win.assets/image-20190731225235232.png differ diff --git a/overview/quick-win.md b/overview/quick-win.md new file mode 100644 index 0000000..3f14362 --- /dev/null +++ b/overview/quick-win.md @@ -0,0 +1,62 @@ +# 最快速的 Kubernetes+微服务 落地方案 + +## Kubernetes 落地难 + +**Kubernetes 是趋势** + +Kubernetes 是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 + +Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。 + +2016、2017年开始,各大互联网厂商就已经进行了各种容器化 + Kubernetes的尝试,请参考 [案例介绍](https://www.kubernetes.org.cn/tags/%E4%BC%81%E4%B8%9A%E6%A1%88%E4%BE%8B),各种实践证明 Kubernetes 越来越成熟。 + +**Kubernetes 门槛高** + +然而,Kubernetes 在更大范围内落地的过程却困难重重,原因主要在于其过高的学习门槛: + +* 基础知识要求多,Linux、网络、Docker等; +* 集群安装管理复杂; +* Kubernetes 的配置文件 YAML 冗长,对象类型繁多、关联关系复杂 + +请参考 [如何降低 Kubernetes 学习门槛](concepts) + +## Kuboard 助力 + +Kuboard 从以下几方面解决 Kubernetes 落地的难题: + +### Kubernetes 安装手册 + +通过对 Kubernetes 安装步骤的反复研究,提供了精简的 Kubernetes 安装手册,并且听取网友实际安装过程中的反馈,多次修改和优化,逐渐形成经过检验的、简洁的 Kubernetes 安装手册。请参考 [安装 Kubernetes 单Master节点](/install/install-k8s) , [安装 Kubernetes 高可用](/install/install-kubernetes)。 + +![image-20190731135811556](./quick-win.assets/image-20190731135811556.089b0e53.png) + +### 图形化管理界面 + +提炼 Kubernetes 各核心概念之间的关系,帮助用户理解如何配置 Kubernetes,并以此为依据设计了 Kuboard 工作负载编辑器。使用 Kuboard,用户无需手工编写和维护冗长的 YAML 文件,配合 Kuboard 提供的其他辅助手段,完全通过图形界面就可以实现微服务的部署和维护。 + +![image-20190731221630097](./concepts.assets/image-20190731221630097.png) + +### Spring Cloud 微服务部署实战案例 + +Kuboard 提供 Spring Cloud 在 Kubernetes 上部署的实战案例分析,手把手帮助技术团队完成 Spring Cloud 微服务在 Kubernetes 上的部署和维护。请参考 [Spring Cloud on Kubernetes](/micro-service/spring-cloud/) + +![image-20190721154650916](./why-kuboard.assets/image-20190721154650916.jpg) + +### 免费自助 + +这么好的东西卖多少钱?您完全无需为了使用此方案而进入漫长的商务谈判、内部审批流程。 + +使用 https://kuboard.cn 网站上提供的任何文档、资源、方案、软件 **完全免费**,已经有许多技术团队参考这些资料,结合其已有经验,顺利地完成 Kubernetes + 微服务的落地交付。碰到问题时,您也可以通过 Kuboard 社群获得支持。 + +![kuboard_qq.png](./README.assets/kuboard_qq.png) + +Kuboard 团队的盈利方式是为企业提供业务、IT咨询和定制化开发的服务。主要服务内容包括: +* 业务架构设计及领域建模 +* 应用架构设计、数据架构设计 +* 微服务架构设计 +* 微服务开发技术培训 +* DevOps 体系建设及培训 + +商务联系请表明您的意图: + +![kuboard_qq.png](./quick-win.assets/image-20190731225235232.png) \ No newline at end of file diff --git a/overview/why-kuboard.assets/image-20190721154650916.jpg b/overview/why-kuboard.assets/image-20190721154650916.jpg index f8f2dd7..f7c96ac 100644 Binary files a/overview/why-kuboard.assets/image-20190721154650916.jpg and b/overview/why-kuboard.assets/image-20190721154650916.jpg differ