arrow_back

透過命名空間管理 GKE 多租戶叢集

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

透過命名空間管理 GKE 多租戶叢集

实验 1 小时 15 分钟 universal_currency_alt 5 积分 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP766

Google Cloud 自修研究室標誌

總覽

針對以 Google Kubernetes Engine (GKE) 叢集為基礎建立的任何 Google Cloud 基礎架構,在構思最佳成本效益的解決方案時,您必須確保有效運用額外計費的資源。常見的錯誤做法是將使用者或團隊按一對一的比例指派給叢集,導致叢集大量增加。

多租戶叢集可讓多位使用者或團隊共用同一個叢集來處理工作負載,同時隔離資源,確保資源公平共享。這可透過建立命名空間來達成,因為命名空間可允許多個虛擬叢集存在於相同實體叢集中。

在本實驗室中,您將學習如何使用多個命名空間來設定多租戶叢集,以發揮最佳資源使用率,並有效提高成本效益。

目標

本實驗室的學習內容包括:

  • 在單一 GKE 叢集中建立多個命名空間。
  • 對命名空間存取權設定角色式存取權控管。
  • 設定 Kubernetes 資源配額,讓多個命名空間公平共享資源。
  • 瀏覽及設定監控資訊主頁,以查看命名空間個別的資源使用情況。
  • 使用 Looker Studio 產生 GKE 計量報表,取得命名空間個別資源使用率的精細指標。

設定和需求

點選「Start Lab」按鈕前的須知事項

請詳閱以下操作說明。研究室活動會計時,而且中途無法暫停。點選「Start Lab」 後就會開始計時,讓您瞭解有多少時間可以使用 Google Cloud 資源。

您將在真正的雲端環境中完成實作研究室活動,而不是在模擬或示範環境。為達此目的,我們會提供新的暫時憑證,讓您用來在研究室活動期間登入及存取 Google Cloud。

如要完成這個研究室活動,請先確認:

  • 您可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意:請使用無痕模式或私密瀏覽視窗執行此研究室。這可以防止個人帳戶和學生帳戶之間的衝突,避免個人帳戶產生額外費用。
  • 是時候完成研究室活動了!別忘了,活動一開始將無法暫停。
注意:如果您擁有個人 Google Cloud 帳戶或專案,請勿用於本研究室,以免產生額外費用。

如何開始研究室及登入 Google Cloud 控制台

  1. 按一下「Start Lab」(開始研究室) 按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的暫時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,然後選取「在無痕式視窗中開啟連結」

    接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」「導覽選單」圖示

啟動

按下「Start Lab」按鈕後,您會看到藍色的 Provisioning Lab Resources 訊息和預計剩餘時間。這時系統正在建立及設定用來測試多租戶叢集管理作業的環境,之後會在約 5 分鐘內完成建立叢集、複製 BigQuery 資料集,並產生代表團隊的服務帳戶。

完成後,畫面上就不會再顯示這個訊息。

請等候這項啟動程序完成,且訊息不再顯示,再開始使用實驗室。

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台上方的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示

連線完成即代表已通過驗證,且專案已設為您的 PROJECT_ID。輸出內容中有一行宣告本工作階段 PROJECT_ID 的文字:

您在本工作階段中的 Cloud Platform 專案會設為「YOUR_PROJECT_ID」

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」

  2. 輸出畫面應如下所示:

輸出內容:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = <project_ID>

輸出內容範例:

[core] project = qwiklabs-gcp-44776a13dea667a6 附註:如需有關 gcloud 的完整說明,請前往 Google Cloud 並參閱「gcloud CLI overview guide」(gcloud CLI 總覽指南)。

工作 1:下載所需檔案

  1. 在本實驗室中,某些步驟會使用 yaml 檔案來設定 Kubernetes 叢集。請將這些檔案從 Cloud Storage bucket 下載到 Cloud Shell 中:
gsutil -m cp -r gs://spls/gsp766/gke-qwiklab ~
  1. 將目前的工作目錄變更為 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 個系統命名空間。

  1. 您可執行以下指令取得現有叢集的命名空間完整清單:
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 系統建立的元件

並非所有元件都隸屬於命名空間。舉例來說,節點、永久磁碟區和命名空間本身就不隸屬於命名空間。

  1. 如需命名空間資源的完整清單,請執行以下指令:
kubectl api-resources --namespaced=true

建立命名空間資源時,必須為該命名空間資源與某個命名空間建立關聯,方法是納入 --namespace 旗標或在 yaml 中繼資料欄位中指定命名空間。

  1. 也可透過任何 kubectl get 子指令指定命名空間,以顯示命名空間的資源。範例如下:
kubectl get services --namespace=kube-system

這個指令會輸出 kube-system 命名空間中的所有服務。

建立新的命名空間

注意:建立其他命名空間時,請避免在名稱前面加上「kube」前置字元,因為系統命名空間已採用此作法。
  1. team-ateam-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) 只要在各自的命名空間中不重複即可。

  1. 舉例來說,您可以執行以下命令,在 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
  1. 執行 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」,確認上述工作已完成。 建立命名空間

  1. 執行 kubectl describe,並透過 --namespace 標籤指定命名空間,即可查看每個新建立 Pod 的其他詳細資料:
kubectl describe pod app-server --namespace=team-a
  1. 如要特別處理某個命名空間中的資源,只要在 kubectl 背景資訊中設定一次,就不需在每個指令中使用 --namespace 旗標:
kubectl config set-context --current --namespace=team-a
  1. 在此之後,系統將針對指定的命名空間執行所有後續指令,而您無需額外指定 --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、服務、部署作業等) 的存取權都是透過角色叢集角色加以定義,其中只有角色可套用於命名空間。角色可指定資源及每項資源適用的動作,而角色繫結則會指定向哪些使用者帳戶或群組指派該權限。

如要在現有命名空間中建立角色,請指定資源類型,並註明代表可執行哪些動作類型的「動詞」。

  1. 可使用 kubectl create 建立具有單一規則的角色:
kubectl create role pod-reader \ --resource=pods --verb=watch --verb=get --verb=list

您可使用 yaml 檔案建立具有多項規則的角色。您先前在實驗室下載的文件已提供範例檔案。

  1. 檢查 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"]
  1. 套用以上角色:
kubectl create -f developer-role.yaml
  1. 為 team-a-developers 服務帳戶和 developer-role 建立角色繫結:
kubectl create rolebinding team-a-developers \ --role=developer --user=team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

測試角色繫結

  1. 下載用於模擬服務帳戶的服務帳戶金鑰:
gcloud iam service-accounts keys create /tmp/key.json --iam-account team-a-dev@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

點選「Check my progress」,確認上述工作已完成。 命名空間的存取權控管

  1. 在 Cloud Shell 中點選 + 即可在終端機中開啟新的分頁。

  2. 執行以下指令來啟用服務帳戶。這項操作允許您以帳戶身分執行指令:

gcloud auth activate-service-account --key-file=/tmp/key.json
  1. 以服務帳戶的身分取得叢集憑證:
export ZONE={{{project_0.default_zone|placeholder}}} gcloud container clusters get-credentials multi-tenant-cluster --zone ${ZONE} --project ${GOOGLE_CLOUD_PROJECT}
  1. 現在您可透過 team-a-dev 身分在 team-a 命名空間中列出 Pod:
kubectl get pods --namespace=team-a

輸出內容:

NAME READY STATUS RESTARTS AGE app-server 1/1 Running 0 6d
  1. 但在 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).
  1. 返回第一個 Cloud Shell 分頁或開啟新分頁。

  2. 更新叢集憑證,並重設 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 與記憶體) 的上限。

  1. 舉例來說,下列指令會將命名空間 team-a 中的 Pod 數量上限設定為 2,將負載平衡器數量上限設定為 1:
kubectl create quota test-quota \ --hard=count/pods=2,count/services.loadbalancers=1 --namespace=team-a
  1. 在命名空間 team-a 中建立第二個 Pod:
kubectl run app-server-2 --image=centos --namespace=team-a -- sleep infinity
  1. 接著嘗試建立第三個 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
  1. 您可使用 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

您可以看到受到資源配額限制的資源清單,以及已設定的固定上限和目前使用量。

  1. 執行以下指令更新 test-quota,將 Pod 上限設為 6 個:
export KUBE_EDITOR="nano" kubectl edit quota test-quota --namespace=team-a

您可以編輯 yaml 檔案,以便 kubectl 用來更新配額。固定配額為 spec 下的 count/pods 值。

  1. 將 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"
  1. 依序按下 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"
  1. 套用檔案設定:
注意:請確保您仍位於 gke-qwiklab 目錄中。 kubectl create -f cpu-mem-quota.yaml

設定此配額後,所有 Pod 的 CPU 和記憶體要求總和上限為 2cpu 和 8GiB,而限制總和上限為 4cpu 和 12GiB。

注意:在命名空間設有 CPU 或記憶體資源配額的情況下,在該命名空間中建立容器時,就必須定義所有容器個別的 CPU 和記憶體限制,或在命名空間中以 LimitRange 指派預設值。
  1. 為示範如何設定 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"
  1. 套用檔案設定:
kubectl create -f cpu-mem-demo-pod.yaml --namespace=team-a
  1. 完成建立這個 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 資訊主頁

  1. 在 Cloud Console 中展開頁面左上角的「導覽選單」,接著依序選取選單中的「Operations」>「Monitoring」

請等候系統為您的專案建構工作區。

  1. 畫面顯示總覽頁面時,請在左選單中選取「資訊主頁」

總覽頁面中醒目顯示的「資訊主頁」選項。

  1. 在「資訊主頁總覽」頁面中選取「GKE」

GKE 資訊主頁會提供一系列的資料表,詳列由多個資源匯總而成的 CPU、記憶體和磁碟使用率資料。

舉例來說,「命名空間」資料表會顯示叢集中每個命名空間的使用率:

「命名空間」資料表列出了多個名稱,其中包括警告和錯誤記錄檔等資訊。

在「工作負載」資料表中,您也可以針對在叢集上執行的工作負載查詢相關使用率資料。

  1. 按一下「查看全部」

  2. ADD FILTER 方塊中,依序選取「命名空間」>「team-a」

  3. 然後點選「套用」

這項操作可篩選工作負載,僅納入在 team-a 命名空間上執行的工作負載:

Metrics Explorer

  1. 在左側窗格中選取「Metrics Explorer」

  2. 在「選取指標」欄位中,按一下「指標」下拉式選單。

  3. 依照資源和指標名稱,在篩選器中輸入「Kubernetes 容器」

  4. 依序點選「Kubernetes 容器」>「容器」

  5. 選取 CPU usage time

  6. 點選「套用」

注意:在指標欄位中輸入「cp」後,您應該會看到下拉式選單中出現 CPU 使用時間的選項。
  1. 如要排除 kube-system 命名空間,請在篩選器部分點選「新增篩選器」

  2. 選取 namespace_name 做為標籤。

  3. 選取 != (does not equal) 做為比較子,並選取 kube-system 做為值。

  4. 接著,選取「匯總項目」下拉式選單中的「總和」,以及「依據」下拉式選單中的「namespace_name」,並點選「確定」

    您會看到一個圖表,其中顯示各命名空間的容器 CPU 使用時間:

Metrics Explorer 呈現的圖表按命名空間名稱和使用率顯示使用時間。

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 設定部分環境變數。

  1. 為提供的帳單資料表以及提供的用量計算資料集設定路徑,並為新的費用明細資料表設定名稱:
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
  1. 接著,指定本實驗室一開始下載的用量計算查詢範本路徑、用量計算查詢要產生的輸出檔案以及資料開始日期 (資料中最早日期為 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
  1. 現在使用這些環境變數和查詢範本,來產生用量計算查詢:
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"
  1. 執行以下指令,使用您在前一步驟產生的查詢,設定費用明細資料表:
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)"
  1. 資料移轉應該會提供授權連結。請點選該連結,以學員帳戶登入並按照指示操作,再將 version_info 貼回到 Cloud Shell 中。

這項操作之後應該會回傳訊息,告知移轉設定已成功建立。

在 Looker Studio 中建立資料來源

  1. 開啟 Looker Studio 資料來源頁面

  2. 依序點選左上角的「建立」>「資料來源」,以新增資料來源。

畫面首先會顯示「完成您的帳戶設定,以便開始使用」視窗。

  1. 勾選確認聲明核取方塊,然後點選「繼續」

  2. 在「設定電子郵件接收設定」之下的每個問題中選取「否」,因為您使用的是臨時實驗室/帳戶。

  3. 點選「繼續」

您會看到 Looker Studio 支援的 Google 連接器清單。

  1. 從清單中選取 BigQuery。

點選「更多」圖示後會顯示 BigQuery Google 連接器。

  1. 按一下「授權」按鈕,即可允許 Looker Studio 存取您的 BigQuery 專案。

  2. 在頁面左上角將資料來源名稱從 Untitled Data Source 改為 GKE Usage

  3. 在第一個資料欄中選取「自訂查詢」

  4. 在專案資料欄中選取「專案 ID」

  5. 在自訂查詢方塊中輸入以下查詢,並將 [PROJECT-ID] 替換成您的 Qwiklabs 專案 ID:

SELECT * FROM `[PROJECT-ID].cluster_dataset.usage_metering_cost_breakdown`
  1. 點選「連結」

點選「Check my progress」,確認上述工作已完成。 監控 GKE 和 GKE 用量計算功能

  1. 接著點選右上角。

完成新增資料來源之後,即可開始使用資料來建立報表。

  1. 在資料來源頁面頂端按一下「建立報表」

GKE Metering 資料來源頁面中醒目顯示的「建立報表」按鈕。

注意:如果您這時收到錯誤訊息,代表您的資料移轉工作可能尚未完成,請稍後再試。

透過資料來源建立新報表時,系統會提示您將資料加到報表中。

  1. 按一下「加入報表」

建立 Looker Studio 報表

您可以在報表中運用 BigQuery 資料表,以圖表形式呈現資料來源的用量指標。

首先從簡易的資料表開始:

資料表有兩個資料欄,資料欄標題下有兩個資料列:cluster_location 和 Record Count。

您將對這個資料表進行設定,按命名空間顯示費用明細。選取資料表後,右側面板會顯示相應資料。

  1. 在該面板中變更下列項目:
  • 資料範圍維度:usage_start_time
  • 維度:namespace
  • 指標:cost

所有其他欄位則保留預設值。

您可以套用篩選器來限制資料表只顯示命名空間資源。

  1. 在資料面板中,點選「篩選器」部分下方的「新增篩選器」。建立篩選器來排除未分配給命名空間的資源:

將篩選選項設為「排除」,並選取其中的命名空間選項。

  1. 點選「儲存」

  2. 再次點選「新增篩選器」和「建立篩選器」來建立第二個篩選器,將資料內容限制為要求:

將篩選選項設為「包含」,並選取其中的類型選項。

  1. 點選「儲存」即可套用篩選器。資料表結果應如下所示:

有兩個資料欄 namespace 和 cost 的資料表,資料欄標題下有四個資料列。

接著,您將在報表中加上圓餅圖,按命名空間顯示費用明細。

  1. 在您建立的資料表上按一下滑鼠右鍵,並選取「複製」

  2. 將複製的資料表物件拖曳至報表的任一處。

  3. 接著點選設定面板的標頭:

設定面板的「圖表」部分中醒目顯示的「資料表」類別。

  1. 在顯示的選項中,點選「圓餅圖」圖示:

多個圖塊代表各種圖表類型,其中醒目顯示「圓餅圖」選項。

圓餅圖結果應如下所示:

資料表中的四個資料列內容以圓餅圖格式呈現。

接著,您將新增圓環圖,按資源類型顯示費用明細。

  1. 點選頂端工具列的「新增圖表」,並選取 23497d0573f8232a.png (圓環圖示) 來建立圓環圖。

  2. 將圖表拖曳至報表的任一處,並設定下列項目:

  • 資料範圍維度:usage_start_time
  • 維度:resource_name
  • 指標:cost
  1. 按一下「新增篩選器」,然後選取您對前一個圖表套用的 2 個篩選器。圓環圖結果應如下所示:

圓餅圖在套用篩選器後顯示剩餘的兩個資料列。

  1. 如要按命名空間新增資料細目,請按一下頂端工具列的「新增控制項」,並選取「下拉式清單」

  2. 將細目拖曳至圓環圖旁,並設定下列項目:

  • 資料範圍維度:usage_start_time
  • 控制項欄位:namespace
  • 指標:None
  1. 按一下「新增篩選器」

  2. 從清單中選取「unallocated (namespace filter)」

  3. 如要讓控制項只適用於圓環圖,請使用選取器游標選取控制項物件和圓環圖,藉此在兩個物件周圍拉出一個矩形。

  4. 按一下滑鼠右鍵並選取「群組」,即可將物件結合為群組:

矩形環繞物件四周,右鍵選單醒目顯示著「群組」選項

  1. 如要預覽報表,請按一下頂端工具列的「資料檢視」

在檢視模式中,您可以將圓環圖調整為顯示特定命名空間的內容:

資料表有三個資料欄,旁邊有兩個圓餅圖分別包含不同資料。

  1. 在頁面頂端的「共用」選單中,按一下「下載報表」,即可將完整報表副本以 PDF 檔案格式下載。

恭喜!

運用命名空間即可將叢集設定為多租戶,盡可能降低資源使用率不足和叢集大量增加的風險,並避免產生額外費用。此外,使用監控和 GKE 計量功能之後,還可依照命名空間以圖表呈現資源使用率,藉此妥善訂定資源配額和叢集設定。

後續步驟/瞭解詳情

Google Cloud 教育訓練與認證

協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。

使用手冊上次更新日期:2024 年 2 月 2 日

研究室上次測試日期:2024 年 2 月 2 日

Copyright 2024 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您