在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

摘要: 本文介紹瞭如何在阿里雲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容器化示例。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

這個項目包含了3個業務微服務,分別是統計服務(Statistics Service)、賬戶服務(Account Service)和通知服務(Notification Service)。每個服務分別對應一個獨立的MongoDB。微服務架構圖示(採用作者原圖)如下:

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

SpringCloud基礎組件為負責服務註冊和registry服務(Eureka服務註冊),config服務(配置管理),gateway(API網關,同時也是JavaScript Web界面),monitor服務(Hystrix Dashboard/Turbine)等。

(一)用helm部署一鍵部署所有服務

PiggyMetrics的部署採用docker-compose YAML部署到單機,如果要部署到Kubernetes上,需要轉換成為K8S deployment YAML。社區有個docker compose轉k8s的轉換工具kompose,可以一鍵將compose文件轉換為k8s部署文件。

$ 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 27017/TCP 1s

account-service ClusterIP 172.19.3.168 6000/TCP 1s

auth-mongodb ClusterIP 172.19.10.232 27017/TCP 1s

auth-service ClusterIP 172.19.7.184 5000/TCP 1s

config ClusterIP 172.19.7.86 8888/TCP 1s

gateway LoadBalancer 172.19.7.183 4000:32457/TCP 1s

monitoring NodePort 172.19.8.129 9000:30688/TCP,8989:30437/TCP 1s

notification-mongodb ClusterIP 172.19.0.154 27017/TCP 1s

notification-service ClusterIP 172.19.8.69 8000/TCP 1s

rabbitmq NodePort 172.19.8.192 5672:31438/TCP,15672:30001/TCP 1s

registry LoadBalancer 172.19.12.23 8761:32224/TCP 1s

statistics-mongodb ClusterIP 172.19.7.53 27017/TCP 1s

statistics-service ClusterIP 172.19.13.210 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對外暴露的訪問地址及端口號。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

點擊registry service可以進入到PiggyMetrics的界面。

PiggyMetrics是個人理財服務,用戶輸入收入和支出後可以展現漂亮的報表。不過現在使用會有一個問題:在使用過程中會出現“An error during data saving. Please, try again later”的錯誤提示,原因是PiggyMetrics所依賴匯率計算http://api.fixer.io API發生變化,而PiggyMetrics鏡像還沒有更新的緣故。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

訪問registry service,可以看到所有註冊到Eureka Server上的服務。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

將PiggyMetrics刪除,為下個實驗做準備:

charts $ helm delete --purge piggymetrics

release "piggymetrics" deleted

(二)部署應用到已有SpringCloud基礎組件的環境中

上面我們看到的是如何將全部基礎組件(Eureka,Zuul,ConfigServer,Hystrix Dashboard)和業務應用(gateway,notification,statistics)都統一用一個helm chart部署成功。在實際工作中,更常見的情況是在集群中已經有了Eureka等基礎組件,用戶日誌只需部署和升級維護業務應用。

在阿里雲Kubernetes版中的應用目錄中包含了SpringCloud基本組件。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

我們可以先從應用目錄部署好Eureka服務。點擊ack-springcloud-eureka組件,進入如下界面:

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

讀者也可以進入參數頁面,查看或更改配置:

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

在這裡選擇不改變任何參數直接部署。部署成功後進入阿里雲Kubernetes控制檯服務頁面,可以看到,EurekaServer有兩個示例,對外暴露的服務地址為ack-springcloud-eureka-default-ack-springcloud-eureka-svc。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

回想起在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

或者容器服務控制檯界面完成:

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

部署完成後再次進入服務頁面,可以看到reigstry創建成功:

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

好了,下面我們把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中。

在阿里雲Kubernetes上運行SpringCloud示例PiggyMetrics

BINGO!PiggyMetrics應用已經部署到了含EurekaServer的環境上。訪問gateway,讀者可以看到熟悉的登陸界面。

示例代碼

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

https://github.com/binblee/PiggyMetrics/tree/master/charts。

PiggyMetrics 代碼地址在

https://github.com/sqshq/PiggyMetrics。

小結

本文展示了將PiggyMetrics SpringCloud應用部署到阿里雲容器服務上。阿里雲容器服務的應用目錄中提供常見的SpringCloud基礎組件,用戶可以很方便的部署一個SpringCloud環境。關於更多阿里雲容器服務Kubernetes的內容,讀者可以訪問【瞭解更多】。


分享到:


相關文章: