在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文介绍了如何在阿里云Kubernetes容器服务上运行PiggyMetrics示例应用,展示了如何利用Kubernetes部署和管理一个SpringCloud典型应用的过程。

阿里云Kubernetes服务运行SpringCloud

osswangxining大侠在 阿里云Kubernetes SpringCloud 实践进行时 系列文章中系统地介绍了如何在阿里云Kubernetes容器服务上搭建基于SpringCloud的微服务应用,其中涉及了从Eureka注册,配置中心,网关Zuul,到服务追踪和容错等诸多内容,洋洋洒洒六篇文章,让你充分领略在阿里云Kubernetes上运行SpringCloud的风采。

实践进行时系列展示了SpringCloud的基本组件及如何部署和使用,本文则是从另外一个角度让大家了解一个具有一定复杂度的应用是如何部署到阿里云Kubernetes容器服务上的。我们准备从基础设施和应用部署的不同组合方式上来展示一个复杂的SpringCloud应用是如何部署到容器服务上的。

(一)基础设施(Eureka,ConfigServer)和应用一起部署。

(二)在容器服务上搭建好基础设施后,再部署应用

示例应用PiggyMetrics

PiggyMetrics是github上的一个SpringCloud应用项目,Star数目3400多。这个项目主体DockerCompose部署,包含了完整的源代码以及构建好的容器镜像,是非常不错的SpringCloud容器化示例。

pm_login

这个项目包含了3个业务微服务,分别是统计服务(Statistics Service)、账户服务(Account Service)和通知服务(Notification Service)。每个服务分别对应一个独立的MongoDB。微服务架构图示(采用作者原图)如下:

pm_arch

SpringCloud基础组件为负责服务注册和registry服务(Eureka服务注册),config服务(配置管理),gateway(API网关,同时也是JavaScript Web界面),monitor服务(Hystrix Dashboard/Turbine)等。

本文所用到的部署描述文件地址在github上,感兴趣的读者请移步 https://github.com/binblee/PiggyMetrics/tree/master/charts

(一)用helm部署一键部署所有服务

PiggyMetrics的部署采用docker-compose YAML部署到单机,如果要部署到Kubernetes上,需要转换成为K8S deployment YAML。社区有个docker compose转k8s的转换工具kompose,可以一键将compose文件转换为k8s部署文件。

PiggyMetrics中的docker compose模版为2.1版kompose不支持,所以需要把compose文件改为版本2,去除kompose不支持的语法,如

    depends_on:
      config:
        condition: service_healthy  # 不支持 condition

增加k8s server type annotation:

    labels: 
      kompose.service.type: loadbalancer 

读者可以参考已经更改好的compose文件 https://github.com/binblee/PiggyMetrics/blob/master/charts/docker-compose.yml

在执行kompose之前还需要设定PiggyMetrics部署所需的环境变量。

$ export NOTIFICATION_SERVICE_PASSWORD=passw0rd
$ export CONFIG_SERVICE_PASSWORD=passw0rd
$ export STATISTICS_SERVICE_PASSWORD=passw0rd
$ export ACCOUNT_SERVICE_PASSWORD=passw0rd
$ export MONGODB_PASSWORD=passw0rd
$ kompose convert -f docker-compose.yml -o piggymetrics -c

kompose的选项-c可以生成helm chart格式目录结果,读者可以用helm命令行把所有服务全部部署上去。

charts $ helm install -n piggymetrics piggymetrics/

部署后可以看到类似如下输出:

NAME:   piggymetrics
LAST DEPLOYED: Fri Jul 13 23:20:30 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                  TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                         AGE
account-mongodb       ClusterIP     172.19.12.220  <none>       27017/TCP                       1s
account-service       ClusterIP     172.19.3.168   <none>       6000/TCP                        1s
auth-mongodb          ClusterIP     172.19.10.232  <none>       27017/TCP                       1s
auth-service          ClusterIP     172.19.7.184   <none>       5000/TCP                        1s
config                ClusterIP     172.19.7.86    <none>       8888/TCP                        1s
gateway               LoadBalancer  172.19.7.183   <pending>    4000:32457/TCP                  1s
monitoring            NodePort      172.19.8.129   <none>       9000:30688/TCP,8989:30437/TCP   1s
notification-mongodb  ClusterIP     172.19.0.154   <none>       27017/TCP                       1s
notification-service  ClusterIP     172.19.8.69    <none>       8000/TCP                        1s
rabbitmq              NodePort      172.19.8.192   <none>       5672:31438/TCP,15672:30001/TCP  1s
registry              LoadBalancer  172.19.12.23   <pending>    8761:32224/TCP                  1s
statistics-mongodb    ClusterIP     172.19.7.53    <none>       27017/TCP                       1s
statistics-service    ClusterIP     172.19.13.210  <none>       8888/TCP                        1s

==> v1beta1/Deployment
NAME                  DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
account-mongodb       1        0        0           0          1s
account-service       1        0        0           0          1s
auth-mongodb          1        0        0           0          1s
auth-service          1        0        0           0          1s
config                1        0        0           0          1s
gateway               1        0        0           0          1s
monitoring            1        0        0           0          1s
notification-mongodb  1        0        0           0          1s
notification-service  1        0        0           0          1s
rabbitmq              1        0        0           0          1s
registry              1        0        0           0          1s
statistics-mongodb    1        0        0           0          1s
statistics-service    1        0        0           0          1s

==> v1/Pod(related)
NAME                                  READY  STATUS             RESTARTS  AGE
account-mongodb-5c5dbb6d6c-b66r2      0/1    ContainerCreating  0         1s
account-service-7fd4976bfc-rngk5      0/1    ContainerCreating  0         1s
auth-mongodb-6555c4b88-d7mw4          0/1    ContainerCreating  0         1s
auth-service-7bdb99b5dc-l8sl5         0/1    ContainerCreating  0         1s
config-8555868f45-qsclf               0/1    ContainerCreating  0         1s
gateway-77857d9c49-dj7nt              0/1    ContainerCreating  0         1s
monitoring-85d97bcff5-lvl9w           0/1    ContainerCreating  0         1s
notification-mongodb-599648788-zfcl2  0/1    ContainerCreating  0         1s
notification-service-5d5859d7-q8x4g   0/1    ContainerCreating  0         1s
rabbitmq-545b846656-8mjpb             0/1    ContainerCreating  0         1s
registry-757db89bb4-2g9hh             0/1    ContainerCreating  0         1s


charts $

读者可以在自己的Minikube上尝试,或者部署到阿里云容器服务Kubernetes版:https://www.aliyun.com/product/kubernetes。部署完成后进入服务列表页面,可以看到所有服务以及对应LoadBalancer类型Service对外暴露的访问地址及端口号。

ack_console_svc_all

点击registry service可以进入到PiggyMetrics的界面。

PiggyMetrics是个人理财服务,用户输入收入和支出后可以展现漂亮的报表。不过现在使用会有一个问题:在使用过程中会出现“An error during data saving. Please, try again later”的错误提示,原因是PiggyMetrics所依赖汇率计算http://api.fixer.io API发生变化,而PiggyMetrics镜像还没有更新的缘故。

error_msg

访问registry service,可以看到所有注册到Eureka Server上的服务。

eureka

将PiggyMetrics删除,为下个实验做准备:

charts $ helm delete --purge piggymetrics
release "piggymetrics" deleted

(二)部署应用到已有SpringCloud基础组件的环境中

上面我们看到的是如何将全部基础组件(Eureka,Zuul,ConfigServer,Hystrix Dashboard)和业务应用(gateway,notification,statistics)都统一用一个helm chart部署成功。在实际工作中,更常见的情况是在集群中已经有了Eureka等基础组件,用户日志只需部署和升级维护业务应用。

在阿里云Kubernetes版中的应用目录中包含了SpringCloud基本组件。

ack_app_catalog

我们可以先从应用目录部署好Eureka服务。点击ack-springcloud-eureka组件,进入如下界面:

ack_deploy_eureka_1

读者也可以进入参数页面,查看或更改配置:

ack_deploy_eureka_2

在这里选择不改变任何参数直接部署。部署成功后进入阿里云Kubernetes控制台服务页面,可以看到,EurekaServer有两个示例,对外暴露的服务地址为ack-springcloud-eureka-default-ack-springcloud-eureka-svc

ack_eureka_svc_1

回想起在PiggyMetrics中,所有容器启动时自动访问的的Eureka服务名为registry。一般情况下,可以在镜像中把Eureka服务名做为参数传递,但是在这个实验中我们不准备改变任何代码和镜像,所以可以采取另外一个措施,那就是为把Eureka再多暴露一个叫registry的服务。

利用容器服务部署如下YAML文件,注意,如果读者在应用目录部署过程中更改了发布名称,下面的内容也要做相应调整。

apiVersion: v1
kind: Service
metadata:
  name: registry
spec:
  type: LoadBalancer
  ports:
    - port: 8761
      targetPort: 8761
  selector:
    app: ack-springcloud-eureka-default-ack-springcloud-eureka
    release: ack-springcloud-eureka-default

您可以利用kubectl命令行:

$ kubectl apply -f registry-svc.yml

或者容器服务控制台界面完成:

ack_deploy_registry_svc

部署完成后再次进入服务页面,可以看到reigstry创建成功:

ack_console_registry

好了,下面我们把PiggyMetrics的helm chart目录拷贝到一个新的目录piggymetrics-no-eureka,删除以下两个文件。

templates/registry-deployment.yaml
templates/registry-service.yaml

这两个文件是分别部署Eureka deployment/svc的YAML文件,由于我们在前面已经用应用目录部署成功了一个新的registry服务作为基础SpringCloud组件,这里就不要再重复部署了。

执行helm命令再次部署PiggyMetrics。

$ helm install -n piggymetrics piggymetrics-no-eureka/

所有服务启动成功后,访问registry服务,可以看到所有PiggyMetrics服务均已正确地注册到了EurekaServer中。

ack_eureka_pm

BINGO!PiggyMetrics应用已经部署到了含EurekaServer的环境上。访问gateway,读者可以看到熟悉的登陆界面。

示例代码

本文所用到的部署描述文件地址https://github.com/binblee/PiggyMetrics/tree/master/charts

PiggyMetrics 代码地址在 https://github.com/sqshq/PiggyMetrics

讨论: 可以考虑修改源代码中的调用解决api.fixer.io调用失败的问题。例如把https://github.com/sqshq/PiggyMetrics/blob/master/gateway/src/main/resources/static/js/launch.js 中的
$.getJSON("http://api.fixer.io/latest?base=RUB", function( data ) {

改为对exchangeratesapi.io调用

$.getJSON("https://exchangeratesapi.io/api/latest?base=RUB", function( data ) {

不过这个改动超越了本文的范围,感兴趣的读者可以自行修改并重新构建镜像再测试。

小结

本文展示了将PiggyMetrics SpringCloud应用部署到阿里云容器服务上。阿里云容器服务的应用目录中提供常见的SpringCloud基础组件,用户可以很方便的部署一个SpringCloud环境。关于更多阿里云容器服务Kubernetes的内容,读者可以访问https://www.aliyun.com/product/kubernetes

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
8天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
22天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
22天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
22天前
|
Kubernetes 算法 调度
阿里云 ACK FinOps成本优化最佳实践
本文源自2024云栖大会梁成昊演讲,讨论了成本优化策略的选择与实施。文章首先介绍了成本优化的基本思路,包括优化购买方式、调整资源配置等基础策略,以及使用弹性、资源混部等高级策略。接着,文章详细探讨了集群优化和应用优化的具体方法,如使用抢占式实例降低成本、通过资源画像识别并优化资源配置,以及利用智能应用弹性策略提高资源利用效率。
|
22天前
|
弹性计算 调度 数据中心
阿里云 ACK One 注册集群云上弹性:扩展业务新利器
随着企业数字化转型深入,传统IDC数据中心因物理容量限制,难以实现动态扩容,缺乏弹性能力。阿里云ACK One注册集群凭借其高度灵活性和丰富资源选择,成为解决此问题的最佳方案。通过与阿里云资源的整合,ACK One不仅实现了计算资源的按需扩展,提高了资源利用率,还通过按需付费模式降低了成本,使企业能够更高效地应对业务增长和高峰需求。
|
22天前
|
运维 Kubernetes Serverless
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
本文基于2024云栖大会田双坤的演讲,介绍了Kubernetes作为云原生操作系统的角色及其在各类任务中的应用,重点探讨了Argo Workflows在Kubernetes上编排并行任务的能力。面对自建Argo Workflows的挑战,如稳定性、成本和安全性等问题,阿里巴巴云推出了全托管的Serverless Argo工作流,提供全托管、免运维、可观测和易集成的特点,显著提升了任务编排的效率和稳定性。适用于数据处理、科学计算、自动驾驶仿真等多个领域。
|
22天前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
22天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
3月前
|
Kubernetes 监控 Cloud Native

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版