1. 總覽
您不一定可以手動或重新設計現有應用程式,以便在 Kubernetes 中運作。Migrate for Anthos 可協助您翻新現有應用程式,並在 Kubernetes 中運作。在本程式碼研究室中,您會使用 Migrate for Anthos 將託管於 Compute Engine 的現有網頁應用程式遷移至 Kubernetes Engine。
課程內容
- 如何在 Kubernetes 叢集中部署 Migrate for Anthos
- 如何以現有的 Compute Engine 執行個體,以有狀態的集合建立容器
- 如何將容器部署至 Kubernetes 並設定負載平衡器
軟硬體需求
- 已設定帳單的 Google Cloud 專案。如果沒有 Google 帳戶,請先建立帳戶。
2. 開始設定
本程式碼研究室不必在本機安裝或設定,就能完全在 Google Cloud Platform 上執行。
啟用 API
開始之前,請務必在 Google Cloud 專案中啟用必要的 API:
建立 Compute 執行個體網路伺服器
我們一起建立一個運算執行個體,用於託管初始的 nginx 網路伺服器,以及可讓我們查看網路伺服器預設到達網頁的防火牆規則。達到這個目標的方法有很多種,但為了方便起見,我們將採用 Cloud Shell。
在 Cloud Shell 中執行下列指令:
gcloud compute instances create webserver --zone=us-central1-a && \ gcloud compute firewall-rules create default-allow-http --allow=tcp:80
這個指令的前半部會在 us-central1-a 可用區建立 Google Cloud 執行個體,第二部分則會建立名為「default-allow-http」的防火牆規則允許 http 流量進入我們的網路
執行個體成功建立後,系統會顯示包含執行個體詳細資料的資料表。記下外部 IP,我們需要這項資訊,才能驗證我們的網路伺服器稍後運作。
執行個體啟動並執行後,您就可以透過 SSH 從 Cloud Shell 登入執行個體,安裝 nginx 並啟動網路伺服器:
gcloud compute ssh --zone us-central1-a webserver
登入運算執行個體後,安裝 nginx:
sudo apt install nginx
使用 logout
指令登出 SSH 工作階段
請再次在瀏覽器中輸入執行個體的外部 IP,驗證網路伺服器是否正在執行。您應該會看到預設的 nginx 歡迎畫面:
這個網路伺服器將會做為舊版網頁應用程式,我們會透過 Migrate for Anthos 遷移至 Kubernetes。
3. 搭配使用 Kubernetes 叢集與 Migrate for Anthos
接下來,我們會建立 GKE 叢集,而這個叢集最終會遷移 Compute Engine 網路伺服器。在 Cloud 控制台中,執行下列指令:
gcloud container clusters create my-gke-cluster \ --zone us-central1-a \ --cluster-version 1.13 \ --machine-type n1-standard-4 \ --image-type "UBUNTU" \ --num-nodes 1 \ --enable-stackdriver-kubernetes
請稍候幾分鐘,讓系統完成這個指令。叢集建立完畢之後,您會收到一些輸出內容和詳細資料:
接著,前往 GCP Marketplace 以部署 Migrate for Anthos:
在 Migrate for Anthos 的市集頁面中按一下「設定」。如果出現提示,請從清單中選取您的專案。繼續頁面將會顯示已輸入一些預設值的表單。確認所選叢集是我們剛剛建立的叢集,然後按一下「Deploy」(部署):
現在,請將 Migrate for Anthos 部署至 Kubernetes 叢集。部署作業完成後,系統會顯示「確定」狀態 Kubernetes Engine「Applications」頁面上:
4. 從運算執行個體到有狀態集合
我們已建立執行 Migrate for Anthos 的 Kubernetes 叢集,現在可以開始遷移程序。為了將運算執行個體部署至 Kubenetes 叢集,我們將關閉 Compute Engine 執行個體,以建立磁碟的快照。在繼續之前,請先記下執行個體 ID,稍後會用到:
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
接著關閉運算執行個體:
gcloud compute instances stop webserver --zone us-central1-a
執行個體已停止,現在能執行下列指令碼,安全地建立磁碟快照。請務必插入您的專案 ID 和執行個體 ID:
python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \ -p <project-id> -i <instance-id> \ -z us-central1-a \ -T us-central1-a \ -A webserver-statefulset \ -o containerized-webserver.yaml
透過這些旗標,clone_vm_disks.py
將:
- 確認 GCE 執行個體已關閉
- 從每個執行個體的磁碟建立快照
- 根據各個快照建立新磁碟
- 刪除 VM 建立的快照
- 在目前的工作目錄中產生 YAML 檔案,以部署用來託管網路伺服器的有狀態集
產生的 yaml 檔案會在 Kubernetes 叢集中佈建一個有狀態的組合,以及將複製的磁碟掛接至網路伺服器容器所需的永久磁碟區要求。我們可透過 kubectl
套用這些變更:
kubectl apply -f containerized-webserver.yaml
檢查「工作負載」頁面中 webserver-statefulset 的狀態:
狀態顯示「Pod 待處理」狀態正常執行 kubectl apply
後幾分鐘。狀態顯示「確定」時,請出發。
5. 向負載平衡器公開叢集
此時,我們的 Kubenetes 叢集應以有狀態集的形式執行網路伺服器,但我們也必須將容器公開至負載平衡器,才能透過外部 IP 位址存取網路伺服器。在 Cloud Shell 中建立名為 loadbalancer.yaml
的新檔案,並在當中加入以下內容:
loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: webserver-loadbalancer
spec:
type: LoadBalancer
selector:
app: webserver-statefulset
ports:
- protocol: TCP
port: 80
targetPort: 80
現在,請使用 kubectl
套用:
kubectl apply -f loadbalancer.yaml
我們可以使用 kubectl 擷取 webserver-container 服務的外部 IP 位址:
kubectl get services
如果在瀏覽器中輸入外部 IP 位址,應該會顯示與先前相同的預設 nginx 歡迎畫面:
我們做到了!我們的 GCE 網路伺服器現已託管於 Kubernetes!太棒了!
6. Stackdriver 監控功能
指標
Kubernetes Engine 屬於代管型 Kubernetes 服務,因此會透過 Stackdriver 自動檢測,用於記錄和監控作業。讓我們來看看 Stackdriver 自動擷取的指標。
點選產品選單上的「Monitoring」連結。首次透過專案存取這項作業可能需要幾分鐘的時間,請稍候片刻。
載入後,請將滑鼠遊標懸停在左側窗格中的「資源」上,然後選取「Kubernetes Engine (新版)」。
資訊主頁中顯示的每一列都代表一項 Kubernetes 資源。您可以使用資訊主頁上方的連結,切換基礎架構、工作負載或服務檢視畫面。
在「工作負載」檢視畫面中,展開「my-gke-cluster」然後細查預設類別 >webserver-statefulset >webserver-statefulset-0 >網路伺服器-statefulset按一下「webserver-stateful set」容器。以下說明 Stackdriver 擷取的一些立即可用的指標,包括記憶體使用率和 CPU 使用率。
這個資訊主頁中顯示的圖表是我們可用來建立自訂資訊主頁的圖表。
自訂資訊主頁
Stackdriver 讓我們建立自訂資訊主頁,方便為可用的指標資料整理圖表與圖形。現在來建立自訂資訊主頁,以快速瀏覽部分網路伺服器的指標。
在左側窗格中,將遊標懸停在「資訊主頁」上,然後按一下「建立資訊主頁」。
有空白的資訊主頁後,我們就可以新增需要密切留意的指標。為未命名的資訊主頁命名,例如「我的網路伺服器容器」然後按一下 [新增圖表]
還記得現成的指標嗎?讓我們新增關於容器 CPU 使用率的圖表。在「圖表標題」欄位中輸入「CPU 使用率」。在「Find resource type and metric」(尋找資源類型和指標) 方塊中,輸入 request_utilization,然後從篩選清單中選取 CPU 要求使用率。這個選項會填入「資源類型」和「指標」欄位。
接著,依據 project_id (如有多個專案) 和 container_name 進行篩選。在篩選器方塊中輸入「project_id」project_id,從篩選清單中選取專案,然後在「值」欄位中選取您的專案。我們也必須按照 container_name 進行篩選。在「篩選器」方塊中輸入「container_name」,從篩選清單中選取所需項目,然後在「值」欄位中選取「webserver-statefulset」。按一下「儲存」。
我們現在擁有顯示第一張圖表的資訊主頁。
7. 運作時間檢查和快訊政策
Stackdriver 可以設定快訊,在指標達到指定的任何門檻值時通知我們。舉例來說,當上個步驟的 CPU 使用率超過特定門檻時,我們就可以讓 Stackdriver 傳送電子郵件給我們,這可能代表應用程式發生問題。為了展示這些快訊的模樣,請設定運作時間檢查,然後模擬服務中斷情形。
在左側窗格中,依序選取「運作時間檢查」和「運作時間檢查總覽」:
如「運作時間檢查」頁面建議,讓我們設定第一項運作時間檢查。按一下頁面右上方的「新增運作時間檢查」按鈕。
在繼續表單中輸入「端點運作時間」做為主機名稱,並使用負載平衡器的外部 IP 位址做為主機名稱。
按一下「儲存」,系統會提示您建立隨附的快訊政策:
按一下「建立快訊政策」。
我們將這項「端點運作時間政策」命名為「端點運作時間政策」。在「Configuration」(設定) 部分中,設定「Condition trigger if」改為「Any time series violation」(任何時間序列違反條件時)然後按一下「儲存」。
我們還沒結束所有步驟。接著,我們會指定通知管道,以便在違反快訊政策時收到通知。在 [通知管道類型] 下拉式選單中,選取 [電子郵件] ,然後輸入有效的電子郵件地址。
按一下「Add Notification Channe」。最後,在表單底部將政策命名為「網頁應用程式運作時間」然後按一下「儲存」
如要查看快訊的呈現方式,請在 Cloud 控制台中再次開啟 Cloud Shell。下列指令會停止在網路伺服器 Pod 中執行的 nginx 服務:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"
幾分鐘後,您應該會收到服務中斷的電子郵件:
讓我們恢復計時返回 Cloud Shell,重新啟動 nginx:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
幾分鐘後,您還會收到另一封 Stackdriver 電子郵件,但這次有好消息要告訴您:
8. 清除
既然我們已透過 Migrate for Anthos 從 GCE 遷移至 GKE,讓我們來清除已建立的所有資源。
刪除專案
如有需要,您可以刪除整個專案。前往 GCP Console 的「Cloud Resource Manager」頁面。
在專案清單中,選取處理中的專案,然後按一下「Delete」(刪除)。系統會提示您輸入專案 ID。輸入 PIN 碼,然後按一下「關閉」。
如果想逐一刪除不同元件,請按照下一節的說明操作。
Stackdriver
資訊主頁
在資訊主頁頁面中,按一下頁面頂端的設定圖示 ,然後選取「刪除資訊主頁」。
快訊政策
在政策頁面中,為您建立的每項政策,從右側的「動作」選單 中選取「刪除」。
運作時間檢查
在「運作時間檢查」頁面中,從您建立的每個檢查項目右側的「動作」選單中,選取「刪除」。
GCE 和 Kubernetes
Google Compute Engine 執行個體
gcloud compute instances delete webserver --zone=us-central1-a
Kubernetes 叢集 (包括 Migrate for Anthos、有狀態的集合和負載平衡器服務)
gcloud container clusters delete my-gke-cluster --zone=us-central1-a
磁碟
我們的有狀態集合使用了我們建立的磁碟。請使用下列指令擷取名稱:
gcloud compute disks list --filter=webserver
使用磁碟名稱代替我,刪除方式如下:
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
全部清理完畢!
9. 恭喜!
做得好!您已使用 Migrate for Anthos 將網路伺服器從 GCE 執行個體遷移至 Kubernetes 叢集。
涵蓋內容
- 我們透過 Migrate for Anthos 將網路伺服器從 GCE 遷移至 Kubernetes 叢集
- 我們透過 Kubernetes 負載平衡器服務公開提供有狀態的網路伺服器,藉此向全世界公開。
- 我們啟用 Stackdriver 並建立自訂資訊主頁
- 我們設定了運作時間檢查與快訊政策,在網路伺服器當機時通知我們