
作者 | 元毅 阿里云智能事業群高級開發工程師
在 Istio 中提供了一個 Bookinfo 的示例,用于演示微服務之間的呼叫,那么如何在 Knative 中部署這個示例呢?本文將會給大家介紹一下在 Knative 中部署 Bookinfo 微服務以及查看呼叫鏈追蹤資訊,
背景
Bookinfo 這個示例應用由 4 個微服務組成, Bookinfo 應用架構圖如下:

- productpage 微服務: 呼叫 details 微服務和 reviews 微服務來生成頁面
- details 微服務: 包含圖書的詳細資訊
- reviews 微服務: 提供圖書的評論功能,也可以呼叫 rating 微服務給圖書評分
- ratings 微服務: 提供圖書的評分功能
另外 reviews 微服務目前有 3 個版本:
- v1 不會呼叫 ratings 微服務
- v2 呼叫 ratings 微服務,并將評分顯示 1~5 個黑色星星
- v3 呼叫 ratings 微服務,并將每個評分顯示為 1~5 個紅色星星
準備
- 已部署 Knative,可參考:阿里云容器服務部署 Knative
- 已開啟鏈路追蹤 Tracing Analysis服務,可參考:在Knative 上實作 Tracing 分布式追蹤
部署
首先開啟 Istio Sidecar 注入,我們在 default 命名空間打上 istio-injection=enabled 的 Label:
kubectl label namespace default istio-injection=enabled
部署 Bookinfo Knative Service 服務, 簡單直接通過 yaml 檔案一鍵拉起來,bookinfo.yaml:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: details-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-details-v1:1.15.0
ports:
- containerPort: 9080
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ratings-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-ratings-v1:1.15.0
ports:
- containerPort: 9080
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v1:v1-aliyun
ports:
- containerPort: 9080
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v2
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v2:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: RATINGS_HOSTNAME
value: ratings-v1
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: reviews-v3
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/examples-bookinfo-reviews-v3:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: RATINGS_HOSTNAME
value: ratings-v1
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: productpage-v1
namespace: default
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/productpage:v1-aliyun
ports:
- containerPort: 9080
env:
- name: SERVICES_DOMAIN
value: default.svc.cluster.local
- name: DETAILS_HOSTNAME
value: details-v1
- name: RATINGS_HOSTNAME
value: ratings-v1
- name: REVIEWS_HOSTNAME
value: reviews-v2
這里需要說明幾點:
-
productpage 環境變數設定:
- SERVICES_DOMAIN:微服務直接通過內部訪問域名進行訪問,這里設定域名后綴為:default.svc.cluster.local
- DETAILS_HOSTNAME:設定為 details-v1
- RATINGS_HOSTNAME:設定為 ratings-v1
- REVIEWS_HOSTNAME: 這里設定 reviews-v2
-
reviews v2, v3 環境變數設定,由于 v2 和 v3 需要訪問 rate 進行評分, 因此需要設定對應的環境變數:
- SERVICES_DOMAIN:微服務直接通過內部訪問域名進行訪問,這里設定域名后綴為:default.svc.cluster.local
- RATINGS_HOSTNAME:設定為 ratings-v1
執行命令:
# kubectl apply -f bookinfo.yaml
查看執行結果:
# 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
通過頁面進行訪問,說明服務訪問正常:

微服務呼叫鏈
一般情況下,用戶比較關注微服務中的呼叫鏈資訊,通過 Tracing Analysis 服務,我們可以方便的查看服務呼叫鏈,
首先我們進行一次服務訪問,在 productpage 頁面,點擊 Normal user,

可以看到 Book Details 和 Book Reviews 資訊,productpage 服務依次會呼叫:details、reviews 和 ratings 服務,

接下來登錄 Tracing Analysis 服務控制臺,選擇【應用串列】,點擊 productpage.default,

選擇 呼叫鏈分析 頁簽,可以查看服務呼叫鏈資訊,

結論
通過上面的介紹,我們可以在 Knative 中輕松實作微服務部署,并且結合 Tracing Analysis 服務可以滿足部署生產級別服務訴求,
歡迎加入 Knative 交流群

作者簡介:元毅,阿里云容器平臺高級開發工程師,負責阿里云容器平臺 Knative 相關作業,
了解 ACK 容器服務,請查看:https : //www.aliyun.com/product/kubernetes
“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術公眾號,”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/55405.html
標籤:其他
