本文說明如何安裝 Cluster Services for OpenShift Telemetry operator,並設定該運算子,連線至在 Compute Engine 執行個體上運作的 OpenShift 叢集。
安裝及設定後,這個遙測運算子會部署主機網路遙測 Daemon,持續監控叢集健康狀態和叢集設定。運算子會將收集到的指標傳送至 Workload Manager。接著,您可以使用 Workload Manager 評估,掃描叢集中執行的工作負載,找出與 OpenShift 叢集最佳做法不符之處。
事前準備
安裝及設定遙測運算子前,請務必確認符合下列必要條件:
- 您使用的是 Red Hat OpenShift Container Platform 4.18 以上版本。
- 您已在一或多個運算執行個體上部署 OpenShift 叢集。
- 管理員已在 Red Hat OpenShift Container Platform 中,授予您叢集的 ClusterAdmin 角色。
- 您已在終端機中下載並安裝 Google Cloud CLI。如果您使用 Cloud Shell,則可略過這項必要條件。
- 您已在叢集中安裝 OpenShift CLI (
oc)。如要瞭解如何安裝這個 CLI,請參閱 Red Hat 文件「安裝 OpenShift CLI」。 - 您已安裝 Cloud Credentials Operator (
ccoctl) 公用程式。如要瞭解如何安裝這項公用程式,請參閱 Red Hat 文件「 How to obtain theccoctltool for OpenShift 4」(如何取得 OpenShift 4 的ccoctl工具)。 - 您已查看可建立 Workload Manager 評估作業的支援區域。
- 管理員已授予您建立及執行 Workload Manager 評估作業所需的 IAM 角色。
- 您已啟用 Cloud API 存取權。
啟用 Cloud API 存取權
Compute Engine 建議您將執行個體設為允許所有 Cloud API 的所有存取權範圍,並僅使用執行個體服務帳戶的 IAM 權限來控管Google Cloud 資源的存取權。詳情請參閱「建立採用使用者自行管理服務帳戶的 VM」。
如果限制 Cloud API 存取權,Cluster Services for OpenShift Telemetry 運算子在主機運算執行個體上,至少需要下列 Cloud API 存取權範圍:
https://www.googleapis.com/auth/cloud-platform
詳情請參閱「範圍最佳做法」。
如果 OpenShift 叢集是在沒有外部 IP 位址的運算執行個體上執行,則必須在執行個體的子網路上啟用 Private Google Access,Cluster Services for OpenShift Telemetry 運算子才能存取 Google API 和服務。如要瞭解如何啟用 Private Google Access,請參閱「設定 Private Google Access」。
驗證 OpenShift 叢集的使用者
如要執行管理動作,您或使用者必須使用 OpenShift CLI 向 OpenShift 叢集進行驗證。如要驗證 OpenShift 叢集的使用者,可以選擇下列選項:
執行下列指令,並按照提示操作:
oc login "https://api.CLUSTER_DOMAIN:6443" -u kubeadmin或者,您也可以取得工作階段驗證權杖,與
oc二進位檔搭配使用。如要取得這個權杖,請在網路瀏覽器中開啟下列網址:https://oauth-openshift.apps.CLUSTER_DOMAIN/oauth/token/request
將 CLUSTER_DOMAIN 替換為 OpenShift 叢集的網域。例如:mycluster.google.com。
驗證 Google Cloud的運算子
如要讓遙測運算子自行驗證並存取 Google Cloud資源,您必須在 Google Cloud 專案中為其建立服務帳戶。
您可以使用下列選項,將遙測運算子驗證為服務帳戶:
使用 Workload Identity Federation 驗證運算子
如要使用 Workload Identity Federation,將遙測運算子驗證為服務帳戶,請完成下列步驟:
在終端機中,將遙測運算子套件中的
CredentialsRequest資訊清單擷取至本機目錄:mkdir -p credrequests oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirm將
VERSION替換為您在 OperatorHub 中訂閱的遙測運算子版本號碼。如要查看遙測運算子的認證版本號碼清單,請前往 Red Hat Ecosystem Catalog。使用
ccoctl公用程式處理擷取的CredentialsRequest資訊清單,並佈建 Google Cloud Identity and Access Management (IAM) 繫結和憑證:(建議) 適用於 OpenShift 4.22 以上版本:
強烈建議您使用 OpenShift 4.22 以上版本,並搭配
--key-storage-method=pool-jwk-file旗標,將叢集的 JSON Web Key Set (JWKS) 直接儲存在 Workload Identity Pool Provider 中,這樣就不必建立 Cloud Storage bucket:ccoctl gcp create-all \ --name=NAME \ --region=REGION \ --project=PROJECT_ID \ --credentials-requests-dir=./credrequests \ --output-dir=./ccoctl-out \ --key-storage-method=pool-jwk-fileOpenShift 4.18 至 4.21 版:
安裝遙測運算子後,您也必須完成必要的安裝後步驟,限制 Workload Identity Federation 提供者。
ccoctl gcp create-all \ --name=NAME \ --region=REGION \ --project=PROJECT_ID \ --credentials-requests-dir=./credrequests \ --output-dir=./ccoctl-out
更改下列內容:
NAME:ccoctl公用程式建立的憑證和資源名稱。強烈建議您為叢集或組織指定不重複且高度隨機的名稱 (例如加入隨機英數字尾)。REGION:OpenShift 叢集執行的 Compute Engine 區域PROJECT_ID:OpenShift 叢集所在 Google Cloud 專案的專案 ID
將產生的 OpenID Connect (OIDC) 供應商、IAM 角色和 Secret 資訊清單套用至叢集:
oc apply -f ./ccoctl-out/manifests/
上述步驟會在 Google Cloud 專案中建立服務帳戶,並指派下列 IAM 角色:
- 如要從運算執行個體收集指標:Compute 檢視者 (
roles/compute.viewer) - 如要將資料寫入 Workload Manager 資料倉儲:Workload Manager 深入分析資訊寫入者 (
roles/workloadmanager.insightWriter) - 如要將運算子記錄傳送至 Cloud Logging:
記錄寫入者 (
roles/logging.logWriter)
使用服務帳戶金鑰驗證運算子
如果貴組織不支援使用 Workload Identity Federation 進行驗證,則可使用服務帳戶金鑰驗證遙測運算子。
如要使用服務帳戶金鑰,將遙測運算子驗證為服務帳戶,請完成下列步驟:
在終端機中,將遙測運算子套件中的
CredentialsRequest資訊清單擷取至本機目錄:mkdir -p credrequests oc image extract us-docker.pkg.dev/workload-agent-products/cluster-services-for-openshift-telemetry/bundle:VERSION --path /manifests/:./credrequests --confirm在 Google Cloud 專案中,為遙測運算子建立服務帳戶:
gcloud iam service-accounts create cso-telemetry-agent \ --description="Service account for OpenShift Telemetry Operator" \ --display-name="CSO Telemetry Agent" \ --project=PROJECT_ID將
PROJECT_ID替換為執行 OpenShift 叢集的Google Cloud 專案 ID。如要允許服務帳戶存取 Google Cloud 資源,請將
CredentialsRequest資訊清單中定義的身分與存取權管理角色授予服務帳戶。這份資訊清單包含操作者所需的下列最低 IAM 角色組合:- 如要從運算執行個體收集指標:Compute 檢視者 (
roles/compute.viewer) - 如要將資料寫入 Workload Manager 資料倉儲:Workload Manager 深入分析資訊寫入者 (
roles/workloadmanager.insightWriter) - 如要將運算子記錄傳送至 Cloud Logging:
記錄寫入者 (
roles/logging.logWriter)
針對這份資訊清單中定義的每個 IAM 角色,執行下列指令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com" \ --role="IAM_ROLE"將
IAM_ROLE替換為要授予服務帳戶的身分與存取權管理角色。- 如要從運算執行個體收集指標:Compute 檢視者 (
建立並下載服務帳戶的私密金鑰:
gcloud iam service-accounts keys create ./sa_key.json \ --iam-account=cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com \ --project=PROJECT_ID在
openshift-operators命名空間中,為您建立的服務帳戶金鑰建立名為telemetry-agent-sa的 Secret:oc create secret generic telemetry-agent-sa \ --from-file=workload_agent_sa_key.json=./sa_key.json \ -n openshift-operators
安裝 Cluster Services for OpenShift Telemetry operator
您可以使用 Red Hat OpenShift Container Platform 網頁控制台,或宣告式訂閱 YAML 資訊清單,安裝 Cluster Services for OpenShift Telemetry 運算子。如要瞭解這些選項,請參閱 Red Hat 文件「Adding Operators to a cluster」(將 Operator 新增至叢集)。
OpenShift 網路控制台
如要使用 OpenShift Container Platform 網頁控制台,在 OpenShift 叢集中安裝遙測運算子,請完成下列步驟:
- 登入 Red Hat OpenShift 網路控制台。
- 確認您位於「Administrator」(管理員) 檢視畫面。
- 在左側導覽列中,展開「Operators」部分,然後按一下「OperatorHub」。
在「All items」(所有項目) 下方的搜尋列中,輸入 Cluster Services for OpenShift Telemetry。
或者,您也可以輸入 Google 進行搜尋。這會篩選 Google 提供的運算子,包括 Cluster Services for OpenShift Telemetry 運算子。
按一下「Cluster Services for OpenShift Telemetry」資訊卡。
在「Cluster Services for OpenShift Telemetry」窗格中,按一下「Install」(安裝)。
在「Install Operator」(安裝運算子) 頁面中,完成下列步驟:
- 在「Update channel」(更新管道) 欄位中,選取「stable」(穩定)。
- 在「Installation mode」(安裝模式) 欄位中,選取「A specific namespace on the cluster」(叢集上的特定命名空間)。
- 在「Installed Namespace」(已安裝的命名空間) 欄位中,選取「openshift-operators」專案,或建立自訂監控命名空間。
- 在「Approval Strategy」(核准策略) 欄位中,選取「Automatic」(自動) 或「Manual」(手動)。
- 按一下 [安裝]。
如要確認運算子是否已成功安裝,請完成下列步驟:
- 依序前往 「Operators」>「Installed Operators」。
- 在運算子清單中,搜尋並確認 Cluster Services for OpenShift Telemetry 運算子是否存在。
- 確認「Status」(狀態) 欄顯示「Succeeded」(成功) 或「Up to date」(最新)。
- (選用) 按一下運算子即可查看詳細資料。
OpenShift CLI
如要使用 OpenShift CLI 和宣告式 Subscription YAML 資訊清單,在 OpenShift 叢集中安裝遙測運算子,請完成下列步驟:
使用下列設定,建立名為
subscription.yaml的Subscription自訂資源資訊清單:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: google-cloud-cluster-services-for-openshift-telemetry namespace: openshift-operators spec: channel: stable installPlanApproval: Automatic name: google-cloud-cluster-services-for-openshift-telemetry source: certified-operators sourceNamespace: openshift-marketplace將訂閱項目套用至叢集:
oc apply -f subscription.yaml檢查
ClusterServiceVersion的狀態,確認遙測運算子已成功安裝:oc get csv -n openshift-operators在輸出內容中,確認
cluster-services-for-openshift-telemetry的PHASE欄值為Succeeded。
限制 Workload Identity Federation 提供者
如果您在 OpenShift 4.18 至 4.21 版設定 Workload Identity Federation 時,未使用 --key-storage-method=pool-jwk-file 旗標,叢集會使用 Cloud Storage bucket 代管 OIDC 設定。安裝 Cluster Services for OpenShift Telemetry 運算子後,請完成下列必要安裝後步驟,將 workload identity pool provider 限制為叢集的特定服務帳戶 UID:
擷取
openshift-operators命名空間中遙測運算子的 Kubernetes 服務帳戶專屬 ID (uid):KSA_UID=$(oc get serviceaccount google-cloud-cluster-services-telemetry-agent-workloadagent-service-account \ -n openshift-operators \ -o jsonpath='{.metadata.uid}')使用屬性條件更新 Workload Identity Pool Provider,將權杖交換固定至擷取的服務帳戶 UID:
gcloud iam workload-identity-pools providers update-oidc PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --project="PROJECT_ID" \ --attribute-condition="assertion['kubernetes.io']['serviceaccount']['uid']=='${KSA_UID}'"更改下列內容:
PROVIDER_ID:ccoctl公用程式建立的 Workload Identity Pool 提供者 ID (與ccoctl gcp create-all指令中的NAME相符)POOL_ID:ccoctl公用程式建立的 Workload Identity Pool ID (與ccoctl gcp create-all指令中的NAME相符)PROJECT_ID:OpenShift 叢集所在 Google Cloud 專案的專案 ID
如果 google-cloud-cluster-services-telemetry-agent-workloadagent-service-account 服務帳戶或運算子在叢集上遭到刪除並重新建立,系統會產生新的 UID,您必須使用新的 UID 重新執行 update-oidc 指令。
啟用指標收集功能
如要讓運算子從 OpenShift 叢集收集指標,您必須套用 TelemetryConfig 自訂資源。這項資源會為運算工作負載代理,在叢集節點上部署 Daemon Pod。
如要讓運算子從 OpenShift 叢集收集指標,請完成下列步驟:
建立名為
telemetryconfig.yaml的TelemetryConfig自訂資源資訊清單:如果您已使用 Workload Identity Federation 設定遙測運算子的驗證機制,請使用下列最低自訂資源。這項自訂資源會自動擷取儲存在
google-cloud-cluster-services-telemetry-agent-wif-secret密鑰中的憑證。apiVersion: cluster-services-openshift.cloud.google.com/v1alpha1 kind: TelemetryConfig metadata: name: telemetryconfig namespace: openshift-operators spec: enabled: true如果您已使用服務帳戶金鑰為遙測運算子設定驗證,請使用下列自訂資源:
apiVersion: cluster-services-openshift.cloud.google.com/v1alpha1 kind: TelemetryConfig metadata: name: telemetryconfig namespace: openshift-operators spec: enabled: true serviceAccountCredentialsSecretName: telemetry-agent-sa serviceAccountCredentialsPath: SERVICE_ACCOUNT_KEY_PATH將
SERVICE_ACCOUNT_KEY_PATH替換為掛接服務帳戶金鑰的路徑。掛接名稱必須與服務帳戶金鑰 JSON 檔案相符。例如:/var/run/secrets/google/workload_agent_sa_key.json。
將自訂資源套用至叢集:
oc apply -f telemetryconfig.yaml確認遙測代理程式 Pod 的狀態為「Running」:
oc get pods -n openshift-operators -l app.kubernetes.io/name=workloadagent-operator您也可以檢查 Pod 的記錄,確認指標收集作業是否正常運作:
"openshiftmetrics/openshiftmetrics.go:126","msg":"Metric payload after collection","pid":5,"context":"OpenShiftMetricCollection","payload":"version:\"v0.1.0-pre\" agent_version:\"1.3\"
在 Cloud Logging 查看運算子記錄
根據預設,Cluster Services for OpenShift Telemetry 運算子的記錄會傳送至 Cloud Logging。您可以在 Logging 中查看這些記錄。如要在 Logging 中查看運算子記錄,請完成下列步驟:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在查詢窗格中輸入查詢:
如要篩選 Google Cloud 專案的記錄,請使用下列查詢:
logName="projects/PROJECT_ID/logs/google-cloud-workload-agent"
將
PROJECT_ID替換為執行 OpenShift 叢集的Google Cloud 專案 ID。如果您在 Google Cloud 專案中執行多個叢集,並想篩選特定叢集的記錄,請使用下列查詢:
resource.labels.instance_id=("COMPUTE_INSTANCE_ID_1" OR "COMPUTE_INSTANCE_ID_2" OR "COMPUTE_INSTANCE_ID_3")將
COMPUTE_INSTANCE_ID替換為執行 OpenShift 叢集的 Compute Engine 執行個體執行個體 ID。如要瞭解如何找出運算執行個體 ID,請參閱「查看 VM 詳細資料」。
點選「執行查詢」。
設定記錄型警告政策
根據預設,遙測運算子的記錄會傳送至 Cloud Logging。建議您根據遙測運算子記錄設定警告政策,在記錄中出現特定訊息時通知您。這些快訊可協助您監控運算子的運作情形,並排解問題。
如要根據遙測運算子產生的記錄設定警告政策,請完成下列步驟:
確認您已符合「設定記錄檔警告政策」的「事前準備」一節所述的必要條件。
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在查詢窗格中輸入所需查詢:
logName="projects/PROJECT_ID/logs/google-cloud-workload-agent" severity=SEVERITY_LEVEL
將
SEVERITY_LEVEL替換為支援的嚴重性等級值,包括:DEBUG、INFO、WARNING和ERROR。建議您使用ERROR或更高的記錄層級值。按一下「執行查詢」來驗證查詢。
建立記錄檔警告。
如要瞭解如何建立這類警告,請參閱「使用 Logs Explorer 建立記錄檔警告政策」一文所述程序中的步驟三。
選用:啟用正式環境專屬評估
在 Workload Manager 支援的 OpenShift 叢集最佳做法中,部分僅適用於正式環境。Workload Manager 會檢查叢集、Deployment 或 Pod 是否有 environment 標籤,藉此區分工作負載。如果與這個標籤相關聯的值是 production,Workload Manager 就會將該資源視為正式環境資源。
如要告知 Workload Manager 叢集屬於正式環境,請完成下列步驟:
建立
workloadmanager命名空間:oc create namespace workloadmanager使用下列設定,在
workloadmanager命名空間中建立ConfigMap:apiVersion: v1 kind: ConfigMap metadata: name: wlm-cluster-environment namespace: workloadmanager data: # Options: "production" or "non-production" environment: "production"
如要告知 Workload Manager 某個 Deployment 或 Pod 屬於正式環境,請使用下列任一選項,在資源定義中新增名為 environment 的標籤:
手動套用下列設定:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app labels: # Options: "production" or "non-production" environment: "production" spec: ...執行下列指令:
oc label --overwrite deployments DEPLOYMENT_NAME environment=production將
DEPLOYMENT_NAME替換為部署作業名稱。
如果您在 OpenShift 叢集和在叢集上執行的 Deployment 或 Pod 上套用 environment 標籤,Workload Manager 會優先採用為 Deployment 或 Pod 設定的標籤值,而非為叢集設定的標籤值。
選用:觸發指標收集
在 OpenShift 叢集成功設定 Cluster Services for OpenShift Telemetry operator 後,operator 會從叢集收集指標,並每 30 分鐘傳送至 Workload Manager。
您也可以選擇手動觸發運算子來收集指標,並傳送至 Workload Manager,而不必等待 30 分鐘,讓系統按照排程收集指標。
如要手動觸發運算子來收集指標,請完成下列步驟:
開啟終端機。
找出執行中 Pod 的名稱:
POD_NAME=$(oc get pods -l app.kubernetes.io/name=workloadagent-operator --field-selector=status.phase=Running -o=name)觸發運算子,收集並傳送指標:
oc debug -t $POD_NAME -- /openshift-docker-entrypoint.sh