本文档介绍了如何安装 Cluster Services for OpenShift Telemetry Operator,并将其配置为连接到在 Compute Engine 实例上运行的 OpenShift 集群。
安装并配置此遥测 Operator 后,它会部署一个主机网络遥测守护程序,该守护程序会持续监控集群运行状况和集群配置。该 Operator 会将收集的指标发送到 Workload Manager。然后,您可以使用 Workload Manager 评估扫描集群中运行的工作负载,以检查是否偏离 OpenShift 集群的最佳实践。
准备工作
在安装和配置遥测 Operator 之前,您需要确保满足以下前提条件:
- 您使用的是 4.18 或更高版本的 Red Hat OpenShift Container Platform。
- 您已在一个或多个计算实例上部署 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 文档如何获取适用于 OpenShift 4 的ccoctl工具。 - 您已查看可在其中创建 Workload Manager 评估的受支持区域。
- 您的管理员已向您授予创建和运行 Workload Manager 评估所需的 IAM 角色。
- 您已启用对 Cloud API 的访问权限。
启用对 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 Operator 可以访问 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 项目中为其创建服务账号。
您可以使用以下选项将遥测操作器作为服务账号进行身份验证:
使用工作负载身份联合对操作员进行身份验证
如需使用工作负载身份联合将遥测操作器作为服务账号进行身份验证,请完成以下步骤:
在终端中,将
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 中为遥测 Operator 订阅的版本号。您可以在 Red Hat 生态系统目录中查看遥测运算符的认证版本号列表。使用
ccoctl实用程序处理提取的CredentialsRequest清单,并预配 Google Cloud Identity and Access Management (IAM) 绑定和凭证:(推荐)对于 OpenShift 4.22 或更高版本:
我们强烈建议您使用 OpenShift 4.22 或更高版本,并搭配
--key-storage-method=pool-jwk-file标志,将集群的 JSON Web 密钥集 (JWKS) 直接存储在工作负载身份池提供方中,从而无需创建 Cloud Storage 存储桶: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 版:
安装遥测 Operator 后,您还必须完成强制性安装后步骤,以限制工作负载身份联合提供方。
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 Viewer (
roles/compute.viewer) - 如需将数据写入 Workload Manager 数据仓库,请使用:Workload Manager Insights Writer (
roles/workloadmanager.insightWriter) - 如需将 Operator 日志发送到 Cloud Logging,请使用:Logs Writer (
roles/logging.logWriter)
使用服务账号密钥对操作员进行身份验证
如果贵组织不支持使用工作负载身份联合进行身份验证,则您可以使用服务账号密钥对遥测 Operator 进行身份验证。
如需使用服务账号密钥将遥测操作员身份验证为服务账号,请完成以下步骤:
在终端中,将
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 项目中,为遥测 Operator 创建服务账号:
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 角色。此清单包含操作器所需的以下最低 IAM 角色集:- 如需从计算实例收集指标,请执行以下操作:Compute Viewer (
roles/compute.viewer) - 如需将数据写入 Workload Manager 数据仓库,请使用:Workload Manager Insights Writer (
roles/workloadmanager.insightWriter) - 如需将 Operator 日志发送到 Cloud Logging,请使用:Logs Writer (
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替换为您要向服务账号授予的 IAM 角色。- 如需从计算实例收集指标,请执行以下操作:Compute Viewer (
为服务账号创建并下载私钥:
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 Web 控制台或声明式订阅 YAML 清单来安装 Cluster Services for OpenShift Telemetry Operator。如需了解这些选项,请参阅 Red Hat 文档向集群添加 Operator。
OpenShift Web 控制台
如需使用 OpenShift Container Platform Web 控制台在 OpenShift 集群中安装遥测运算符,请完成以下步骤:
- 登录 Red Hat OpenShift Web 控制台。
- 验证您是否处于管理员视角。
- 在左侧导航栏中,展开 Operators 部分,然后点击 OperatorHub。
在所有项下的搜索栏中,输入 Cluster Services for OpenShift Telemetry。
或者,您也可以输入 Google 进行搜索。这将过滤掉 Google 提供的 Operator,其中包括 Cluster Services for OpenShift Telemetry Operator。
点击名为 Cluster Services for OpenShift Telemetry 的卡片。
在 Cluster Services for OpenShift Telemetry 窗格中,点击安装。
在安装 Operator 页面中,完成以下步骤:
- 在更新渠道字段中,选择稳定。
- 在安装模式字段中,选择集群上的特定命名空间。
- 在已安装的命名空间字段中,选择 openshift-operators 项目或创建自定义监控命名空间。
- 在审批策略字段中,选择自动或手动。
- 点击安装。
如需验证 Operator 是否已成功安装,请完成以下步骤:
- 前往Operators > Installed Operators。
- 在 Operator 列表中,搜索并验证 Cluster Services for OpenShift Telemetry Operator 是否存在。
- 验证状态列是否显示值成功或最新。
- (可选)点击相应运算符可查看其详细信息。
OpenShift CLI
如需使用 OpenShift CLI 和声明式 Subscription YAML 清单在 OpenShift 集群中安装遥测 Operator,请完成以下步骤:
创建一个名为
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的状态,验证遥测 Operator 是否已成功安装:oc get csv -n openshift-operators在输出中,验证
cluster-services-for-openshift-telemetry的PHASE列中的值是否为Succeeded。
限制工作负载身份联合提供方
如果您在 OpenShift 4.18 至 4.21 版上配置了工作负载身份联合,但未使用 --key-storage-method=pool-jwk-file 标志,则您的集群会使用 Cloud Storage 存储桶来托管其 OIDC 配置。安装 Cluster Services for OpenShift Telemetry Operator 后,请完成以下强制性安装后步骤,将工作负载身份池提供方限制为集群的特定服务账号 UID:
检索
openshift-operators命名空间中遥测运算符的 Kubernetes 服务账号的唯一标识符 (uid):KSA_UID=$(oc get serviceaccount google-cloud-cluster-services-telemetry-agent-workloadagent-service-account \ -n openshift-operators \ -o jsonpath='{.metadata.uid}')使用属性条件更新工作负载身份池提供方,该条件会将令牌交换固定到检索到的服务账号 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实用程序创建的工作负载身份池提供方的 ID(与ccoctl gcp create-all命令中的NAME匹配)POOL_ID:由ccoctl实用程序创建的工作负载身份池的 ID(与ccoctl gcp create-all命令中的NAME匹配)PROJECT_ID:运行 OpenShift 集群的 Google Cloud 项目的项目 ID
如果 google-cloud-cluster-services-telemetry-agent-workloadagent-service-account 服务账号或 Operator 在集群上被删除并重新创建,则会生成新的 UID,您必须使用新的 UID 重新运行 update-oidc 命令。
启用指标收集
如需使 Operator 能够从 OpenShift 集群收集指标,您必须应用 TelemetryConfig 自定义资源。此资源会在集群节点上为 Agent for Compute Workloads 部署守护进程 Pod。
如需使 Operator 能够从 OpenShift 集群收集指标,请完成以下步骤:
创建名为
telemetryconfig.yaml的TelemetryConfig自定义资源清单:如果您已使用工作负载身份联合为遥测 Operator 设置身份验证,请使用以下最低自定义资源。此自定义资源会自动提取存储在
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 中查看 Operator 日志
默认情况下,Cluster Services for OpenShift Telemetry Operator 的日志会发送到 Cloud Logging。您可以在 Logging 中查看这些日志。如需在 Logging 中查看 Operator 日志,请完成以下步骤:
在 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,请参阅查看虚拟机的详细信息。
点击运行查询。
设置基于日志的提醒政策
默认情况下,来自遥测运算符的日志会发送到 Cloud Logging。我们建议您根据遥测 Operator 日志配置提醒政策,以便在日志中出现特定消息时收到通知。这些提醒可帮助您监控 Operator 的运行情况并排查问题。
如需根据遥测运算符生成的日志配置提醒政策,请完成以下步骤:
验证您是否满足配置基于日志的提醒政策的“准备工作”部分中所述的前提条件。
在 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 创建基于日志的提醒政策中所述过程的第 3 步。
可选:启用特定于生产环境的评估
在 Workload Manager 支持的 OpenShift 集群最佳实践中,有些仅适用于生产环境。
Workload Manager 通过检查集群、部署或 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 某个部署或 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。
(可选)您可以手动触发 Operator 来收集指标并将其发送到 Workload Manager,而无需等待 30 分钟来按计划收集指标。
如需手动触发运算符以收集指标,请完成以下步骤:
打开终端。
找到正在运行的 Pod 的名称:
POD_NAME=$(oc get pods -l app.kubernetes.io/name=workloadagent-operator --field-selector=status.phase=Running -o=name)触发 Operator 以收集和发送指标:
oc debug -t $POD_NAME -- /openshift-docker-entrypoint.sh