Knative 实战:一个微服务应用的部署
作者 | 元毅 阿里云智能事業(yè)群高級(jí)開發(fā)工程師
在 Istio 中提供了一個(gè) Bookinfo 的示例,用于演示微服務(wù)之間的調(diào)用,那么如何在 Knative 中部署這個(gè)示例呢?本文將會(huì)給大家介紹一下在 Knative 中部署 Bookinfo 微服務(wù)以及查看調(diào)用鏈追蹤信息。
背景
Bookinfo 這個(gè)示例應(yīng)用由 4 個(gè)微服務(wù)組成。 Bookinfo 應(yīng)用架構(gòu)圖如下:
- productpage 微服務(wù): 調(diào)用 details 微服務(wù)和 reviews 微服務(wù)來(lái)生成頁(yè)面
- details 微服務(wù): 包含圖書的詳細(xì)信息
- reviews 微服務(wù): 提供圖書的評(píng)論功能,也可以調(diào)用 rating 微服務(wù)給圖書評(píng)分
- ratings 微服務(wù): 提供圖書的評(píng)分功能
另外 reviews 微服務(wù)目前有 3 個(gè)版本:
- v1 不會(huì)調(diào)用 ratings 微服務(wù)
- v2 調(diào)用 ratings 微服務(wù),并將評(píng)分顯示 1~5 個(gè)黑色星星
- v3 調(diào)用 ratings 微服務(wù),并將每個(gè)評(píng)分顯示為 1~5 個(gè)紅色星星
準(zhǔn)備
- 已部署 Knative。可參考:阿里云容器服務(wù)部署 Knative
- 已開啟鏈路追蹤 Tracing Analysis服務(wù),可參考:在Knative 上實(shí)現(xiàn) Tracing 分布式追蹤
部署
首先開啟 Istio Sidecar 注入,我們?cè)?default 命名空間打上 istio-injection=enabled 的 Label:
kubectl label namespace default istio-injection=enabled部署 Bookinfo Knative Service 服務(wù), 簡(jiǎn)單直接通過 yaml 文件一鍵拉起來(lái),bookinfo.yaml:
apiVersion: serving.knative.dev/v1 kind: Service metadata:name: details-v1namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-details-v1:1.15.0ports:- containerPort: 9080 --- apiVersion: serving.knative.dev/v1 kind: Service metadata:name: ratings-v1namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-ratings-v1:1.15.0ports:- containerPort: 9080--- apiVersion: serving.knative.dev/v1 kind: Service metadata:name: reviews-v1namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v1:v1-aliyunports:- containerPort: 9080--- apiVersion: serving.knative.dev/v1 kind: Service metadata:name: reviews-v2namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v2:v1-aliyunports:- containerPort: 9080env:- name: SERVICES_DOMAINvalue: default.svc.cluster.local- name: RATINGS_HOSTNAMEvalue: ratings-v1 --- apiVersion: serving.knative.dev/v1 kind: Service metadata:name: reviews-v3namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v3:v1-aliyunports:- containerPort: 9080env:- name: SERVICES_DOMAINvalue: default.svc.cluster.local- name: RATINGS_HOSTNAMEvalue: ratings-v1 --- apiVersion: serving.knative.dev/v1 kind: Service metadata:name: productpage-v1namespace: default spec:template:spec:containers:- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/productpage:v1-aliyunports:- containerPort: 9080env:- name: SERVICES_DOMAINvalue: default.svc.cluster.local- name: DETAILS_HOSTNAMEvalue: details-v1- name: RATINGS_HOSTNAMEvalue: ratings-v1- name: REVIEWS_HOSTNAMEvalue: reviews-v2這里需要說明幾點(diǎn):
-
productpage 環(huán)境變量設(shè)置:
- SERVICES_DOMAIN:微服務(wù)直接通過內(nèi)部訪問域名進(jìn)行訪問,這里設(shè)置域名后綴為:default.svc.cluster.local
- DETAILS_HOSTNAME:設(shè)置為 details-v1
- RATINGS_HOSTNAME:設(shè)置為 ratings-v1
- REVIEWS_HOSTNAME: 這里設(shè)置 reviews-v2
-
reviews v2, v3 環(huán)境變量設(shè)置。由于 v2 和 v3 需要訪問 rate 進(jìn)行評(píng)分, 因此需要設(shè)置對(duì)應(yīng)的環(huán)境變量:
- SERVICES_DOMAIN:微服務(wù)直接通過內(nèi)部訪問域名進(jìn)行訪問,這里設(shè)置域名后綴為:default.svc.cluster.local
- RATINGS_HOSTNAME:設(shè)置為 ratings-v1
執(zhí)行命令:
# kubectl apply -f bookinfo.yaml查看執(zhí)行結(jié)果:
# kubectl get kservice productpage-v1 http://productpage-v1.default.knative.kuberun.com productpage-v1-s4drn productpage-v1-s4drn True ratings-v1 http://ratings-v1.default.knative.kuberun.com ratings-v1-bsvb2 ratings-v1-bsvb2 True details-v1 http://details-v1.default.knative.kuberun.com details-v1-dj47j details-v1-dj47j True reviews-v1 http://reviews-v1.default.knative.kuberun.com reviews-v1-q5wz4 reviews-v1-q5wz4 True reviews-v2 http://reviews-v2.default.knative.kuberun.com reviews-v2-5r7mm reviews-v2-5r7mm True reviews-v3 http://reviews-v3.default.knative.kuberun.com reviews-v3-s2v6j reviews-v3-s2v6j True通過頁(yè)面進(jìn)行訪問,說明服務(wù)訪問正常:
微服務(wù)調(diào)用鏈
一般情況下,用戶比較關(guān)注微服務(wù)中的調(diào)用鏈信息,通過 Tracing Analysis 服務(wù),我們可以方便的查看服務(wù)調(diào)用鏈。
首先我們進(jìn)行一次服務(wù)訪問,在 productpage 頁(yè)面,點(diǎn)擊?Normal user。
可以看到 Book Details ?和 Book Reviews 信息。productpage 服務(wù)依次會(huì)調(diào)用:details、reviews 和 ratings 服務(wù)。
接下來(lái)登錄 Tracing Analysis 服務(wù)控制臺(tái),選擇【應(yīng)用列表】,點(diǎn)擊 productpage.default。
選擇 調(diào)用鏈分析 頁(yè)簽,可以查看服務(wù)調(diào)用鏈信息。
結(jié)論
通過上面的介紹,我們可以在 Knative 中輕松實(shí)現(xiàn)微服務(wù)部署,并且結(jié)合 Tracing Analysis 服務(wù)可以滿足部署生產(chǎn)級(jí)別服務(wù)訴求。
歡迎加入 Knative 交流群
作者簡(jiǎn)介:元毅,阿里云容器平臺(tái)高級(jí)開發(fā)工程師,負(fù)責(zé)阿里云容器平臺(tái) Knative 相關(guān)工作。
了解 ACK 容器服務(wù),請(qǐng)查看:https?:?//www.aliyun.com/product/kubernetes
“ 阿里巴巴云原生微信公眾號(hào)(ID:Alicloudnative)關(guān)注微服務(wù)、Serverless、容器、Service Mesh等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)公眾號(hào)。”
總結(jié)
以上是生活随笔為你收集整理的Knative 实战:一个微服务应用的部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Helm 3 发布 | 云原生生态周报
- 下一篇: 阿里巴巴的云原生应用开源探索与实践