检查点
Create Namespaces
/ 10
Access Control in Namespaces
/ 25
Resource Quotas
/ 25
Monitoring GKE and GKE Usage Metering
/ 40
透過命名空間管理 GKE 多租戶叢集
GSP766
總覽
針對以 Google Kubernetes Engine (GKE) 叢集為基礎建立的任何 Google Cloud 基礎架構,在構思最佳成本效益的解決方案時,您必須確保有效運用額外計費的資源。常見的錯誤做法是將使用者或團隊按一對一的比例指派給叢集,導致叢集大量增加。
多租戶叢集可讓多位使用者或團隊共用同一個叢集來處理工作負載,同時隔離資源,確保資源公平共享。這可透過建立命名空間來達成,因為命名空間可允許多個虛擬叢集存在於相同實體叢集中。
在本實驗室中,您將學習如何使用多個命名空間來設定多租戶叢集,以發揮最佳資源使用率,並有效提高成本效益。
目標
本實驗室的學習內容包括:
- 在單一 GKE 叢集中建立多個命名空間。
- 對命名空間存取權設定角色式存取權控管。
- 設定 Kubernetes 資源配額,讓多個命名空間公平共享資源。
- 瀏覽及設定監控資訊主頁,以查看命名空間個別的資源使用情況。
- 使用 Looker Studio 產生 GKE 計量報表,取得命名空間個別資源使用率的精細指標。
設定和需求
點選「Start Lab」按鈕前的須知事項
請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。
您將在真正的雲端環境中完成實作研究室活動,而不是在模擬或示範環境。為達此目的,我們會提供新的暫時憑證,讓您用來在研究室活動期間登入及存取 Google Cloud。
如要完成這個研究室活動,請先確認:
- 您可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
- 是時候完成研究室活動了!別忘了,活動一開始將無法暫停。
如何開始研究室及登入 Google Cloud 控制台
-
按一下「Start Lab」(開始研究室) 按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的暫時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,然後選取「在無痕式視窗中開啟連結」。
接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。 -
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}} 您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}} 您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。 -
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
啟動
按下「Start Lab」按鈕後,您會看到藍色的 Provisioning Lab Resources
訊息和預計剩餘時間。這時系統正在建立及設定用來測試多租戶叢集管理作業的環境,之後會在約 5 分鐘內完成建立叢集、複製 BigQuery 資料集,並產生代表團隊的服務帳戶。
完成後,畫面上就不會再顯示這個訊息。
請等候這項啟動程序完成,且訊息不再顯示,再開始使用實驗室。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
- 點按 Google Cloud 控制台上方的「啟用 Cloud Shell」圖示 。
連線完成即代表已通過驗證,且專案已設為您的 PROJECT_ID。輸出內容中有一行宣告本工作階段 PROJECT_ID 的文字:
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
-
點按「授權」。
-
輸出畫面應如下所示:
輸出內容:
- (選用) 您可以使用下列指令來列出專案 ID:
輸出內容:
輸出內容範例:
gcloud
的完整說明,請前往 Google Cloud 並參閱「gcloud CLI overview guide」(gcloud CLI 總覽指南)。
工作 1:下載所需檔案
- 在本實驗室中,某些步驟會使用
yaml
檔案來設定 Kubernetes 叢集。請將這些檔案從 Cloud Storage bucket 下載到 Cloud Shell 中:
- 將目前的工作目錄變更為
gke-qwiklab:
工作 2:查看及建立命名空間
- 執行以下指令來設定預設的運算可用區,並驗證提供的叢集
multi-tenant-cluster
:
預設命名空間
根據預設,Kubernetes 叢集會有 4 個系統命名空間。
- 您可執行以下指令取得現有叢集的命名空間完整清單:
畫面上應該會顯示類似以下的輸出內容:
- default:在沒有指定其他命名空間的情況下所使用的預設命名空間
- kube-node-lease:管理與每個叢集節點的活動訊號相關聯的 Lease 物件
- kube-public:用於整個叢集中所有使用者可能需要查看或讀取的資源
- kube-system:用於由 Kubernetes 系統建立的元件
並非所有元件都隸屬於命名空間。舉例來說,節點、永久磁碟區和命名空間本身就不隸屬於命名空間。
- 如需命名空間資源的完整清單,請執行以下指令:
建立命名空間資源時,必須為該命名空間資源與某個命名空間建立關聯,方法是納入 --namespace
旗標或在 yaml
中繼資料欄位中指定命名空間。
- 也可透過任何
kubectl get
子指令指定命名空間,以顯示命名空間的資源。範例如下:
這個指令會輸出 kube-system
命名空間中的所有服務。
建立新的命名空間
- 為
team-a
和team-b
建立 2 個命名空間:
kubectl get namespace
的輸出內容應該會包含這 2 個新的命名空間:
指定 --namespace
標記,即可在提供的命名空間中建立叢集資源。資源的名稱 (例如部署作業或 Pod) 只要在各自的命名空間中不重複即可。
- 舉例來說,您可以執行以下命令,在 team-a 命名空間和 team-b 命名空間中以相同名稱部署 Pod:
- 執行
kubectl get pods -A
就會看到有 2 個名為app-server
的 Pod,每個團隊命名空間各一個:
輸出內容:
點選「Check my progress」,確認上述工作已完成。
- 執行
kubectl describe
,並透過 --namespace 標籤指定命名空間,即可查看每個新建立 Pod 的其他詳細資料:
- 如要特別處理某個命名空間中的資源,只要在
kubectl
背景資訊中設定一次,就不需在每個指令中使用--namespace
旗標:
- 在此之後,系統將針對指定的命名空間執行所有後續指令,而您無需額外指定
--namespace
旗標:
下一節您將學習如何為命名空間設定角色式存取權控管,協助您管理叢集。
工作 3:命名空間的存取權控管
如要對叢集中的命名空間資源佈建存取權,必須同時授予 IAM 角色和 Kubernetes 內建的角色式存取權控管 (RBAC)。IAM 角色可對專案提供帳戶初始存取權,而 RBAC 權限則是對叢集的命名空間資源 (Pod、部署作業、服務等) 授予精細的存取權限。
IAM 角色
管理 Kubernetes 的存取權控制項時,Identity and Access Management (IAM) 可用來管理更高機構與專案層級的存取權和權限。
IAM 有多種可指派給使用者和服務帳戶的角色選擇,用於管理其對應的 GKE 存取等級。RBAC 的精細權限是以 IAM 所提供的存取權限為基礎,因此無法限制 IAM 授予的存取權限。因此,對於多租戶命名空間叢集而言,指派的 IAM 角色應授予最低權限。
您可指派的常見 GKE IAM 角色如下表:
角色 | 說明 |
---|---|
Kubernetes Engine 管理員 |
提供叢集和相關 Kubernetes API 物件的完整管理權。具備這個角色的使用者可在任何叢集和子命名空間中建立、編輯及刪除任何資源。 |
Kubernetes Engine 開發人員 |
提供叢集內部 Kubernetes API 物件的存取權。具備這個角色的使用者可在任何叢集和子命名空間中建立、編輯及刪除資源。 |
Kubernetes Engine 叢集管理員 |
提供叢集管理權限。具備這個角色的使用者無法直接在叢集或子命名空間內建立或編輯資源,但可建立、變更及刪除任何叢集。 |
Kubernetes Engine 檢視者 |
提供 GKE 資源的唯讀存取權。具備這個角色的使用者具備命名空間及其相關資源的唯讀存取權。 |
Kubernetes Engine 叢集檢視者 |
可取得及列出 GKE 叢集。如果使用者需要存取叢集命名空間內的資源,這是必要的最低權限角色。 |
這些角色大多會授予過多存取權限,以致於無法透過 RBAC 進行限制,然而 IAM 角色 Kubernetes Engine 叢集檢視者可提供足夠權限讓使用者存取叢集和命名空間資源。
您的實驗室專案已有一個服務帳戶,代表一位將使用 team-a
命名空間的開發人員。
- 執行以下指令,將 Kubernetes Engine 叢集檢視者角色授予該帳戶:
Kubernetes RBAC
在叢集內,任何資源類型 (Pod、服務、部署作業等) 的存取權都是透過角色或叢集角色加以定義,其中只有角色可套用於命名空間。角色可指定資源及每項資源適用的動作,而角色繫結則會指定向哪些使用者帳戶或群組指派該權限。
如要在現有命名空間中建立角色,請指定資源類型,並註明代表可執行哪些動作類型的「動詞」。
- 可使用
kubectl create
建立具有單一規則的角色:
您可使用 yaml
檔案建立具有多項規則的角色。您先前在實驗室下載的文件已提供範例檔案。
- 檢查
yaml
檔案:
輸出內容範例:
- 套用以上角色:
- 為 team-a-developers 服務帳戶和 developer-role 建立角色繫結:
測試角色繫結
- 下載用於模擬服務帳戶的服務帳戶金鑰:
點選「Check my progress」,確認上述工作已完成。
-
在 Cloud Shell 中點選
+
即可在終端機中開啟新的分頁。 -
執行以下指令來啟用服務帳戶。這項操作允許您以帳戶身分執行指令:
- 以服務帳戶的身分取得叢集憑證:
- 現在您可透過 team-a-dev 身分在 team-a 命名空間中列出 Pod:
輸出內容:
- 但在 team-b 命名空間中列出 Pod 時會受到限制:
輸出內容:
-
返回第一個 Cloud Shell 分頁或開啟新分頁。
-
更新叢集憑證,並重設 team-a 命名空間的背景資訊:
工作 4:資源配額
在多租戶環境中共用叢集時,請務必確保使用者無法使用超過其公平共享額度的叢集資源。資源配額物件 (ResourceQuota) 可定義命名空間中資源用量的限制。資源配額可讓您指定物件數量 (Pod、服務、有狀態集合等)、儲存空間資源總量 (永久磁碟區要求、臨時儲存空間、儲存空間級別) 或運算資源總量 (CPU 與記憶體) 的上限。
- 舉例來說,下列指令會將命名空間
team-a
中的 Pod 數量上限設定為 2,將負載平衡器數量上限設定為 1:
- 在命名空間 team-a 中建立第二個 Pod:
- 接著嘗試建立第三個 Pod:
您應該會收到下列錯誤訊息:
- 您可使用
kubectl describe
查看資源配額的詳細資訊:
輸出內容:
您可以看到受到資源配額限制的資源清單,以及已設定的固定上限和目前使用量。
- 執行以下指令更新
test-quota
,將 Pod 上限設為 6 個:
您可以編輯 yaml
檔案,以便 kubectl
用來更新配額。固定配額為 spec
下的 count/pods
值。
- 將 spec 下的
count/pods
值變更為 6:
- 依序按下 ctrl + X 鍵、Y 鍵和 Enter 鍵,即可儲存並結束。
變更後的配額現在應該會反映在輸出內容中:
輸出內容:
CPU 和記憶體配額
設定 CPU 和記憶體的配額時,您可以對要求總和 (保證容器可取得的值) 或限制總和 (永不允許容器傳遞的值) 指定相關配額。
在本實驗室中,您的叢集會有 4 部 e2-standard-2 機器,每部都具備 2 個核心和 8 GB 記憶體。先前已提供您叢集的資源配額 yaml 檔案範例:
cpu-mem-quota.yaml
- 套用檔案設定:
設定此配額後,所有 Pod 的 CPU 和記憶體要求總和上限為 2cpu 和 8GiB,而限制總和上限為 4cpu 和 12GiB。
- 為示範如何設定 CPU 和記憶體配額,請使用
cpu-mem-demo-pod.yaml
建立新的 Pod:
cpu-mem-demo-pod.yaml
:
- 套用檔案設定:
- 完成建立這個 Pod 後,請執行以下指令來查看其 CPU 和記憶體要求和限制是否已反映在相關配額中:
輸出內容:
點選「Check my progress」,確認上述工作已完成。
工作 5:監控 GKE 和 GKE 用量計算功能
對大部分多租戶叢集而言,每個租戶的工作負載和資源需求可能會改變,因此您可能需要調整資源配額。您可以使用 Monitoring 大概掌握每個命名空間所使用的資源。
透過 GKE 用量計算功能,則能進一步瞭解資源使用量,並清楚瞭解每個租戶的相關費用。
Monitoring 資訊主頁
- 在 Cloud Console 中展開頁面左上角的「導覽選單」,接著依序選取選單中的「Operations」>「Monitoring」。
請等候系統為您的專案建構工作區。
- 畫面顯示總覽頁面時,請在左選單中選取「資訊主頁」:
- 在「資訊主頁總覽」頁面中選取「GKE」。
GKE 資訊主頁會提供一系列的資料表,詳列由多個資源匯總而成的 CPU、記憶體和磁碟使用率資料。
舉例來說,「命名空間」資料表會顯示叢集中每個命名空間的使用率:
在「工作負載」資料表中,您也可以針對在叢集上執行的工作負載查詢相關使用率資料。
-
按一下「查看全部」。
-
在
ADD FILTER
方塊中,依序選取「命名空間」>「team-a」。 -
然後點選「套用」。
這項操作可篩選工作負載,僅納入在 team-a 命名空間上執行的工作負載:
Metrics Explorer
-
在左側窗格中選取「Metrics Explorer」。
-
在「選取指標」欄位中,按一下「指標」下拉式選單。
-
依照資源和指標名稱,在篩選器中輸入「Kubernetes 容器」。
-
依序點選「Kubernetes 容器」>「容器」。
-
選取
CPU usage time
。 -
點選「套用」。
-
如要排除 kube-system 命名空間,請在篩選器部分點選「新增篩選器」。
-
選取
namespace_name
做為標籤。 -
選取
!= (does not equal)
做為比較子,並選取kube-system
做為值。 -
接著,選取「匯總項目」下拉式選單中的「總和」,以及「依據」下拉式選單中的「namespace_name」,並點選「確定」。
您會看到一個圖表,其中顯示各命名空間的容器 CPU 使用時間:
GKE 用量計算功能
GKE 用量計算功能可讓您將 GKE 叢集資源使用率和使用量匯出至 BigQuery 資料集,並使用 Looker Studio 以圖表呈現資料,協助您深入瞭解資源使用情況。透過用量計算功能,即可妥善訂定資源配額和高效率叢集設定。
以下兩個資料集已加入您的專案中:
cluster_dataset:這是在叢集上啟用 GKE 用量計算功能之前手動建立的資料集。此資料集包含由 GKE 產生的 2 個資料表(gke_cluster_resource_consumption 和 gke_cluster_resource_usage),並根據叢集用量指標持續更新。
billing_dataset:這是在啟用 BigQuery 匯出功能進行計費之前手動建立的資料集。此資料集包含 1 個資料表 (gcp_billing_export_v1_xxxx),並根據專案每日費用天天更新。
- 執行以下指令,對叢集啟用 GKE 用量計算功能,並指定資料集
cluster_dataset
:
建立 GKE 費用明細資料表
cost_breakdown 資料表可根據專案中的帳單和資源使用量資料表產生。您將使用 usage_metering_query_template.sql
檔案,在叢集資料集中產生這個資料表。此範例可透過瞭解叢集資源使用量一文取得。
首先,在 Cloud Shell 設定部分環境變數。
- 為提供的帳單資料表以及提供的用量計算資料集設定路徑,並為新的費用明細資料表設定名稱:
- 接著,指定本實驗室一開始下載的用量計算查詢範本路徑、用量計算查詢要產生的輸出檔案以及資料開始日期 (資料中最早日期為 2020-10-26):
- 現在使用這些環境變數和查詢範本,來產生用量計算查詢:
- 執行以下指令,使用您在前一步驟產生的查詢,設定費用明細資料表:
- 資料移轉應該會提供授權連結。請點選該連結,以學員帳戶登入並按照指示操作,再將
version_info
貼回到 Cloud Shell 中。
這項操作之後應該會回傳訊息,告知移轉設定已成功建立。
在 Looker Studio 中建立資料來源
-
依序點選左上角的「建立」>「資料來源」,以新增資料來源。
畫面首先會顯示「完成您的帳戶設定,以便開始使用」視窗。
-
勾選確認聲明核取方塊,然後點選「繼續」。
-
在「設定電子郵件接收設定」之下的每個問題中選取「否」,因為您使用的是臨時實驗室/帳戶。
-
點選「繼續」。
您會看到 Looker Studio 支援的 Google 連接器清單。
- 從清單中選取 BigQuery。
-
按一下「授權」按鈕,即可允許 Looker Studio 存取您的 BigQuery 專案。
-
在頁面左上角將資料來源名稱從
Untitled Data Source
改為GKE Usage
。 -
在第一個資料欄中選取「自訂查詢」。
-
在專案資料欄中選取「專案 ID」。
-
在自訂查詢方塊中輸入以下查詢,並將
[PROJECT-ID]
替換成您的 Qwiklabs 專案 ID:
- 點選「連結」。
點選「Check my progress」,確認上述工作已完成。
- 接著點選右上角。
完成新增資料來源之後,即可開始使用資料來建立報表。
- 在資料來源頁面頂端按一下「建立報表」。
透過資料來源建立新報表時,系統會提示您將資料加到報表中。
- 按一下「加入報表」。
建立 Looker Studio 報表
您可以在報表中運用 BigQuery 資料表,以圖表形式呈現資料來源的用量指標。
首先從簡易的資料表開始:
您將對這個資料表進行設定,按命名空間顯示費用明細。選取資料表後,右側面板會顯示相應資料。
- 在該面板中變更下列項目:
-
資料範圍維度:
usage_start_time
-
維度:
namespace
-
指標:
cost
所有其他欄位則保留預設值。
您可以套用篩選器來限制資料表只顯示命名空間資源。
- 在資料面板中,點選「篩選器」部分下方的「新增篩選器」。建立篩選器來排除未分配給命名空間的資源:
-
點選「儲存」。
-
再次點選「新增篩選器」和「建立篩選器」來建立第二個篩選器,將資料內容限制為要求:
- 點選「儲存」即可套用篩選器。資料表結果應如下所示:
接著,您將在報表中加上圓餅圖,按命名空間顯示費用明細。
-
在您建立的資料表上按一下滑鼠右鍵,並選取「複製」。
-
將複製的資料表物件拖曳至報表的任一處。
-
接著點選設定面板的標頭:
- 在顯示的選項中,點選「圓餅圖」圖示:
圓餅圖結果應如下所示:
接著,您將新增圓環圖,按資源類型顯示費用明細。
-
點選頂端工具列的「新增圖表」,並選取 (圓環圖示) 來建立圓環圖。
-
將圖表拖曳至報表的任一處,並設定下列項目:
-
資料範圍維度:
usage_start_time
-
維度:
resource_name
-
指標:
cost
- 按一下「新增篩選器」,然後選取您對前一個圖表套用的 2 個篩選器。圓環圖結果應如下所示:
-
如要按命名空間新增資料細目,請按一下頂端工具列的「新增控制項」,並選取「下拉式清單」。
-
將細目拖曳至圓環圖旁,並設定下列項目:
-
資料範圍維度:
usage_start_time
-
控制項欄位:
namespace
-
指標:
None
-
按一下「新增篩選器」。
-
從清單中選取「unallocated (namespace filter)」。
-
如要讓控制項只適用於圓環圖,請使用選取器游標選取控制項物件和圓環圖,藉此在兩個物件周圍拉出一個矩形。
-
按一下滑鼠右鍵並選取「群組」,即可將物件結合為群組:
- 如要預覽報表,請按一下頂端工具列的「資料檢視」。
在檢視模式中,您可以將圓環圖調整為顯示特定命名空間的內容:
- 在頁面頂端的「共用」選單中,按一下「下載報表」,即可將完整報表副本以 PDF 檔案格式下載。
恭喜!
運用命名空間即可將叢集設定為多租戶,盡可能降低資源使用率不足和叢集大量增加的風險,並避免產生額外費用。此外,使用監控和 GKE 計量功能之後,還可依照命名空間以圖表呈現資源使用率,藉此妥善訂定資源配額和叢集設定。
後續步驟/瞭解詳情
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 2 月 2 日
研究室上次測試日期:2024 年 2 月 2 日
Copyright 2024 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。