iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
DevOps

學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路系列 第 7

Day07 - Microservices 測試專案,Bookinfo 介紹及安裝

  • 分享至 

  • xImage
  •  

前言

前幾篇我們將 Kubernetes 及 Istio 環境架設完成。接下來這幾篇想先在不使用到 Istio 情況下,透過一個實際的 Microservices 專案,帶你了解 Kubernetes 能夠幫助你完成什麼。

Bookinfo Application 介紹

Bookinfo Application 為 Istio 提供的 Microservices 實驗環境,想了解完整程式碼可以到 Istio github 查看。

Bookinfo 由4種 Microservices 構成

  • Productpage: 以 Python 撰寫,會呼叫 Reviews 及 Details 元件,並渲染整個畫面
  • Details: 以 Ruby 撰寫,儲存書籍的資訊
  • Reviews: 以 Java 撰寫,儲存書籍的評論
  • Ratings: 以 Node.js 撰寫,儲存書籍的評分

而 Reviews 會有3個版本

  • Version v1 不會呼叫 Ratings 元件
  • Version v2 會呼叫 Ratings 元件,並以黑色星星顯示評分
  • Version v3 會呼叫 Ratings 元件,並以紅色星星顯示評分

https://ithelp.ithome.com.tw/upload/images/20220915/20139235nz8wUZhQYi.png

Bookinfo 專案完整呈現 Microservice 的特色,元件可由不同程式撰寫,並只負責單一功能,且開放API以供呼叫,最後由這些元件構成完整的服務,接下來我們就實際安裝看看吧!

安裝 Bookinfo Application

本篇參考 Bookinfo Application,因為還不會使用到 Istio 功能,怕混淆大家,所以先把 Istio 注入 Sidecar 的功能取消,此步驟只需將 Namespace 上的 istio-injection Label 清除即可

  1. 清除在 Default Namespace 上的 istio-injection Label
kubectl label namespace default istio-injection-
kubectl get namespace -L istio-injection

(輸出結果)

NAME              STATUS   AGE   ISTIO-INJECTION
default           Active   37h
...

bookinfo.yaml 已經定義好應用程式的 Services、Service accounts 及 Deployments 等 Kubernetes 元件,只需部屬此 Yaml 檔案即可完成安裝。

  1. 使用 kubectl apply -f <file> 部屬應用程式
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.15/samples/bookinfo/platform/kube/bookinfo.yaml
  1. 使用 kubectl get deployment 查看 Deployment
kubectl get deployment

(輸出結果)

# 等待直到所有 Deployment 都 Ready
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
details-v1       1/1     1            1           2m5s
productpage-v1   1/1     1            1           2m4s
ratings-v1       1/1     1            1           2m5s
reviews-v1       1/1     1            1           2m4s
reviews-v2       1/1     1            1           2m4s
reviews-v3       1/1     1            1           2m4s
  1. 使用 kubectl get service 查看 Service
kubectl get service

(輸出結果)

NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.109.235.146   <none>        9080/TCP   2m19s
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP    24h
productpage   ClusterIP   10.110.214.148   <none>        9080/TCP   2m18s
ratings       ClusterIP   10.110.225.213   <none>        9080/TCP   2m19s
reviews       ClusterIP   10.110.68.97     <none>        9080/TCP   2m18s

部屬完成後,就可以嘗試連接到應用程式。

  1. 使用 kubectl port-forward svc/<service> <server port>:<service port>,將流量打入 Productage
kubectl port-forward svc/productpage 8080:9080
  1. 在瀏覽器輸入網址連接至服務
# 在瀏覽器輸入
http://127.0.0.1:8080/productpage

https://ithelp.ithome.com.tw/upload/images/20220916/20139235ldqjP4rXB5.png

成功顯示畫面後可多重新整理幾次觀察變化

當元件掛了會發生什麼事?

Microservices 是由不同的元件組成完整服務,但若其中一個元件 Crash 掉,系統是否還能運作,接著就讓我們實驗看看吧!

https://ithelp.ithome.com.tw/upload/images/20220916/20139235mDtAOBoZ4D.png

頁面中的內容是由不同功能的元件藉由 API 組合而成

試著將 details 元件刪除,觀察會發生什麼事。

  1. 使用 kubectl delete deployment <name> 刪除 Deployment
kubectl delete deployment details-v1

(輸出結果)

deployment.apps "details-v1" deleted
  1. 重新 Forward Service
kubectl port-forward svc/productpage 8080:9080
  1. 在瀏覽器輸入網址連接至服務
http://127.0.0.1:8080/productpage

https://ithelp.ithome.com.tw/upload/images/20220916/20139235Edxz27ieXL.png

雖然 Details 元件被我們移除了,但頁面中的其他功能還是能正常顯示

總結

本篇我們完成了 Bookinfo 的安裝,並設計了簡單的實驗來了解當微服務中的元件掛了系統仍然有機會保持運作,下一篇將繼續介紹 Bookinfo 專案。


上一篇
Day06 - 在 Kubernetes 輕鬆建立 Istio 環境
下一篇
Day08 - 使用 Kubernetes 實現藍綠部屬 (Blue/Green Deployment)
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言