设置 Cluster Services for OpenShift Telemetry 运算符

本文档介绍了如何安装 Cluster Services for OpenShift Telemetry 运算符,以及如何配置该运算符以连接到在 Compute Engine 实例上运行的 OpenShift 集群。

安装并配置后,此遥测操作员会部署一个主机网络遥测守护程序,该守护程序会持续监控集群健康状况和集群配置。该运算符会将收集的指标发送到 Workload Manager。然后,您可以使用 Workload Manager 评估功能扫描集群中运行的工作负载,以查找与 OpenShift 集群最佳实践的偏差。

准备工作

在安装和配置遥测操作员之前,您需要确保满足以下前提条件:

启用对 Cloud API 的访问权限

Compute Engine 建议将实例配置为允许针对所有 Cloud API 的所有访问权限范围,并且仅使用实例服务账号的 IAM 权限来控制对Google Cloud 资源的访问权限。如需了解详情,请参阅创建使用用户管理的服务账号的虚拟机

如果您限制对 Cloud API 的访问权限,则 Cluster Services for OpenShift Telemetry 运算符要求主机计算实例至少具有以下 Cloud API 访问权限范围:

https://www.googleapis.com/auth/cloud-platform

如需了解详情,请参阅范围最佳实践

如果您在没有外部 IP 地址的计算实例上运行 OpenShift 集群,则需要在该实例的子网上启用专用 Google 访问通道,以便 Cluster Services for OpenShift Telemetry 运算符可以访问 Google API 和服务。如需了解如何启用专用 Google 访问通道,请参阅配置专用 Google 访问通道

对 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 项目中为其创建服务账号。

您可以使用以下选项将遥测运算符作为服务账号进行身份验证:

使用工作负载身份联合对操作员进行身份验证

如需使用工作负载身份联合将遥测操作员作为服务账号进行身份验证,请完成以下步骤:

  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 生态系统目录中查看遥测运算符的认证版本号列表。

  2. 使用 ccoctl 实用程序处理提取的 CredentialsRequest 清单,并预配 Google Cloud Identity and Access Management (IAM) 绑定和凭据:

    ccoctl gcp create-all \
      --name=cso-telemetry \
      --region=REGION \
      --project=PROJECT_ID \
      --credentials-requests-dir=./credrequests \
      --output-dir=./ccoctl-out
    

    替换以下内容:

    • REGION:OpenShift 集群运行所在的 Compute Engine 区域
    • PROJECT_ID: Google Cloud 运行 OpenShift 集群的项目的项目 ID
  3. 将生成的 OpenID Connect (OIDC) 提供方、IAM 角色和 Secret 清单应用到集群:

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

上述步骤会在您的 Google Cloud 项目中创建一个服务账号,并为其分配以下 IAM 角色:

使用服务账号密钥对操作员进行身份验证

如果贵组织不支持使用工作负载身份联合进行身份验证,则可以使用服务账号密钥对遥测运算符进行身份验证。

如需使用服务账号密钥将遥测运算符作为服务账号进行身份验证,请完成以下步骤:

  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 角色:

    针对此清单中定义的每个 IAM 角色,运行以下命令:

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

    IAM_ROLE 替换为您要向服务账号授予的 IAM 角色。

  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 运算符

您可以使用 Red Hat OpenShift Container Platform Web 控制台或声明性订阅 YAML 清单来安装 Cluster Services for OpenShift Telemetry 操作器。如需了解这些选项,请参阅 Red Hat 文档向集群添加运算符

OpenShift Web 控制台

如需使用 OpenShift Container Platform Web 控制台在 OpenShift 集群中安装遥测操作器,请完成以下步骤:

  1. 登录 Red Hat OpenShift Web 控制台。
  2. 验证您是否处于管理员透视模式。
  3. 在左侧导航栏中,展开 Operators 部分,然后点击 OperatorHub
  4. 所有商品下方的搜索栏中,输入 Cluster Services for OpenShift Telemetry

    或者,您也可以输入 Google 进行搜索。此命令会过滤 Google 提供的运算符,其中包括 Cluster Services for OpenShift Telemetry 运算符。

  5. 点击名为 Cluster Services for OpenShift Telemetry 的卡片。

  6. Cluster Services for OpenShift Telemetry 窗格中,点击安装

  7. 安装 Operator 页面中,完成以下步骤:

    1. 更新渠道字段中,选择 stable
    2. 安装模式字段中,选择集群上的特定命名空间
    3. 已安装的命名空间字段中,选择 openshift-operators 项目或创建自定义监控命名空间。
    4. 审批策略字段中,选择自动手动
    5. 点击安装
  8. 如需验证是否已成功安装该 operator,请完成以下步骤:

    1. 前往运营商 > 已安装的运营商
    2. 在运算符列表中,搜索并验证是否存在 Cluster Services for OpenShift Telemetry 运算符。
    3. 验证状态列是否显示值成功最新
    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-telemetryPHASE 列中的值是否为 Succeeded

启用指标收集

如需让该运维人员从 OpenShift 集群收集指标,您必须应用 TelemetryConfig 自定义资源。此资源会在集群节点上为 Agent for Compute Workloads 部署守护程序 pod。

如需让该运算符从 OpenShift 集群收集指标,请完成以下步骤:

  1. 创建名为 telemetryconfig.yamlTelemetryConfig 自定义资源清单:

    • 如果您已使用工作负载身份联合为遥测运算符设置身份验证,请使用以下最低限度的自定义资源。此自定义资源会自动提取存储在 google-cloud-cluster-services-telemetry-agent-wif-secret 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 页面。

    转到日志浏览器

  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,请参阅查看虚拟机的详细信息

  3. 点击运行查询

设置基于日志的提醒政策

默认情况下,遥测运算符的日志会发送到 Cloud Logging。建议您根据遥测运算符日志配置提醒政策,以便在日志中出现特定消息时收到通知。这些提醒有助于您监控运营商的运作情况并排查问题。

如需配置基于遥测运算符生成的日志的提醒政策,请完成以下步骤:

  1. 验证您是否已满足配置基于日志的提醒政策的“准备工作”部分中所述的前提条件。

  2. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  3. 在查询窗格中,输入所需的查询:

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

    SEVERITY_LEVEL 替换为受支持的严重程度值,包括:DEBUGINFOWARNINGERROR。建议您使用 ERROR 或更高级别的日志级别值。

  4. 点击运行查询以验证查询。

  5. 创建日志提醒。

    如需了解如何创建此提醒,请参阅使用 Logs Explorer 创建基于日志的提醒政策中所述流程的第 3 步。

可选:启用特定于生产环境的评估

在 Workload Manager 支持的 OpenShift 集群最佳实践中,部分仅适用于生产环境。Workload Manager 通过检查集群、部署或 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 某项部署或 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 集群以及在集群上运行的部署或 pod 上应用 environment 标签,则 Workload Manager 会优先考虑为部署或 pod 设置的标签值,而不是为集群设置的标签值。

可选:触发指标收集

在 OpenShift 集群中成功设置 Cluster Services for OpenShift Telemetry 运算符后,该运算符会每 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
    

后续步骤