使用 Kubernetes 執行 Bookinfo
此模組向您展示一個由四個以不同程式設計語言撰寫的微服務組成的應用程式:productpage
、details
、ratings
和 reviews
。我們將組成的應用程式稱為 Bookinfo
,您可以在 Bookinfo 範例頁面上了解更多資訊。
Bookinfo 範例顯示應用程式的最終狀態,其中 reviews
微服務有三個版本:v1
、v2
、v3
。在此模組中,應用程式僅使用 reviews
微服務的 v1
版本。接下來的模組將透過部署較新版本的 reviews
微服務來增強應用程式。
部署應用程式和測試 Pod
設定
MYHOST
環境變數以保存應用程式的 URL$ export MYHOST=$(kubectl config view -o jsonpath={.contexts..namespace}).bookinfo.com
瀏覽
bookinfo.yaml
。這是應用程式的 Kubernetes 部署規範。請注意服務和部署。將應用程式部署到您的 Kubernetes 叢集
$ kubectl apply -l version!=v2,version!=v3 -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created
檢查 Pod 的狀態
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-6d86fd9949-q8rrf 1/1 Running 0 10s productpage-v1-c9965499-tjdjx 1/1 Running 0 8s ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 9s reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 9s
在四個 Pod 達到
Running
狀態後,您可以擴展部署。為了讓每個微服務的每個版本在三個 Pod 中執行,請執行以下命令$ kubectl scale deployments --all --replicas 3 deployment.apps/details-v1 scaled deployment.apps/productpage-v1 scaled deployment.apps/ratings-v1 scaled deployment.apps/reviews-v1 scaled
檢查 Pod 狀態。請注意,每個微服務都有三個 Pod
$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-6d86fd9949-fr59p 1/1 Running 0 50s details-v1-6d86fd9949-mksv7 1/1 Running 0 50s details-v1-6d86fd9949-q8rrf 1/1 Running 0 1m productpage-v1-c9965499-hwhcn 1/1 Running 0 50s productpage-v1-c9965499-nccwq 1/1 Running 0 50s productpage-v1-c9965499-tjdjx 1/1 Running 0 1m ratings-v1-7bf577cb77-cbdsg 1/1 Running 0 50s ratings-v1-7bf577cb77-cz6jm 1/1 Running 0 50s ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 1m reviews-v1-77c65dc5c6-5wt8g 1/1 Running 0 49s reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 1m reviews-v1-77c65dc5c6-r55tl 1/1 Running 0 49s
在服務達到
Running
狀態後,部署一個測試 Pod,curl,用於向您的微服務傳送請求$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/curl/curl.yaml
為了確認 Bookinfo 應用程式正在執行,請從您的測試 Pod 使用 curl 命令向其傳送請求
$ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -c curl -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
啟用對應用程式的外部存取
當您的應用程式運行後,請啟用叢集外部的客戶端來存取它。成功設定以下步驟後,您就可以從筆記型電腦的瀏覽器存取該應用程式。
設定 Kubernetes Ingress 資源並存取您的應用程式網頁
建立一個 Kubernetes Ingress 資源
$ kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: bookinfo annotations: kubernetes.io/ingress.class: istio spec: rules: - host: $MYHOST http: paths: - path: /productpage pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /login pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /logout pathType: Prefix backend: service: name: productpage port: number: 9080 - path: /static pathType: Prefix backend: service: name: productpage port: number: 9080 EOF
更新您的 /etc/hosts
設定檔
取得名為
bookinfo
的 Kubernetes ingress 的 IP 位址$ kubectl get ingress bookinfo
在您的
/etc/hosts
檔案中,將先前的 IP 位址新增到以下指令提供的主機條目中。您應該具有超級使用者權限,並可能使用sudo
來編輯/etc/hosts
。$ echo $(kubectl get ingress istio-system -n istio-system -o jsonpath='{..ip} {..host}') $(kubectl get ingress bookinfo -o jsonpath='{..host}')
存取您的應用程式
從命令列存取應用程式的首頁
$ curl -s $MYHOST/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
將以下指令的輸出貼到您的瀏覽器網址列中
$ echo http://$MYHOST/productpage
您應該會看到以下網頁
Bookinfo 網頁應用程式 觀察微服務如何互相呼叫。例如,
reviews
使用http://ratings:9080/ratings
URL 呼叫ratings
微服務。請參閱reviews
的程式碼private final static String ratings_service = "http://ratings:9080/ratings";
在另一個終端機視窗中設定一個無限迴圈,以將流量傳送到您的應用程式,模擬真實世界中持續的用戶流量
$ while :; do curl -s $MYHOST/productpage | grep -o "<title>.*</title>"; sleep 1; done <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> ...
您已準備好測試應用程式。