1.2. 启用可观察性服务
监控使用 observability 服务(multicluster-observability-operator
)的受管集群的监控状态。
需要的访问权限: 集群管理员、open-cluster-management:cluster-manager-admin
角色或 S3 管理员。
1.2.1. 先决条件
- 您必须安装 Red Hat Advanced Cluster Management for Kubernetes。如需更多信息,请参阅在线安装。
-
如果没有指定默认存储类,则必须在
MultiClusterObservability
自定义资源中定义存储类。 - 需要直接网络访问 hub 集群。不支持对负载均衡器和代理的网络访问。如需更多信息,请参阅网络。
您必须配置对象存储来创建存储解决方案。Red Hat Advanced Cluster Management 支持带有稳定对象存储的以下云供应商:
- Amazon Web Services S3 (AWS S3)
- Red Hat Ceph (S3 compatible API)
- Google Cloud Storage
- Azure 存储
- Red Hat OpenShift Data Foundation,以前称为 Red Hat OpenShift Container Storage
Red Hat OpenShift on IBM (ROKS)
重要:当您配置对象存储时,请确保满足敏感数据持久时所需的加密要求。Observability 服务使用 Thanos 支持的、稳定的对象存储。
1.2.2. 从命令行启用可观察性
通过创建一个 MultiClusterObservability
自定义资源实例来启用可观察性服务。在启用可观察性前,请参阅 Observability pod 容量请求以了解更多信息。
备注:
-
当在由 Red Hat Advanced Cluster Management 管理的 OpenShift Container Platform 受管集群上启用或禁用了可观察性时,observability 端点 Operator 会添加额外的
alertmanager
配置来自动重启本地 Prometheus 来更新cluster-monitoring-config
配置映射。 -
Observability 端点 Operator 通过添加额外的
alertmanager
配置来更新cluster-monitoring-config
配置映射,以自动重启本地 Prometheus。因此,当您在 OpenShift Container Platform 受管集群中插入alertmanager
配置时,配置会删除与 Prometheus 指标保留相关的设置。
完成以下步骤以启用可观察服务:
- 登录到您的 Red Hat Advanced Cluster Management hub 集群。
使用以下命令,为可观察服务创建一个命名空间:
oc create namespace open-cluster-management-observability
生成 pull-secret。如果在
open-cluster-management
命名空间中安装了 Red Hat Advanced Cluster Management,请运行以下命令:DOCKER_CONFIG_JSON=`oc extract secret/multiclusterhub-operator-pull-secret -n open-cluster-management --to=-`
如果命名空间中没有定义
multiclusterhub-operator-pull-secret
,将openshift-config
命名空间中的pull-secret
复制到open-cluster-management-observability
命名空间中。运行以下命令:DOCKER_CONFIG_JSON=`oc extract secret/pull-secret -n openshift-config --to=-`
然后,在
open-cluster-management-observability
命名空间中创建 pull-secret,运行以下命令:oc create secret generic multiclusterhub-operator-pull-secret \ -n open-cluster-management-observability \ --from-literal=.dockerconfigjson="$DOCKER_CONFIG_JSON" \ --type=kubernetes.io/dockerconfigjson
重要:如果使用 OpenShift Container Platform 文档修改集群的全局 pull secret,请务必更新可观察命名空间中的全局 pull secret。如需了解更多详细信息,请参阅更新全局 pull secret。
为您的云供应商的对象存储创建 secret。您的 secret 必须包含存储解决方案的凭证。例如,运行以下命令:
oc create -f thanos-object-storage.yaml -n open-cluster-management-observability
查看以下受支持对象存储的 secret 示例:
对于 Amazon S3 或 S3 兼容,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_S3_BUCKET endpoint: YOUR_S3_ENDPOINT 1 insecure: true access_key: YOUR_ACCESS_KEY secret_key: YOUR_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入类似以下 URL 的 Amazon S3 端点的 URL:
example.redhat.com:443
。
如需了解更多详细信息,请参阅 Amazon Simple Storage Service 用户指南。
对于 Google,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: GCS config: bucket: YOUR_GCS_BUCKET service_account: YOUR_SERVICE_ACCOUNT
如需了解更多详细信息,请参阅 Google Cloud Storage。
对于 Azure,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: AZURE config: storage_account: YOUR_STORAGE_ACCT storage_account_key: YOUR_STORAGE_KEY container: YOUR_CONTAINER endpoint: blob.core.windows.net 1 max_retries: 0
- 1
- 如果使用
msi_resource
路径,则端点身份验证通过使用 system-assigned 受管身份完成。您的值必须类似以下端点:https://<storage-account-name>.blob.core.windows.net
。
如果您使用
user_assigned_id
路径,则端点身份验证通过使用用户分配的受管身份完成。当您使用user_assigned_id
时,msi_resource
端点的默认值为https:<storage_account>.<endpoint>
。如需了解更多详细信息,请参阅 Azure Storage 文档。注 :如果您将 Azure 用作 Red Hat OpenShift Container Platform 集群的对象存储,则不支持与集群关联的存储帐户。您必须创建新存储帐户。
对于 Red Hat OpenShift Data Foundation,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_RH_DATA_FOUNDATION_BUCKET endpoint: YOUR_RH_DATA_FOUNDATION_ENDPOINT 1 insecure: false access_key: YOUR_RH_DATA_FOUNDATION_ACCESS_KEY secret_key: YOUR_RH_DATA_FOUNDATION_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入您的 Red Hat OpenShift Data Foundation 端点的 URL,它可能类似以下 URL:
example.redhat.com:443
。
如需了解更多详细信息,请参阅 Red Hat OpenShift Data Foundation。
对于 IBM 上的 Red Hat OpenShift (ROKS),您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_ROKS_S3_BUCKET endpoint: YOUR_ROKS_S3_ENDPOINT 1 insecure: true access_key: YOUR_ROKS_ACCESS_KEY secret_key: YOUR_ROKS_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入您的 Red Hat OpenShift Data Foundation 端点的 URL,它可能类似以下 URL:
example.redhat.com:443
。
如需了解更多详细信息,请参阅 IBM 云文档 Cloud Object Storage。务必使用服务凭据来连接对象存储。如需了解更多详细信息,请参阅 IBM Cloud 文档,云对象存储和服务凭证。
对于 Amazon S3 或 S3 兼容存储,您还可以使用由 AWS 安全令牌服务(AWS STS)生成的简短的、有有限权限的凭证。如需了解更多详细信息,请参阅 AWS 安全令牌服务 文档。
使用 AWS 安全服务生成访问密钥需要以下额外步骤:
- 创建一个 IAM 策略,限制对 S3 存储桶的访问。
- 使用信任策略创建 IAM 角色,为 OpenShift Container Platform 服务帐户生成 JWT 令牌
- 为需要访问 S3 存储桶的可观察服务帐户指定注解。您可以参阅如何在 AWS (ROSA)集群上使用 Red Hat OpenShift Service on AWS (ROSA)集群的可观察性,以便在 Set 环境 步骤中使用 AWS STS 令牌。如需了解更多详细信息,请参阅 Red Hat OpenShift Service on AWS (ROSA),以及 ROSA with STS explained 了解有关使用 STS 令牌的要求和设置的信息。
1.2.2.1. 使用 AWS 安全服务生成访问密钥
完成以下步骤,使用 AWS 安全服务生成访问密钥:
设置 AWS 环境。运行以下命令:
export POLICY_VERSION=$(date +"%m-%d-%y") export TRUST_POLICY_VERSION=$(date +"%m-%d-%y") export CLUSTER_NAME=<my-cluster> export S3_BUCKET=$CLUSTER_NAME-acm-observability export REGION=us-east-2 export NAMESPACE=open-cluster-management-observability export SA=tbd export SCRATCH_DIR=/tmp/scratch export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -o json | jq -r .spec.serviceAccountIssuer| sed -e "s/^https:\/\///") export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) export AWS_PAGER="" rm -rf $SCRATCH_DIR mkdir -p $SCRATCH_DIR
使用以下命令创建 S3 存储桶:
aws s3 mb s3://$S3_BUCKET
创建一个
s3-policy
JSON 文件来访问 S3 存储桶。运行以下命令:{ "Version": "$POLICY_VERSION", "Statement": [ { "Sid": "Statement", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:PutObjectAcl", "s3:CreateBucket", "s3:DeleteBucket" ], "Resource": [ "arn:aws:s3:::$S3_BUCKET/*", "arn:aws:s3:::$S3_BUCKET" ] } ] }
使用以下命令应用策略:
S3_POLICY=$(aws iam create-policy --policy-name $CLUSTER_NAME-acm-obs \ --policy-document file://$SCRATCH_DIR/s3-policy.json \ --query 'Policy.Arn' --output text) echo $S3_POLICY
创建
TrustPolicy
JSON 文件。运行以下命令:{ "Version": "$TRUST_POLICY_VERSION", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": [ "system:serviceaccount:${NAMESPACE}:observability-thanos-query", "system:serviceaccount:${NAMESPACE}:observability-thanos-store-shard", "system:serviceaccount:${NAMESPACE}:observability-thanos-compact" "system:serviceaccount:${NAMESPACE}:observability-thanos-rule", "system:serviceaccount:${NAMESPACE}:observability-thanos-receive", ] } } } ] }
使用以下命令,为 AWS Prometheus 和 CloudWatch 创建角色:
S3_ROLE=$(aws iam create-role \ --role-name "$CLUSTER_NAME-acm-obs-s3" \ --assume-role-policy-document file://$SCRATCH_DIR/TrustPolicy.json \ --query "Role.Arn" --output text) echo $S3_ROLE
将策略附加到角色。运行以下命令:
aws iam attach-role-policy \ --role-name "$CLUSTER_NAME-acm-obs-s3" \ --policy-arn $S3_POLICY
您的 secret 可能类似以下文件:
config
部分指定signature_version2: false
,且不指定access_key
和secret_key
:apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: $S3_BUCKET endpoint: s3.$REGION.amazonaws.com signature_version2: false
-
在
MultiClusterObservability
自定义资源时指定服务帐户注解,如创建 MultiClusterObservability CR 部分所述。 您可以使用以下命令为云供应商检索 S3 access key 和 secret 密钥:您必须在 secret 中对
base64
字符串进行解码、编辑和编码:YOUR_CLOUD_PROVIDER_ACCESS_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep access_key | awk '{print $2}') echo $ACCESS_KEY YOUR_CLOUD_PROVIDER_SECRET_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep secret_key | awk '{print $2}') echo $SECRET_KEY
通过检查以下部署和有状态集的 pod 来验证是否启用了可观察性。您可能会收到以下信息:
observability-thanos-query (deployment) observability-thanos-compact (statefulset) observability-thanos-receive-default (statefulset) observability-thanos-rule (statefulset) observability-thanos-store-shard-x (statefulsets)
1.2.3. 创建 MultiClusterObservability 自定义资源
使用 MultiClusterObservability
自定义资源为各种组件指定持久性卷存储大小。您必须在初始创建 MultiClusterObservability
自定义资源时设置存储大小。当您部署后更新存储大小值时,只有在存储类支持动态卷扩展时,更改才会生效。如需更多信息,请参阅 Red Hat OpenShift Container Platform 文档中的 扩展持久性卷。
完成以下步骤,在 hub 集群中创建 MultiClusterObservability
自定义资源:
创建名为
multiclusterobservability_cr.yaml
的MultiClusterObservability
自定义资源 YAML 文件。查看以下默认 YAML 文件以查看可观察性:
apiVersion: observability.open-cluster-management.io/v1beta2 kind: MultiClusterObservability metadata: name: observability spec: observabilityAddonSpec: {} storageConfig: metricObjectStorage: name: thanos-object-storage key: thanos.yaml
您可能需要修改
advanced
部分中的retentionConfig
参数的值。如需更多信息,请参阅 Thanos Downsampling 分辨率和保留时间。根据受管集群的数量,您可能需要为有状态的集合更新存储量。如果您的 S3 存储桶被配置为使用 STS 令牌,请给服务帐户通过 S3 角色使用 STS。查看以下配置:spec: advanced: compact: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE store: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE rule: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE receive: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE query: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE
如需更多信息,请参阅 Observability API。
要在基础架构机器集上部署,您必须通过更新
MultiClusterObservability
YAML 中的nodeSelector
来为设置设置一个标签。您的 YAML 可能类似以下内容:nodeSelector: node-role.kubernetes.io/infra:
如需更多信息,请参阅创建基础架构机器集。
运行以下命令,将可观察 YAML 应用到集群:
oc apply -f multiclusterobservability_cr.yaml
用于 Thanos、Grafana 和 Alertmanager 的所有 pod 在
open-cluster-management-observability
命名空间中创建。所有连接到 Red Hat Advanced Cluster Management hub 集群的受管集群都会被启用,以将指标数据发送回 Red Hat Advanced Cluster Management Observability 服务。通过启动 Grafana 仪表板来验证 observability 服务是否已启用,并且数据是否填充。在控制台 Overview 页面或 Clusters 页面点击位于控制台标头旁的 Grafana 链接。
注:如果要排除特定的受管集群收集可观察性数据,请在集群中添加以下集群标签:
observability: disabled
。
observability 服务被启用。启用 observability 服务后,会启动以下功能:
- 所有来自受管集群的警报管理器都转发到 Red Hat Advanced Cluster Management hub 集群。
所有连接到 Red Hat Advanced Cluster Management hub 集群的受管集群都会被启用,以将警报发送回 Red Hat Advanced Cluster Management observability 服务。您可以配置 Red Hat Advanced Cluster Management Alertmanager 来处理重复数据删除、分组和将警报路由到正确的接收器集成,如电子邮件、PagerDuty 或 OpsGenie。您还可以处理静默和禁止警报。
注 : 只有 Red Hat OpenShift Container Platform 版本 4.8 或更高版本的受管集群支持将警报转发到 Red Hat Advanced Cluster Management hub 集群功能。在安装启用了可观察性服务的 Red Hat Advanced Cluster Management 后,来自 OpenShift Container Platform v4.8 及更新的版本的警报会自动转发到 hub 集群。请参阅转发警报以了解更多信息。
-
使用以下 URL 访问 OpenShift Container Platform 3.11 Grafana 仪表板:
https://$ACM_URL/grafana/dashboards
。选择名为 OCP 3.11 的文件夹来查看 OpenShift Container Platform 3.11 仪表板。
-
使用以下 URL 访问 OpenShift Container Platform 3.11 Grafana 仪表板:
1.2.4. 从 Red Hat OpenShift Container Platform 控制台启用可观察性
另外,您还可以从 Red Hat OpenShift Container Platform 控制台启用可观察性,创建一个名为 open-cluster-management-observability
的项目。务必在 open-cluster-management-observability
项目中创建名为 multiclusterhub-operator-pull-secret
的镜像 pull-secret。
在 open-cluster-management-observability
项目中创建名为 thanos-object-storage
的对象存储 secret, 。输入对象存储 secret 详细信息,然后单击 Create。请参阅 Enabling observability 部分的第 4 步来查看 secret 的示例。
创建 MultiClusterObservability
自定义资源实例。当您收到以下信息时,代表 OpenShift Container Platform 中已成功启用 obseravbility 服务:Observability components are deployed and running
。
1.2.4.1. 验证 Thanos 版本
使用命令行界面 (CLI) 验证 Thanos 版本。在集群中部署 Thanos 后,从命令行界面(CLI)验证 Thanos 版本。
登录到 hub 集群后,在可观察性 pod 中运行以下命令以接收 Thanos 版本:
thanos --version
此时会显示 Thanos 版本。
1.2.4.2. 使用外部指标查询
Observability 提供了一个外部 API,用于通过 OpenShift 路由(rbac-query-proxy
)查询指标。查看以下使用 userbac-query-proxy
路由的任务:
您可以使用以下命令获取路由的详情:
oc get route rbac-query-proxy -n open-cluster-management-observability
-
若要访问
therbac-query-proxy
路由,您必须具有 OpenShift OAuth 访问令牌。该令牌应当与用户或服务帐户关联,该帐户有权获取命名空间。如需更多信息,请参阅管理用户拥有的 OAuth 访问令牌。 获取默认 CA 证书,并将密钥
tls.crt
的内容存储在本地文件中。运行以下命令:oc -n openshift-ingress get secret router-certs-default -o jsonpath="{.data.tls\.crt}" | base64 -d > ca.crt
运行以下命令以查询指标:
curl --cacert ./ca.crt -H "Authorization: Bearer {TOKEN}" https://{PROXY_ROUTE_URL}/api/v1/query?query={QUERY_EXPRESSION}
注:
QUERY_EXPRESSION
是标准的 Prometheus 查询表达式。例如,通过将前面提到的命令中的 URL 替换为以下 URL:https://{PROXY_ROUTE_URL}/api/v1/query?query=cluster_infrastructure_provider
来查询指标cluster_infrastructure_provider
。如需了解更多详细信息,请参阅查询 Prometheus。运行以下命令,使用生成的证书创建
proxy-byo-ca
和proxy-byo-cert secret
:oc -n open-cluster-management-observability create secret tls proxy-byo-ca --cert ./ca.crt --key ./ca.key oc -n open-cluster-management-observability create secret tls proxy-byo-cert --cert ./ingress.crt --key ./ingress.key
1.2.4.3. 单节点 OpenShift 集群的动态指标
动态指标收集根据特定条件支持自动指标收集。默认情况下,SNO 集群不会收集 pod 和容器资源指标。当 SNO 集群达到特定级别的资源消耗后,会动态收集定义的粒度指标。当集群资源消耗在一段时间内持续低于阈值时,细致的指标集合会停止。
这些指标会根据由集合规则指定的受管集群上的条件动态收集。由于这些指标是动态收集的,所以以下 Red Hat Advanced Cluster Management Grafana 仪表板不会显示任何数据。激活集合规则并收集相应指标时,以下面板会在启动集合规则的时间里显示数据:
- Kubernetes/Compute Resources/Namespace (Pods)
- Kubernetes/Compute Resources/Namespace (Workloads)
- Kubernetes/Compute Resources/Nodes (Pods)
- Kubernetes/Compute Resources/Pod
- Kubernetes/Compute Resources/Workload
集合规则包括以下条件:
- 动态收集的一组指标。
- 使用 PromQL 表达式定义的条件。
-
集合的间隔,该集合必须设为
true
。 - 一个匹配表达式,用于选择需要评估收集规则的集群。
默认情况下,集合规则每 30 秒或以特定时间间隔在受管集群上持续评估。集合间隔和时间间隔中的最低值具有高优先权。当收集规则条件在 for
属性指定的持续时间内保留后,收集规则将启动,由规则指定的指标会在受管集群上自动收集。指标集合会在受管集群上不再存在集合规则条件后自动停止,至少有 15 分钟。
集合规则分组为名为 gather_rules
的参数部分,该部分可启用或禁用作为组。Red Hat Advanced Cluster Management 安装包含集合规则组 SNOResourceUsage
,它有两个默认集合规则: HighCPUUsage
和 HighMemoryUsage
。HighCPUUsage
集合规则从节点 CPU 使用率超过 70% 时开始。如果 SNO 集群的总内存利用率超过可用节点内存的 70%,则 HighMemoryUsage
集合规则开始。目前,前面提到的阈值是固定的,且无法更改。当集合规则开始超过 for
属性指定的间隔时,系统会自动开始收集 dynamic_metrics
中指定的指标。
在以下 YAML 文件中查看 collect_rules
部分的动态指标列表:
collect_rules: - group: SNOResourceUsage annotations: description: > By default, a SNO cluster does not collect pod and container resource metrics. Once a SNO cluster reaches a level of resource consumption, these granular metrics are collected dynamically. When the cluster resource consumption is consistently less than the threshold for a period of time, collection of the granular metrics stops. selector: matchExpressions: - key: clusterType operator: In values: ["SNO"] rules: - collect: SNOHighCPUUsage annotations: description: > Collects the dynamic metrics specified if the cluster cpu usage is constantly more than 70% for 2 minutes expr: (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100 > 70 for: 2m dynamic_metrics: names: - container_cpu_cfs_periods_total - container_cpu_cfs_throttled_periods_total - kube_pod_container_resource_limits - kube_pod_container_resource_requests - namespace_workload_pod:kube_pod_owner:relabel - node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate - node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate - collect: SNOHighMemoryUsage annotations: description: > Collects the dynamic metrics specified if the cluster memory usage is constantly more than 70% for 2 minutes expr: (1 - sum(:node_memory_MemAvailable_bytes:sum) / sum(kube_node_status_allocatable{resource=\"memory\"})) * 100 > 70 for: 2m dynamic_metrics: names: - kube_pod_container_resource_limits - kube_pod_container_resource_requests - namespace_workload_pod:kube_pod_owner:relabel matches: - __name__="container_memory_cache",container!="" - __name__="container_memory_rss",container!="" - __name__="container_memory_swap",container!="" - __name__="container_memory_working_set_bytes",container!=""
可以在 custom-allowlist
中禁用 collect_rules.group
,如下例所示。当 collect_rules.group
禁用时,指标集合会恢复到之前的行为。这些指标定期收集,指定间隔:
collect_rules: - group: -SNOResourceUsage
只有在启动规则时,数据才会在 Grafana 中显示。
1.2.5. 禁用可观察性
要禁用可观察性服务,请卸载 observability
资源。在 OpenShift Container Platform 控制台导航中,选择 Operators > Installed Operators > Advanced Cluster Manager for Kubernetes。删除 MultiClusterObservability
自定义资源。
要了解更多有关如何定制可观察性的信息,请参阅定制可观察性。