
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Provision testing environment
/ 20
Scale pods with Horizontal Pod Autoscaling
/ 20
Scale size of pods with Vertical Pod Autoscaling
/ 20
Cluster autoscaler
/ 20
Node Auto Provisioning
/ 10
Optimize larger loads
/ 10
Google Kubernetes Engine 提供各種水平與垂直解決方案,讓您自動調整 pod 和基礎架構的資源配置。就成本效益而言,這些工具能派上極大用場,不僅可確保盡可能執行工作負載,還提供「用多少付多少」保證。
在本實驗室中,您將設定及觀察水平自動調度 Pod 資源和垂直自動調度 Pod 資源功能 (Pod 層級的資源調度),並在節點層級設定叢集自動配置器 (水平基礎架構解決方案) 和自動佈建節點功能 (垂直基礎架構解決方案)。首先,我們會使用這些自動調度資源工具,盡可能節省資源,並在需求較低的期間縮減叢集大小。接著,請提升叢集需求,並觀察自動調度資源程序如何維持可用性。
本實驗室的學習內容包括:
請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。
您將在真正的雲端環境中完成實作研究室活動,而不是在模擬或示範環境。為達此目的,我們會提供新的暫時憑證,讓您用來在研究室活動期間登入及存取 Google Cloud。
如要完成這個研究室活動,請先確認:
按一下「Start Lab」(開始研究室) 按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,然後選取「在無痕式視窗中開啟連結」。
接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
如有必要,請將下方的 Username 貼到「登入」對話方塊。
您也可以在「Lab Details」窗格找到 Username。
點選「下一步」。
複製下方的 Password,並貼到「歡迎使用」對話方塊。
您也可以在「Lab Details」窗格找到 Password。
點選「下一步」。
按過後續的所有頁面:
Google Cloud 控制台稍後會在這個分頁開啟。
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
連線完成即代表已通過驗證,且專案已設為您的 PROJECT_ID。輸出內容中有一行宣告本工作階段 PROJECT_ID 的文字:
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
點按「授權」。
輸出畫面應如下所示:
輸出內容:
輸出內容:
輸出內容範例:
gcloud
的完整說明,請前往 Google Cloud 並參閱「gcloud CLI overview guide」(gcloud CLI 總覽指南)。
為了示範如何水平自動調度 pod 資源,本實驗室採用 php-apache
型的自訂 Docker 映像檔。此映像檔用於定義 index.php
頁面,後者負責執行部分耗用大量 CPU 的運算。您將監控此映像檔的 Deployment。
php-apache
Deployment 建立資訊清單:點選「Check my progress」確認上述工作已完成。
水平自動調度 Pod 資源功能可根據工作負載的 CPU/記憶體消耗量,或根據 Kubernetes 內部報告的自訂指標/叢集外部來源的外部指標,自動增減 pod 數量,從而變更 Kubernetes 工作負載的配置。
您應會看到 php-apache
Deployment,內有 3/3 個 pod 在執行:
php-apache
Deployment 水平自動調度資源:點選「Check my progress」確認上述工作已完成。
這項 autoscale
指令會設定水平 Pod 自動配置器,將 php-apache
Deployment 控管的 pod 備用資源保持在 1 到 10 個之間。cpu-percent
標記會根據所有 pod 要求的 CPU,將目標平均 CPU 用量指定為 50%。水平 Pod 自動配置器則會透過 Deployment 調整備用資源數量,讓所有 pod 上的平均 CPU 用量保持在 50%。
在「目標」欄下方,應會顯示 1%/50%。
這表示 Deployment 內的 pod 的目標平均 CPU 用量目前為 1%。我們應可將此視為 php-apache
應用程式目前未收到任何流量。
kubectl get hpa
指令,因為水平 Pod 自動配置器尚未建立評估作業。另請注意「備用資源」欄,起始的值會是 3。隨著所需 pod 的數量更動,自動配置器會調整此數字。
在本例中,自動配置器會將 Deployment 的 pod 縮減為您執行 autoscale
指令時指定的最低數量。水平自動調度 Pod 資源會耗費 5 到 10 分鐘,且需要視資源調度方式關閉或啟動新的 pod。
繼續實驗室的下一個步驟,稍候再檢查自動配置器的結果。
cpu-percent
用做自動配置器的目標指標,但其實在水平 Pod 自動配置器中,您也可以定義自訂指標,根據記錄檔中擷取的其他使用指標調整 pod 資源。只要使用垂直自動調度 Pod 資源功能,您就可以不必再思考要為容器 CPU 和記憶體要求指定什麼值。自動配置器可以建議 CPU/記憶體要求和相關限制的值,這些值也可自動更新。
垂直自動調度 Pod 資源功能現已在 scaling-demo 叢集上啟用。
輸出內容應會是 enabled: true
gcloud container clusters update scaling-demo --enable-vertical-pod-autoscaling
為了演示垂直 Pod 自動配置器 VPA,您需要部署 hello-server
應用程式。
hello-server
Deployment 套用至叢集:hello-server
pod 的容器規格:上方指令會針對更新政策為「Off」的 hello-server
Deployment,替垂直 Pod 自動配置器產生一份資訊清單。垂直 Pod 自動配置器有三種更新政策可擇一使用,視應用程式而有不同作用:
hello-vpa
套用資訊清單:VerticalPodAutoscaler
:在輸出內容結尾找出「Container Recommendations」。如果找不到,請多等待一點時間,然後再次執行上述指令。找到後,您會看到多種建議類型,每個都有用於 CPU 和記憶體的值:
您會發現垂直 Pod 自動配置器建議將這個容器的 CPU 要求量設為 25m,而非前述的 100m,並提供記憶體要求量建議。這時您可以將這些建議手動套用至 hello-server
Deployment。
為了在本實驗室中觀察垂直 Pod 自動配置器和其效果,請將 hello-vpa 更新政策設為 Auto,然後觀察資源調度情形。
更新資訊清單,將政策設為 Auto,然後套用設定:
為了調整 pod 數量,垂直 Pod 自動配置器需要刪除 pod,並重新建立新數量的 pod。根據預設,為了避免停機時間,垂直 Pod 自動配置器不會刪除及調整最後一個啟用中的 pod。因此,您需要具備至少 2 個備用資源,以查看垂直 Pod 自動配置器做了那些變更。
hello-server
Deployment 調整為 2 個備用資源:hello-server-xxx
pod 顯示「終止中」或「待處理」狀態 (您也可以依序前往「Kubernetes Engine」>「工作負載」):這表示垂直 Pod 自動配置器正在刪除及調整 pod 數量。如果看到這個內容,請按下 Ctrl + c 鍵結束指令。
點選「Check my progress」確認上述工作已完成。
目前水平 Pod 自動配置器可能會縮減 php-apache
Deployment 的資源。
php-apache
Deployment 已縮減為 1 pod。php-apache
Deployment 依然有 3 個備用資源,可能需要再過幾分鐘,等待自動配置器完成作業。php-apache
應用程式有更多需求,自動配置器會因應負載再次向上擴充。在考量成本最佳化時,這種做法非常實用。如果自動配置器經過妥善調整,則不論需求如何,只需針對維持可用性所需的資源支付費用,就能維持應用程式的高可用性。
現在垂直 Pod 自動配置器應該已重新調整 hello-server
Deployment 中的 pod 數量。
kubectl set resources deployment hello-server --requests=cpu=25m
。有時候,處於自動模式下的垂直 Pod 自動配置器會花費很長的作業時間,或因沒有時間收集正確資料而設定過高/過低的界限值。本實驗室為了節省時間,建議假設垂直 Pod 自動配置器的模式已設為「Off」,這是比較簡單的做法。這樣一來,垂直 Pod 自動配置器就能成為最佳化資源使用率的絕佳工具,並且能有效節省成本。原先要求的 CPU 數量為 400m,高於這個容器所需的數量。將要求數調整為建議的 25m,您就可以從節點集區使用較少的 CPU,在叢集中需佈建的節點也可能較少。
有了自動更新政策,垂直 Pod 自動配置器就能在生命週期中,繼續刪除及調整 hello-server
Deployment 的 pod 數量。它可以因應大量要求來擴充 pod 數量,以便處理龐大流量,也可以在停機時間縮減 pod 數量。它是應用程式因應穩定增長需求的絕佳工具,但在流量尖峰時會有損失可用性的風險。
視應用程式而定,通常最安全的做法是使用垂直 Pod 自動配置器,並將更新政策設為「Off」,然後視需求設定建議值,進而達到最佳化資源用量,以及獲得叢集最大可用性的目標。
在接下來幾節中,您將瞭解如何透過叢集自動配置器和自動佈建節點功能,進一步達到最佳資源使用率。
叢集自動配置器的用途是根據需求新增或移除節點。如果需求很高,為了滿足需求,叢集自動配置器會在節點集區中新增節點當需求較低,叢集自動配置器會移除節點,藉此縮減叢集資源。這樣一來,您可以維持叢集的高可用性,同時盡可能避免其他機器消耗多餘成本。
這項作業需要幾分鐘才能完成。
調度叢集資源時,如要判斷移除節點的時間點,應綜合評估使用率的最佳化成效與資源可用性。移除使用率偏低的節點可提高叢集使用率,但新的工作負載可能需要等到資源重新佈建後才能開始處理。
進行決策時,您可以指定要使用的自動調度資源設定檔。目前可用的設定檔如下:
optimize-utilization
自動調度資源設定檔,以便觀察資源調度的完整效果:啟用自動調度資源功能後,在 Cloud 控制台中觀察叢集。按一下左上方的三橫線圖示,開啟「導覽選單」。
在「導覽選單」中,依序選取「Kubernetes Engine」>「叢集」。
在「叢集」頁面,選取「scaling-demo」叢集。
在「scaling-demo」叢集頁面中,選取「節點」分頁標籤。
如果合併 3 個節點的「已要求的 CPU」和「可分配的 CPU」值,則總數分別為 1555m 和 2820m。這表示整個叢集中的可用 CPU 總數為 1265m,大於一個節點可提供的數量。
如要最佳化使用率,可以根據現有需求,將目前的工作負載從三個節點整合為兩個節點。不過,您的叢集尚未自動縮減資源配置,這是因為「系統 pod」分散在叢集中。
您的叢集會在 kube-system
命名空間執行多個 Deployment,讓 Logging、Monitoring 和自動調度資源等不同的 GKE 服務得以運作。
根據預設,這些 Deployment 大多數的系統 pod,會導致叢集自動配置器無法藉由使 pod 離線來重新排程 pod。通常這樣較為理想,因為其他 Deployment 和服務會使用這些 pod 收集資料。舉例來說,若「metrics-agent」暫時中斷服務,會導致垂直 Pod 自動配置器和水平 Pod 自動配置器收集的資料有落差,若「fluentd」pod 中斷服務,會導致雲端記錄有落差。
為了本實驗室的目標,您要將 Pod disruption budget 套用至 kube-system
pod,讓叢集自動配置器安全地在其他節點上重新排程 pod。這麼做可讓叢集有足夠的空間縮減資源。
Pod disruption budget (PDB) 會定義 Kubernetes 處理中斷 (例如升級、移除 pod 或用盡資源等) 的方式。您可以在 PDB 中指定 Deployment 應包含的 max-unavailable
和/或 min-available
pod 數。
kube-system
pod 建立 Pod disruption budget:點選「Check my progress」確認上述工作已完成。
在每個指令中,您要根據建立 Deployment 時定義的標籤,選擇不同的 kube-system Deployment pod,並且指定每個 Deployment 中只能有 1 個不可用的 pod。這麼做可讓自動配置器重新排程系統 pod。
若使用 PDB,您的叢集就能在一至兩分鐘內,從三個節點縮減至兩個節點。
在 Cloud 控制台中重新整理 scaling-demo的「節點」分頁,檢查資源的封裝方式:
您設定了自動化程序,將叢集資源從三個節點縮減為兩個節點!
在成本考量方面,若縮減節點集區,您就能在叢集需求較低時,減少須付費的機器。如果一天中的流量需求有大幅波動,則資源調度的效果會更加巨大。
值得注意的重點在於,叢集自動配置器會移除不重要的節點,而垂直自動調度 Pod 資源和水平自動調度 Pod 資源會因應 CPU 需求,減少不再需要的節點。結合使用這些工具,是將整體成本和資源使用情形最佳化的絕佳做法。
因此,叢集自動配置器能因應需要排程的 pod,新增及移除節點。不過,GKE 還有專門垂直調整資源的功能,稱為自動佈建節點。
自動佈建節點 (NAP) 會因應需求,實際新增大小符合需求的節點集區。如果沒有自動佈建節點功能,叢集自動配置器只會在您指定的節點集區中建立新節點,也就是說,新節點的機器類型會與該集區中的其他節點相同。如要讓不必大幅調度資源的批次工作負載和其他應用程式能充分運用資源,這是最好的做法,因為它只需要在現有集區中新增更多節點,不必建立專門針對用途進行最佳化調整的節點集區,因此可以節省時間。
在指令中,您要指定 CPU 和記憶體資源數量的下限與上限。這裡指的是供整個叢集使用的資源。
自動佈建節點功能需要一些作業時間,而根據 scaling-demo 叢集的當前狀態,很可能不需要建立新的節點集區。
在接下來幾節中,您將增加叢集的需求,然後觀察自動配置器和自動佈建節點功能的動作。
點選「Check my progress」確認上述工作已完成。
目前您已分析過在應用程式需求偏低時,水平 Pod 自動配置器、垂直 Pod 自動配置器和叢集自動配置器如何協助節省資源和成本。接下來,您將瞭解這些工具如何處理可用性來因應增加的需求。
php-apache
服務傳送無限迴圈的查詢:返回原本的「Cloud Shell」分頁。
執行下列指令,過一分鐘左右,您應該會在水平 Pod 自動配置器上看到較高的 CPU 負載:
稍後並重新執行指令,直到您看到目標高於 100%。
您也可以在 Cloud 控制台中重新整理「節點」分頁來監控叢集。
幾分鐘後,您會看到系統執行一些操作。
php-apache
Deployment 的資源,以便處理增加的負載。稍後片刻,直到 php-apache
Deployment 向上擴充至 7 個備用資源,且節點分頁類似以下畫面:
您的叢集已經有效率地向上擴充來因應更多需求!不過,請留意叢集在處理激增需求時所需的時間。對許多應用程式來說,如果佈建新資源會損失可用性,可能會發生問題。
當為了處理大量負載而向上擴充時,根據您的設定,水平自動調度 Pod 資源功能會新增 pod,而垂直自動調度 Pod 資源功能會調整 pod 數量。如果現有節點還有空間,系統或許可以略過映像檔提取步驟,立即在新 pod 上執行應用程式。如果您處理的節點並未先在應用程式上部署,若您需要先下載容器映像檔再執行應用程式,則所需的作業時間會略為增加。
因此,如果現有節點上沒有足夠空間,且您正在使用叢集自動配置器,可能會需要更多時間。現在系統需要佈建新節點、設定節點,接著下載映像檔並啟動 pod。如果自動佈建節點功能將建立新節點集區 (與在叢集中進行的作業相同),則由於作業是從佈建新節點集區開始,對新節點執行的步驟也完全相同,因此花費的時間更久。
為了處理自動調度資源的不同延遲時間,您可能會想略為進行超額佈建,降低應用程式自動向上擴充資源時的壓力。這對成本最佳化而言十分重要,因為您不會想為超出需求的資源付費,但您也不會希望應用程式降低效能。
如想瞭解何種程度屬於超額佈建,可以使用以下公式:
在此以叢集的 CPU 使用率為例。您不希望使用率達到 100%,因此可以選擇 15% 的緩衝,做為使用率的安全距離。接著,公式中的流量變數是在接下來 2 到 3 分鐘內預計增長的流量百分比。在先前執行的負載測試中,0% 到 150% 是有點極端的流量增長示例,因此我們改用較平均的例子,也就是 30%。
有了這些數字,您可以算出約 65% 的安全緩衝。這表示您可以超額佈建約 65% 的資源,向上擴充資源的同時,還能盡量降低發生問題的可能性。
如想透過叢集自動調度資源功能超額佈建叢集,一個有效的策略是使用「暫停 Pod」。
暫停 Pod 是低優先順序的 Deployment,可由高優先順序的 Deployment 移除及取代。這代表您可以建立低優先順序的 pod,但除了保留緩衝區外,不實際執行任何操作。當高優先順序的 pod 需要空間,系統會移除暫停 pod,並將其重新排程至其他節點或新節點,然後系統就有空間可以快速排程高優先順序的 pod。
觀察新節點的建立方式,最有可能是在新節點集區中建立,以符合新建立的暫停集區。現在如果再次執行負載測試,當 php-apache
Deployment 需要額外節點,系統會在含有暫停 pod 的節點上排程,而將暫停 pod 改放在新節點上。這種做法非常好,因為虛設的暫停 pod 可讓您的叢集事先佈建新節點,讓實際應用程式能以更快的速度向上擴充資源。如果您希望有較高的流量,可以新增更多暫停 pod,但建議做法是一個節點上不要新增超過一個暫停 pod。
點選「Check my progress」確認上述工作已完成。
恭喜!在本實驗室中您設定了叢集,可視需求自動且有效地向上擴充或縮減資源。自動調整資源配置方面,水平自動調度 Pod 資源和垂直自動調度 Pod 資源,為叢集的 Deployment 提供了解決方案,而叢集自動配置器和自動佈建節點功能,則為叢集的基礎架構提供解決方案。
一如既往,您已瞭解如何根據工作負載使用適合的工具。謹慎使用這些自動配置器,可讓您在有需要時獲得最大可用性,在需求較低時則僅針對所需資源付費。就成本考量而言,這表示您可以充分運用資源,同時節省費用。
查看下列資源,進一步瞭解本實驗室涵蓋的主題:
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 2 月 1 日
實驗室上次測試日期:2023 年 9 月 20 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
One lab at a time
Confirm to end all existing labs and start this one