GSP766
總覽
針對以 Google Kubernetes Engine (GKE) 叢集為基礎建立的任何 Google Cloud 基礎架構,在構思最佳成本效益的解決方案時,您必須確保有效運用額外計費的資源。常見的錯誤做法是將使用者或團隊按一對一的比例指派給叢集,導致叢集大量增加。
多租戶叢集 可讓多位使用者或團隊共用同一個叢集來處理工作負載,同時隔離資源,確保資源公平共享。這可透過建立命名空間 來達成,因為命名空間可允許多個虛擬叢集存在於相同實體叢集中。
在本實驗室中,您將學習如何使用多個命名空間來設定多租戶叢集,以發揮最佳資源使用率,並有效提高成本效益。
目標
本實驗室的學習內容包括:
在單一 GKE 叢集中建立多個命名空間。
對命名空間存取權設定角色式存取權控管。
設定 Kubernetes 資源配額,讓多個命名空間公平共享資源。
瀏覽及設定監控資訊主頁,以查看命名空間個別的資源使用情況。
使用 Looker Studio 產生 GKE 計量報表,取得命名空間個別資源使用率的精細指標。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」 後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項: 請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項: 務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 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 控制台稍後會在這個分頁開啟。
注意: 如要使用 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」 圖示 。
系統顯示視窗時,請按照下列步驟操作:
繼續操作 Cloud Shell 視窗。
授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID : 。輸出內容中有一行文字,宣告本工作階段的 Project_ID :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
(選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
點按「授權」 。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
(選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意: 如需 gcloud
的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南 。
工作 1:下載所需檔案
在本實驗室中,某些步驟會使用 yaml
檔案來設定 Kubernetes 叢集。請將這些檔案從 Cloud Storage bucket 下載到 Cloud Shell 中:
gsutil -m cp -r gs://spls/gsp766/gke-qwiklab ~
將目前的工作目錄變更為 gke-qwiklab:
cd ~/gke-qwiklab
工作 2:查看及建立命名空間
執行以下指令來設定預設的運算可用區,並驗證提供的叢集 multi-tenant-cluster
:
export ZONE={{{project_0.default_zone|placeholder}}}
gcloud config set compute/zone ${ZONE} && gcloud container clusters get-credentials multi-tenant-cluster
預設命名空間
根據預設,Kubernetes 叢集會有 4 個系統命名空間。
您可執行以下指令取得現有叢集的命名空間完整清單:
kubectl get namespace
畫面上應該會顯示類似以下的輸出內容:
NAME STATUS AGE
default Active 5m
kube-node-lease Active 5m
kube-public Active 5m
kube-system Active 5m
default :在沒有指定其他命名空間的情況下所使用的預設命名空間
kube-node-lease :管理與每個叢集節點的活動訊號相關聯的 Lease 物件
kube-public :用於整個叢集中所有使用者可能需要查看或讀取的資源
kube-system :用於由 Kubernetes 系統建立的元件
並非所有元件都隸屬於命名空間。舉例來說,節點、永久磁碟區和命名空間本身就不隸屬於命名空間。
如需命名空間資源的完整清單,請執行以下指令:
kubectl api-resources --namespaced=true
建立命名空間資源時,必須為該命名空間資源與某個命名空間建立關聯,方法是納入 --namespace
旗標或在 yaml
中繼資料欄位中指定命名空間。
也可透過任何 kubectl get
子指令指定命名空間,以顯示命名空間的資源。範例如下:
kubectl get services --namespace=kube-system
這個指令會輸出 kube-system
命名空間中的所有服務。
建立新的命名空間
注意: 建立其他命名空間時,請避免在名稱前面加上「kube」前置字元,因為系統命名空間已採用此作法。
為 team-a
和 team-b
建立 2 個命名空間:
kubectl create namespace team-a && \
kubectl create namespace team-b
kubectl get namespace
的輸出內容應該會包含這 2 個新的命名空間:
namespace/team-a created
namespace/team-b created
指定 --namespace
標記,即可在提供的命名空間中建立叢集資源。資源的名稱 (例如部署作業或 Pod) 只要在各自的命名空間中不重複即可。
舉例來說,您可以執行以下命令,在 team-a 命名空間和 team-b 命名空間中以相同名稱部署 Pod:
kubectl run app-server --image=centos --namespace=team-a -- sleep infinity && \
kubectl run app-server --image=centos --namespace=team-b -- sleep infinity
執行 kubectl get pods -A
就會看到有 2 個名為 app-server
的 Pod,每個團隊命名空間各一個:
kubectl get pods -A
輸出內容:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system event-exporter-gke-8489df9489-k2blq 2/2 Running 0 3m41s
kube-system fluentd-gke-fmt4v 2/2 Running 0 113s
kube-system fluentd-gke-n9dvn 2/2 Running 0 79s
kube-system fluentd-gke-scaler-cd4d654d7-xj78p 1/1 Running 0 3m37s
kube-system gke-metrics-agent-4jvn8 1/1 Running 0 3m33s
kube-system gke-metrics-agent-b4vvw 1/1 Running 0 3m27s
kube-system kube-dns-7c976ddbdb-gtrct 4/4 Running 0 3m41s
kube-system kube-dns-7c976ddbdb-k9bgk 4/4 Running 0 3m
kube-system kube-dns-autoscaler-645f7d66cf-jwqh5 1/1 Running 0 3m36s
kube-system kube-proxy-gke-new-cluster-default-pool-eb9986d5-tpql 1/1 Running 0 3m26s
kube-system kube-proxy-gke-new-cluster-default-pool-eb9986d5-znm6 1/1 Running 0 3m33s
kube-system l7-default-backend-678889f899-xvt5t 1/1 Running 0 3m41s
kube-system metrics-server-v0.3.6-64655c969-jtl57 2/2 Running 0 3m
kube-system prometheus-to-sd-d6dpf 1/1 Running 0 3m27s
kube-system prometheus-to-sd-rfdlv 1/1 Running 0 3m33s
kube-system stackdriver-metadata-agent-cluster-level-79f9ddf6d6-7ck2w 2/2 Running 0 2m56s
team-a app-server 1/1 Running 0 33s
team-b app-server 1/1 Running 0 33s
點選「Check my progress」 ,確認上述工作已完成。
建立命名空間
執行 kubectl describe
,並透過 --namespace 標籤指定命名空間,即可查看每個新建立 Pod 的其他詳細資料:
kubectl describe pod app-server --namespace=team-a
如要特別處理某個命名空間中的資源,只要在 kubectl
背景資訊中設定一次,就不需在每個指令中使用 --namespace
旗標:
kubectl config set-context --current --namespace=team-a
在此之後,系統將針對指定的命名空間執行所有後續指令,而您無需額外指定 --namespace
旗標:
kubectl describe pod app-server
下一節您將學習如何為命名空間設定角色式存取權控管,協助您管理叢集。
工作 3:命名空間的存取權控管
如要對叢集中的命名空間資源佈建存取權,必須同時授予 IAM 角色和 Kubernetes 內建的角色式存取權控管 (RBAC)。IAM 角色可對專案提供帳戶初始存取權,而 RBAC 權限則是對叢集的命名空間資源 (Pod、部署作業、服務等) 授予精細的存取權限。
IAM 角色
注意: 如要在專案中授予 IAM 角色,您必須具備專案 IAM 管理員角色。您的 Qwiklabs 臨時帳戶已有這項設定。
管理 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 叢集檢視者角色授予該帳戶:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member=serviceAccount:team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com \
--role=roles/container.clusterViewer
Kubernetes RBAC
在叢集內,任何資源類型 (Pod、服務、部署作業等) 的存取權都是透過角色 或叢集角色 加以定義,其中只有角色 可套用於命名空間。角色可指定資源及每項資源適用的動作,而角色繫結 則會指定向哪些使用者帳戶或群組指派該權限。
如要在現有命名空間中建立角色,請指定資源類型,並註明代表可執行哪些動作類型的「動詞 」。
可使用 kubectl create
建立具有單一規則的角色:
kubectl create role pod-reader \
--resource=pods --verb=watch --verb=get --verb=list
您可使用 yaml
檔案建立具有多項規則的角色。您先前在實驗室下載的文件已提供範例檔案。
檢查 yaml
檔案:
cat developer-role.yaml
輸出內容範例:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: team-a
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "services", "serviceaccounts"]
verbs: ["update", "create", "delete", "get", "watch", "list"]
- apiGroups:["apps"]
resources: ["deployments"]
verbs: ["update", "create", "delete", "get", "watch", "list"]
套用以上角色:
kubectl create -f developer-role.yaml
為 team-a-developers 服務帳戶和 developer-role 建立角色繫結:
kubectl create rolebinding team-a-developers \
--role=developer --user=team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
測試角色繫結
下載用於模擬服務帳戶的服務帳戶金鑰:
gcloud iam service-accounts keys create /tmp/key.json --iam-account team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
點選「Check my progress」 ,確認上述工作已完成。
命名空間的存取權控管
在 Cloud Shell 中點選 +
即可在終端機中開啟新的分頁。
執行以下指令來啟用服務帳戶。這項操作允許您以帳戶身分執行指令:
gcloud auth activate-service-account --key-file=/tmp/key.json
以服務帳戶的身分取得叢集憑證:
export ZONE={{{project_0.default_zone|placeholder}}}
gcloud container clusters get-credentials multi-tenant-cluster --zone ${ZONE} --project ${GOOGLE_CLOUD_PROJECT}
現在您可透過 team-a-dev 身分在 team-a 命名空間中列出 Pod:
kubectl get pods --namespace=team-a
輸出內容:
NAME READY STATUS RESTARTS AGE
app-server 1/1 Running 0 6d
但在 team-b 命名空間中列出 Pod 時會受到限制:
kubectl get pods --namespace=team-b
輸出內容:
Error from server (Forbidden): pods is forbidden: User "team-a-dev@a-gke-project.iam.gserviceaccount.com" cannot list resource "pods" in API group "" in the namespace "team-b": requires one of ["container.pods.list"] permission(s).
返回第一個 Cloud Shell 分頁或開啟新分頁。
更新叢集憑證,並重設 team-a 命名空間的背景資訊:
export ZONE={{{project_0.default_zone|placeholder}}}
gcloud container clusters get-credentials multi-tenant-cluster --zone ${ZONE} --project ${GOOGLE_CLOUD_PROJECT}
工作 4:資源配額
在多租戶環境中共用叢集時,請務必確保使用者無法使用超過其公平共享額度的叢集資源。資源配額物件 (ResourceQuota) 可定義命名空間中資源用量的限制。資源配額可讓您指定物件數量 (Pod、服務、有狀態集合等)、儲存空間資源總量 (永久磁碟區要求、臨時儲存空間、儲存空間級別) 或運算資源總量 (CPU 與記憶體) 的上限。
舉例來說,下列指令會將命名空間 team-a
中的 Pod 數量上限設定為 2,將負載平衡器數量上限設定為 1:
kubectl create quota test-quota \
--hard=count/pods=2,count/services.loadbalancers=1 --namespace=team-a
在命名空間 team-a 中建立第二個 Pod:
kubectl run app-server-2 --image=centos --namespace=team-a -- sleep infinity
接著嘗試建立第三個 Pod:
kubectl run app-server-3 --image=centos --namespace=team-a -- sleep infinity
您應該會收到下列錯誤訊息:
Error from server (Forbidden): pods "app-server-3" is forbidden: exceeded quota: test-quota, requested: count/pods=1, used: count/pods=2, limited: count/pods=2
您可使用 kubectl describe
查看資源配額的詳細資訊:
kubectl describe quota test-quota --namespace=team-a
輸出內容:
Name: test-quota
Namespace: team-a
Resource Used Hard
-------- ---- ----
count/pods 2 2
count/services.loadbalancers 0 1
您可以看到受到資源配額限制的資源清單,以及已設定的固定上限和目前使用量。
執行以下指令更新 test-quota
,將 Pod 上限設為 6 個:
export KUBE_EDITOR="nano"
kubectl edit quota test-quota --namespace=team-a
您可以編輯 yaml
檔案,以便 kubectl
用來更新配額。固定配額為 spec
下的 count/pods
值。
將 spec 下的 count/pods
值變更為 6 :
apiVersion: v1
kind: ResourceQuota
metadata:
creationTimestamp: "2020-10-21T14:12:07Z"
name: test-quota
namespace: team-a
resourceVersion: "5325601"
selfLink: /api/v1/namespaces/team-a/resourcequotas/test-quota
uid: a4766300-29c4-4433-ba24-ad10ebda3e9c
spec:
hard:
count/pods: "6"
count/services.loadbalancers: "1"
status:
hard:
count/pods: "5"
count/services.loadbalancers: "1"
used:
count/pods: "2"
依序按下 ctrl + X 鍵、Y 鍵和 Enter 鍵,即可儲存並結束。
變更後的配額現在應該會反映在輸出內容中:
kubectl describe quota test-quota --namespace=team-a
輸出內容:
Name: test-quota
Namespace: team-a
Resource Used Hard
-------- ---- ----
count/pods 2 6
count/services.loadbalancers 0 1
CPU 和記憶體配額
設定 CPU 和記憶體的配額時,您可以對要求總和 (保證容器可取得的值) 或限制總和 (永不允許容器傳遞的值) 指定相關配額。
在本實驗室中,您的叢集會有 4 部 e2-standard-2 機器,每部都具備 2 個核心和 8 GB 記憶體。先前已提供您叢集的資源配額 yaml 檔案範例:
cpu-mem-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: cpu-mem-quota
namespace: team-a
spec:
hard:
limits.cpu: "4"
limits.memory: "12Gi"
requests.cpu: "2"
requests.memory: "8Gi"
套用檔案設定:
注意: 請確保您仍位於 gke-qwiklab 目錄中。
kubectl create -f cpu-mem-quota.yaml
設定此配額後,所有 Pod 的 CPU 和記憶體要求總和上限為 2cpu 和 8GiB,而限制總和上限為 4cpu 和 12GiB。
注意: 在命名空間設有 CPU 或記憶體資源配額的情況下,在該命名空間中建立容器時,就必須定義所有容器個別的 CPU 和記憶體限制,或在命名空間中以 LimitRange 指派預設值。
為示範如何設定 CPU 和記憶體配額,請使用 cpu-mem-demo-pod.yaml
建立新的 Pod:
cpu-mem-demo-pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: cpu-mem-demo
namespace: team-a
spec:
containers:
- name: cpu-mem-demo-ctr
image: nginx
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "400m"
memory: "512Mi"
套用檔案設定:
kubectl create -f cpu-mem-demo-pod.yaml --namespace=team-a
完成建立這個 Pod 後,請執行以下指令來查看其 CPU 和記憶體要求和限制是否已反映在相關配額中:
kubectl describe quota cpu-mem-quota --namespace=team-a
輸出內容:
Name: cpu-mem-quota
Namespace: team-a
Resource Used Hard
-------- ---- ----
limits.cpu 400m 4
limits.memory 512Mi 12Gi
requests.cpu 100m 2
requests.memory 128Mi 8Gi
點選「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
。
點選「套用」 。
注意: 在指標欄位中輸入「cp」 後,您應該會看到下拉式選單中出現 CPU 使用時間的選項。
如要排除 kube-system 命名空間,請在篩選器部分點選「新增篩選器」 。
選取 namespace_name
做為標籤。
選取 != (does not equal)
做為比較子,並選取 kube-system
做為值。
接著,選取「匯總項目」 下拉式選單中的「總和」 ,以及「依據」下拉式選單中的「namespace_name」 ,並點選「確定」 。
您會看到一個圖表,其中顯示各命名空間的容器 CPU 使用時間:
GKE 用量計算功能
GKE 用量計算功能可讓您將 GKE 叢集資源使用率和使用量匯出至 BigQuery 資料集,並使用 Looker Studio 以圖表呈現資料,協助您深入瞭解資源使用情況。透過用量計算功能,即可妥善訂定資源配額和高效率叢集設定。
注意: 由於 GKE 指標資料可能需要幾個小時才會填入 BigQuery,基於示範用途考量,您的實驗室專案已包含具備模擬資源使用量和帳單資料的 BigQuery 資料集。
以下兩個資料集已加入您的專案中:
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
:
export ZONE={{{project_0.default_zone|placeholder}}}
gcloud container clusters \
update multi-tenant-cluster --zone ${ZONE} \
--resource-usage-bigquery-dataset cluster_dataset
建立 GKE 費用明細資料表
cost_breakdown 資料表可根據專案中的帳單和資源使用量資料表產生。您將使用 usage_metering_query_template.sql
檔案,在叢集資料集中產生這個資料表。此範例可透過瞭解叢集資源使用量 一文取得。
首先,在 Cloud Shell 設定部分環境變數。
為提供的帳單資料表以及提供的用量計算資料集設定路徑,並為新的費用明細資料表設定名稱:
export GCP_BILLING_EXPORT_TABLE_FULL_PATH=${GOOGLE_CLOUD_PROJECT}.billing_dataset.gcp_billing_export_v1_xxxx
export USAGE_METERING_DATASET_ID=cluster_dataset
export COST_BREAKDOWN_TABLE_ID=usage_metering_cost_breakdown
接著,指定本實驗室一開始下載的用量計算查詢範本路徑、用量計算查詢要產生的輸出檔案以及資料開始日期 (資料中最早日期為 2020-10-26):
export USAGE_METERING_QUERY_TEMPLATE=~/gke-qwiklab/usage_metering_query_template.sql
export USAGE_METERING_QUERY=cost_breakdown_query.sql
export USAGE_METERING_START_DATE=2020-10-26
現在使用這些環境變數和查詢範本,來產生用量計算查詢:
sed \
-e "s/\${fullGCPBillingExportTableID}/$GCP_BILLING_EXPORT_TABLE_FULL_PATH/" \
-e "s/\${projectID}/$GOOGLE_CLOUD_PROJECT/" \
-e "s/\${datasetID}/$USAGE_METERING_DATASET_ID/" \
-e "s/\${startDate}/$USAGE_METERING_START_DATE/" \
"$USAGE_METERING_QUERY_TEMPLATE" \
> "$USAGE_METERING_QUERY"
執行以下指令,使用您在前一步驟產生的查詢,設定費用明細資料表:
bq query \
--project_id=$GOOGLE_CLOUD_PROJECT \
--use_legacy_sql=false \
--destination_table=$USAGE_METERING_DATASET_ID.$COST_BREAKDOWN_TABLE_ID \
--schedule='every 24 hours' \
--display_name="GKE Usage Metering Cost Breakdown Scheduled Query" \
--replace=true \
"$(cat $USAGE_METERING_QUERY)"
資料移轉應該會提供授權連結。請點選該連結,以學員帳戶登入並按照指示操作,再將 version_info
貼回到 Cloud Shell 中。
這項操作之後應該會回傳訊息,告知移轉設定已成功建立。
在 Looker Studio 中建立資料來源
開啟 Looker Studio 資料來源頁面 。
依序點選左上角的「建立」 >「資料來源」 ,以新增資料來源。
畫面首先會顯示「完成您的帳戶設定,以便開始使用」 視窗。
勾選確認聲明核取方塊,然後點選「繼續」 。
在「設定電子郵件接收設定」 之下的每個問題中選取「否」 ,因為您使用的是臨時實驗室/帳戶。
點選「繼續」 。
您會看到 Looker Studio 支援的 Google 連接器清單。
從清單中選取 BigQuery。
按一下「授權」 按鈕,即可允許 Looker Studio 存取您的 BigQuery 專案。
在頁面左上角將資料來源名稱從 Untitled Data Source
改為 GKE Usage
。
在第一個資料欄中選取「自訂查詢」 。
在專案資料欄中選取「專案 ID」 。
在自訂查詢方塊中輸入以下查詢,並將 [PROJECT-ID]
替換成您的 Qwiklabs 專案 ID:
SELECT * FROM `[PROJECT-ID].cluster_dataset.usage_metering_cost_breakdown`
點選「連結」 。
點選「Check my progress」 ,確認上述工作已完成。
監控 GKE 和 GKE 用量計算功能
接著點選右上角。
完成新增資料來源之後,即可開始使用資料來建立報表。
在資料來源頁面頂端按一下「建立報表」 。
注意: 如果您這時收到錯誤訊息,代表您的資料移轉工作可能尚未完成,請稍後再試。
透過資料來源建立新報表時,系統會提示您將資料加到報表中。
按一下「加入報表」 。
建立 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 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。