javascript
在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics
阿里云Kubernetes服務(wù)運行SpringCloud
osswangxining大俠在 阿里云Kubernetes SpringCloud 實踐進(jìn)行時 系列文章中系統(tǒng)地介紹了如何在阿里云Kubernetes容器服務(wù)上搭建基于SpringCloud的微服務(wù)應(yīng)用,其中涉及了從Eureka注冊,配置中心,網(wǎng)關(guān)Zuul,到服務(wù)追蹤和容錯等諸多內(nèi)容,洋洋灑灑六篇文章,讓你充分領(lǐng)略在阿里云Kubernetes上運行SpringCloud的風(fēng)采。
實踐進(jìn)行時系列展示了SpringCloud的基本組件及如何部署和使用,本文則是從另外一個角度讓大家了解一個具有一定復(fù)雜度的應(yīng)用是如何部署到阿里云Kubernetes容器服務(wù)上的。我們準(zhǔn)備從基礎(chǔ)設(shè)施和應(yīng)用部署的不同組合方式上來展示一個復(fù)雜的SpringCloud應(yīng)用是如何部署到容器服務(wù)上的。
(一)基礎(chǔ)設(shè)施(Eureka,ConfigServer)和應(yīng)用一起部署。
(二)在容器服務(wù)上搭建好基礎(chǔ)設(shè)施后,再部署應(yīng)用
示例應(yīng)用PiggyMetrics
PiggyMetrics是github上的一個SpringCloud應(yīng)用項目,Star數(shù)目3400多。這個項目主體DockerCompose部署,包含了完整的源代碼以及構(gòu)建好的容器鏡像,是非常不錯的SpringCloud容器化示例。
這個項目包含了3個業(yè)務(wù)微服務(wù),分別是統(tǒng)計服務(wù)(Statistics Service)、賬戶服務(wù)(Account Service)和通知服務(wù)(Notification Service)。每個服務(wù)分別對應(yīng)一個獨立的MongoDB。微服務(wù)架構(gòu)圖示(采用作者原圖)如下:
SpringCloud基礎(chǔ)組件為負(fù)責(zé)服務(wù)注冊和registry服務(wù)(Eureka服務(wù)注冊),config服務(wù)(配置管理),gateway(API網(wǎng)關(guān),同時也是JavaScript Web界面),monitor服務(wù)(Hystrix Dashboard/Turbine)等。
本文所用到的部署描述文件地址在github上,感興趣的讀者請移步 https://github.com/binblee/PiggyMetrics/tree/master/charts。
(一)用helm部署一鍵部署所有服務(wù)
PiggyMetrics的部署采用docker-compose YAML部署到單機(jī),如果要部署到Kubernetes上,需要轉(zhuǎn)換成為K8S deployment YAML。社區(qū)有個docker compose轉(zhuǎn)k8s的轉(zhuǎn)換工具kompose,可以一鍵將compose文件轉(zhuǎn)換為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讀者可以參考已經(jīng)更改好的compose文件 https://github.com/binblee/PiggyMetrics/blob/master/charts/docker-compose.yml。
在執(zhí)行kompose之前還需要設(shè)定PiggyMetrics部署所需的環(huán)境變量。
$ 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 -ckompose的選項-c可以生成helm chart格式目錄結(jié)果,讀者可以用helm命令行把所有服務(wù)全部部署上去。
charts $ helm install -n piggymetrics piggymetrics/部署后可以看到類似如下輸出:
NAME: piggymetrics LAST DEPLOYED: Fri Jul 13 23:20:30 2018 NAMESPACE: default STATUS: DEPLOYEDRESOURCES: ==> 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 1scharts $讀者可以在自己的Minikube上嘗試,或者部署到阿里云容器服務(wù)Kubernetes版:https://www.aliyun.com/product/kubernetes。部署完成后進(jìn)入服務(wù)列表頁面,可以看到所有服務(wù)以及對應(yīng)LoadBalancer類型Service對外暴露的訪問地址及端口號。
點擊registry service可以進(jìn)入到PiggyMetrics的界面。
PiggyMetrics是個人理財服務(wù),用戶輸入收入和支出后可以展現(xiàn)漂亮的報表。不過現(xiàn)在使用會有一個問題:在使用過程中會出現(xiàn)“An error during data saving. Please, try again later”的錯誤提示,原因是PiggyMetrics所依賴匯率計算http://api.fixer.io API發(fā)生變化,而PiggyMetrics鏡像還沒有更新的緣故。
訪問registry service,可以看到所有注冊到Eureka Server上的服務(wù)。
將PiggyMetrics刪除,為下個實驗做準(zhǔn)備:
charts $ helm delete --purge piggymetrics release "piggymetrics" deleted(二)部署應(yīng)用到已有SpringCloud基礎(chǔ)組件的環(huán)境中
上面我們看到的是如何將全部基礎(chǔ)組件(Eureka,Zuul,ConfigServer,Hystrix Dashboard)和業(yè)務(wù)應(yīng)用(gateway,notification,statistics)都統(tǒng)一用一個helm chart部署成功。在實際工作中,更常見的情況是在集群中已經(jīng)有了Eureka等基礎(chǔ)組件,用戶日志只需部署和升級維護(hù)業(yè)務(wù)應(yīng)用。
在阿里云Kubernetes版中的應(yīng)用目錄中包含了SpringCloud基本組件。
我們可以先從應(yīng)用目錄部署好Eureka服務(wù)。點擊ack-springcloud-eureka組件,進(jìn)入如下界面:
讀者也可以進(jìn)入?yún)?shù)頁面,查看或更改配置:
在這里選擇不改變?nèi)魏螀?shù)直接部署。部署成功后進(jìn)入阿里云Kubernetes控制臺服務(wù)頁面,可以看到,EurekaServer有兩個示例,對外暴露的服務(wù)地址為ack-springcloud-eureka-default-ack-springcloud-eureka-svc。
回想起在PiggyMetrics中,所有容器啟動時自動訪問的的Eureka服務(wù)名為registry。一般情況下,可以在鏡像中把Eureka服務(wù)名做為參數(shù)傳遞,但是在這個實驗中我們不準(zhǔn)備改變?nèi)魏未a和鏡像,所以可以采取另外一個措施,那就是為把Eureka再多暴露一個叫registry的服務(wù)。
利用容器服務(wù)部署如下YAML文件,注意,如果讀者在應(yīng)用目錄部署過程中更改了發(fā)布名稱,下面的內(nèi)容也要做相應(yīng)調(diào)整。
apiVersion: v1 kind: Service metadata:name: registry spec:type: LoadBalancerports:- port: 8761targetPort: 8761selector:app: ack-springcloud-eureka-default-ack-springcloud-eurekarelease: ack-springcloud-eureka-default您可以利用kubectl命令行:
$ kubectl apply -f registry-svc.yml或者容器服務(wù)控制臺界面完成:
部署完成后再次進(jìn)入服務(wù)頁面,可以看到reigstry創(chuàng)建成功:
好了,下面我們把PiggyMetrics的helm chart目錄拷貝到一個新的目錄piggymetrics-no-eureka,刪除以下兩個文件。
templates/registry-deployment.yaml templates/registry-service.yaml這兩個文件是分別部署Eureka deployment/svc的YAML文件,由于我們在前面已經(jīng)用應(yīng)用目錄部署成功了一個新的registry服務(wù)作為基礎(chǔ)SpringCloud組件,這里就不要再重復(fù)部署了。
執(zhí)行helm命令再次部署PiggyMetrics。
$ helm install -n piggymetrics piggymetrics-no-eureka/所有服務(wù)啟動成功后,訪問registry服務(wù),可以看到所有PiggyMetrics服務(wù)均已正確地注冊到了EurekaServer中。
BINGO!PiggyMetrics應(yīng)用已經(jīng)部署到了含EurekaServer的環(huán)境上。訪問gateway,讀者可以看到熟悉的登陸界面。
示例代碼
本文所用到的部署描述文件地址https://github.com/binblee/PiggyMetrics/tree/master/charts。
PiggyMetrics 代碼地址在 https://github.com/sqshq/PiggyMetrics。
討論: 可以考慮修改源代碼中的調(diào)用解決api.fixer.io調(diào)用失敗的問題。例如把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調(diào)用
$.getJSON("https://exchangeratesapi.io/api/latest?base=RUB", function( data ) {。
不過這個改動超越了本文的范圍,感興趣的讀者可以自行修改并重新構(gòu)建鏡像再測試。
小結(jié)
本文展示了將PiggyMetrics SpringCloud應(yīng)用部署到阿里云容器服務(wù)上。阿里云容器服務(wù)的應(yīng)用目錄中提供常見的SpringCloud基礎(chǔ)組件,用戶可以很方便的部署一個SpringCloud環(huán)境。關(guān)于更多阿里云容器服務(wù)Kubernetes的內(nèi)容,讀者可以訪問https://www.aliyun.com/product/kubernetes。
總結(jié)
以上是生活随笔為你收集整理的在阿里云Kubernetes上运行SpringCloud示例PiggyMetrics的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现Java集合迭代的高性能
- 下一篇: JS学习--Date对象