博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics
阅读量:6489 次
发布时间:2019-06-24

本文共 6318 字,大约阅读时间需要 21 分钟。

阿里云Kubernetes服务运行SpringCloud

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

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

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

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

示例应用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上,感兴趣的读者请移步 。

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

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

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

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

增加k8s server type annotation:

labels:       kompose.service.type: loadbalancer

读者可以参考已经更改好的compose文件 。

在执行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可以生成格式目录结果,读者可以用命令行把所有服务全部部署上去。

charts $ helm install -n piggymetrics piggymetrics/

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

NAME:   piggymetricsLAST DEPLOYED: Fri Jul 13 23:20:30 2018NAMESPACE: defaultSTATUS: DEPLOYEDRESOURCES:==> v1/ServiceNAME                  TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                         AGEaccount-mongodb       ClusterIP     172.19.12.220  
27017/TCP 1saccount-service ClusterIP 172.19.3.168
6000/TCP 1sauth-mongodb ClusterIP 172.19.10.232
27017/TCP 1sauth-service ClusterIP 172.19.7.184
5000/TCP 1sconfig ClusterIP 172.19.7.86
8888/TCP 1sgateway LoadBalancer 172.19.7.183
4000:32457/TCP 1smonitoring NodePort 172.19.8.129
9000:30688/TCP,8989:30437/TCP 1snotification-mongodb ClusterIP 172.19.0.154
27017/TCP 1snotification-service ClusterIP 172.19.8.69
8000/TCP 1srabbitmq NodePort 172.19.8.192
5672:31438/TCP,15672:30001/TCP 1sregistry LoadBalancer 172.19.12.23
8761:32224/TCP 1sstatistics-mongodb ClusterIP 172.19.7.53
27017/TCP 1sstatistics-service ClusterIP 172.19.13.210
8888/TCP 1s==> v1beta1/DeploymentNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEaccount-mongodb 1 0 0 0 1saccount-service 1 0 0 0 1sauth-mongodb 1 0 0 0 1sauth-service 1 0 0 0 1sconfig 1 0 0 0 1sgateway 1 0 0 0 1smonitoring 1 0 0 0 1snotification-mongodb 1 0 0 0 1snotification-service 1 0 0 0 1srabbitmq 1 0 0 0 1sregistry 1 0 0 0 1sstatistics-mongodb 1 0 0 0 1sstatistics-service 1 0 0 0 1s==> v1/Pod(related)NAME READY STATUS RESTARTS AGEaccount-mongodb-5c5dbb6d6c-b66r2 0/1 ContainerCreating 0 1saccount-service-7fd4976bfc-rngk5 0/1 ContainerCreating 0 1sauth-mongodb-6555c4b88-d7mw4 0/1 ContainerCreating 0 1sauth-service-7bdb99b5dc-l8sl5 0/1 ContainerCreating 0 1sconfig-8555868f45-qsclf 0/1 ContainerCreating 0 1sgateway-77857d9c49-dj7nt 0/1 ContainerCreating 0 1smonitoring-85d97bcff5-lvl9w 0/1 ContainerCreating 0 1snotification-mongodb-599648788-zfcl2 0/1 ContainerCreating 0 1snotification-service-5d5859d7-q8x4g 0/1 ContainerCreating 0 1srabbitmq-545b846656-8mjpb 0/1 ContainerCreating 0 1sregistry-757db89bb4-2g9hh 0/1 ContainerCreating 0 1scharts $

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

ack_console_svc_all

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

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

error_msg

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

eureka

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

charts $ helm delete --purge piggymetricsrelease "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: v1kind: Servicemetadata:  name: registryspec:  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.yamltemplates/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,读者可以看到熟悉的登陆界面。

示例代码

本文所用到的部署描述文件地址。

PiggyMetrics 代码地址在 。

讨论: 可以考虑修改源代码中的调用解决api.fixer.io调用失败的问题。例如把 中的

$.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的内容,读者可以访问。

转载地址:http://mfouo.baihongyu.com/

你可能感兴趣的文章
SAP 开源 SCA 工具,扫描软件包依赖漏洞
查看>>
嵌入式Linux学习方法——给那些彷徨者(上)
查看>>
Spark中Lambda表达式的变量作用域
查看>>
Zabbix3.4.2的agent端配置和安装
查看>>
mysql备份时候两个很有用的参数
查看>>
SpringBoot(三)_controller的使用
查看>>
LinkedBlockingQueue源码解析
查看>>
Kotlin 1.3 新特性抢先看,协程已稳定并将向后兼容
查看>>
Parat-基于kali2018的远程管理工具
查看>>
ES6(正则扩展)
查看>>
从零玩转jQuery-核心函数和静态方法
查看>>
8月3日科技联播:新型VR头盔可令盲人重获光明 ,联通阿里成立合资企业“云粒智慧”...
查看>>
Jeknins的Pipline方式构建任务
查看>>
Python全栈 项目(电子词典、协程、pdb调试)
查看>>
(周期计划-7)常用集合的源码分析:ArrayList
查看>>
“分叉并商品化”,GitLab 和 Elastic 炮轰 AWS 的开源方法
查看>>
MKVToolNix v33.0.0 发布,MKV 视频编辑工具软件
查看>>
Egg 2.19.0 发布,阿里开源的企业级 Node.js 框架
查看>>
CentOS7.4安装Gitlab10.5.1及汉化
查看>>
Virtualbox以及VWare在Win10下的不兼容
查看>>