設定 Cluster Services for OpenShift Telemetry 運算子

本文說明如何安裝 Cluster Services for OpenShift Telemetry operator,並設定該運算子,連線至在 Compute Engine 執行個體上運作的 OpenShift 叢集。

安裝及設定後,這個遙測運算子會部署主機網路遙測 Daemon,持續監控叢集健康狀態和叢集設定。運算子會將收集到的指標傳送至 Workload Manager。接著,您可以使用 Workload Manager 評估,掃描叢集中執行的工作負載,找出與 OpenShift 叢集最佳做法不符之處。

事前準備

安裝及設定遙測運算子前,請務必確認符合下列必要條件:

啟用 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,將遙測運算子驗證為服務帳戶,請完成下列步驟:

  1. 在終端機中,將遙測運算子套件中的 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。

  2. 使用 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-file
      
    • OpenShift 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
  3. 將產生的 OpenID Connect (OIDC) 供應商、IAM 角色和 Secret 資訊清單套用至叢集:

    oc apply -f ./ccoctl-out/manifests/
    

上述步驟會在 Google Cloud 專案中建立服務帳戶,並指派下列 IAM 角色:

使用服務帳戶金鑰驗證運算子

如果貴組織不支援使用 Workload Identity Federation 進行驗證,則可使用服務帳戶金鑰驗證遙測運算子。

如要使用服務帳戶金鑰,將遙測運算子驗證為服務帳戶,請完成下列步驟:

  1. 在終端機中,將遙測運算子套件中的 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
    
  2. 在 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。

  3. 如要允許服務帳戶存取 Google Cloud 資源,請將 CredentialsRequest 資訊清單中定義的身分與存取權管理角色授予服務帳戶。這份資訊清單包含操作者所需的下列最低 IAM 角色組合:

    針對這份資訊清單中定義的每個 IAM 角色,執行下列指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com" \
      --role="IAM_ROLE"
    

    將 IAM_ROLE 替換為要授予服務帳戶的身分與存取權管理角色。

  4. 建立並下載服務帳戶的私密金鑰:

    gcloud iam service-accounts keys create ./sa_key.json \
      --iam-account=cso-telemetry-agent@PROJECT_ID.iam.gserviceaccount.com \
      --project=PROJECT_ID
    
  5. 在 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 叢集中安裝遙測運算子,請完成下列步驟:

  1. 登入 Red Hat OpenShift 網路控制台。
  2. 確認您位於「Administrator」(管理員) 檢視畫面。
  3. 在左側導覽列中,展開「Operators」部分,然後按一下「OperatorHub」。
  4. 在「All items」(所有項目) 下方的搜尋列中,輸入 Cluster Services for OpenShift Telemetry。

    或者,您也可以輸入 Google 進行搜尋。這會篩選 Google 提供的運算子,包括 Cluster Services for OpenShift Telemetry 運算子。

  5. 按一下「Cluster Services for OpenShift Telemetry」資訊卡。

  6. 在「Cluster Services for OpenShift Telemetry」窗格中,按一下「Install」(安裝)。

  7. 在「Install Operator」(安裝運算子) 頁面中,完成下列步驟:

    1. 在「Update channel」(更新管道) 欄位中,選取「stable」(穩定)。
    2. 在「Installation mode」(安裝模式) 欄位中,選取「A specific namespace on the cluster」(叢集上的特定命名空間)。
    3. 在「Installed Namespace」(已安裝的命名空間) 欄位中,選取「openshift-operators」專案,或建立自訂監控命名空間。
    4. 在「Approval Strategy」(核准策略) 欄位中,選取「Automatic」(自動) 或「Manual」(手動)。
    5. 按一下 [安裝]。
  8. 如要確認運算子是否已成功安裝,請完成下列步驟:

    1. 依序前往 「Operators」>「Installed Operators」。
    2. 在運算子清單中,搜尋並確認 Cluster Services for OpenShift Telemetry 運算子是否存在。
    3. 確認「Status」(狀態) 欄顯示「Succeeded」(成功) 或「Up to date」(最新)。
    4. (選用) 按一下運算子即可查看詳細資料。

OpenShift CLI

如要使用 OpenShift CLI 和宣告式 Subscription YAML 資訊清單,在 OpenShift 叢集中安裝遙測運算子,請完成下列步驟:

  1. 使用下列設定,建立名為 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
    
  2. 將訂閱項目套用至叢集:

    oc apply -f subscription.yaml
    
  3. 檢查 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:

  1. 擷取 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}')
    
  2. 使用屬性條件更新 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 叢集收集指標,請完成下列步驟:

  1. 建立名為 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。

  2. 將自訂資源套用至叢集:

    oc apply -f telemetryconfig.yaml
    
  3. 確認遙測代理程式 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 中查看運算子記錄,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

  2. 在查詢窗格中輸入查詢:

    • 如要篩選 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 詳細資料」。

  3. 點選「執行查詢」。

設定記錄型警告政策

根據預設,遙測運算子的記錄會傳送至 Cloud Logging。建議您根據遙測運算子記錄設定警告政策,在記錄中出現特定訊息時通知您。這些快訊可協助您監控運算子的運作情形,並排解問題。

如要根據遙測運算子產生的記錄設定警告政策,請完成下列步驟:

  1. 確認您已符合「設定記錄檔警告政策」的「事前準備」一節所述的必要條件。

  2. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

  3. 在查詢窗格中輸入所需查詢:

    logName="projects/PROJECT_ID/logs/google-cloud-workload-agent"
    severity=SEVERITY_LEVEL

    將 SEVERITY_LEVEL 替換為支援的嚴重性等級值,包括:DEBUG、INFO、WARNING 和 ERROR。建議您使用 ERROR 或更高的記錄層級值。

  4. 按一下「執行查詢」來驗證查詢。

  5. 建立記錄檔警告。

    如要瞭解如何建立這類警告,請參閱「使用 Logs Explorer 建立記錄檔警告政策」一文所述程序中的步驟三。

選用:啟用正式環境專屬評估

在 Workload Manager 支援的 OpenShift 叢集最佳做法中,部分僅適用於正式環境。Workload Manager 會檢查叢集、Deployment 或 Pod 是否有 environment 標籤,藉此區分工作負載。如果與這個標籤相關聯的值是 production,Workload Manager 就會將該資源視為正式環境資源。

如要告知 Workload Manager 叢集屬於正式環境,請完成下列步驟:

  1. 建立 workloadmanager 命名空間:

    oc create namespace workloadmanager
    
  2. 使用下列設定,在 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 分鐘,讓系統按照排程收集指標。

如要手動觸發運算子來收集指標,請完成下列步驟:

  1. 開啟終端機。

  2. 找出執行中 Pod 的名稱:

    POD_NAME=$(oc get pods -l app.kubernetes.io/name=workloadagent-operator --field-selector=status.phase=Running -o=name)
    
  3. 觸發運算子,收集並傳送指標:

    oc debug -t $POD_NAME -- /openshift-docker-entrypoint.sh
    

後續步驟