使用适用于 Kubernetes 的控制器管理适用于 Promethe AWS us 的亚马逊托管服务 - Amazon Managed Service for Prometheus

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用适用于 Kubernetes 的控制器管理适用于 Promethe AWS us 的亚马逊托管服务

Amazon Managed Service for Prometheus 与 AWS Controllers for Kubernetes(ACK)集成,支持在 Amazon EKS 中管理您的工作区、警报管理器和规则器资源。你可以使用 Kubernetes 的 AWS 控制器自定义资源定义 (CRD) 和原生 Kubernetes 对象,而不必在集群之外定义任何资源。

本节介绍如何在现有亚马逊 EKS 集群中为 Kubernetes 设置 AWS 控制器和针对 Prometheus 的亚马逊托管服务。

您还可以阅读介绍适用于 Kubernetes 的 AWS 控制器和介绍适用于 Promethe us 的亚马逊托管服务的 ACK 控制器的博客文章。

先决条件

在开始将适用于 Kubernet AWS es 的控制器和适用于 Prometheus 的亚马逊托管服务与您的 Amazon EKS 集群集成之前,您必须具备以下先决条件。

正确配置您的 Amazon EKS 集群后,您应该能够通过调用 kubectl get --raw /metrics 查看针对 Prometheus 格式化的指标。现在,您可以为 Kubernetes 服务 AWS 控制器安装控制器,并使用它为 Prometheus 资源部署亚马逊托管服务。

使用适用于 Kubernetes 的 AWS 控制器部署工作空间

要部署适用于 Prometheus 的新亚马逊托管服务工作空间,您需要 AWS 为 Kubernetes 控制器安装控制器,然后使用它来创建工作空间。

部署适用于 Prometheus 的全新 Amazon 托管服务工作空间,其中包含适用于 Kubernetes 的控制器 AWS
  1. 使用以下命令通过 Helm 安装 Amazon Managed Service for Prometheus 服务控制器。有关更多信息,请参阅在 Kubernetes 控制器 AWS 文档中安装 ACK 控制器。 GitHub为您的系统使用相应的区域,例如 us-east-1

    export SERVICE=prometheusservice export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4` export ACK_SYSTEM_NAMESPACE=ack-system export AWS_REGION=region aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \ oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION

    稍等片刻,您应能够看到类似于以下内容的响应,表示成功。

    You are now able to create Amazon Managed Service for Prometheus (AMP) resources! The controller is running in "cluster" mode. The controller is configured to manage AWS resources in region: "us-east-1"

    您可以选择使用以下 AWS 命令验证 Kubernetes 控制器的控制器是否已成功安装。

    helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml

    这将返回有关控制器 ack-prometheusservice-controller 的信息,包括 status: deployed

  2. 使用以下文本创建名为 workspace.yaml 的文件。这将用作您正在创建的工作区的配置。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
  3. 运行以下命令来创建您的工作区(此命令取决于您在步骤 1 中设置的系统变量)。

    kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE

    稍等片刻,您应该就能看到在您的账户中有一个名为 my-amp-workspace 的新工作区。

    运行以下命令查看您工作区的详细信息和状态,包括工作区 ID。或者,您可以在 Amazon Managed Service for Prometheus 控制台中查看新的工作区。

    kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
    注意

    您也可以使用现有工作区,而不是创建新的工作区。

  4. 创建两个新的 yaml 文件作为规则组的配置,接下来您将使用以下配置创建 AlertManager 这两个文件。

    将此配置另存为 rulegroup.yaml。将 WORKSPACE-ID 替换为上一步中的工作区 ID。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: RuleGroupsNamespace metadata: name: default-rule spec: workspaceID: WORKSPACE-ID name: default-rule configuration: | groups: - name: example rules: - alert: HostHighCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60 for: 5m labels: severity: warning event_type: scale_up annotations: summary: Host high CPU load (instance {{ $labels.instance }}) description: "CPU load is > 60%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - alert: HostLowCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30 for: 5m labels: severity: warning event_type: scale_down annotations: summary: Host low CPU load (instance {{ $labels.instance }}) description: "CPU load is < 30%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"

    将以下配置另存为 alertmanager.yaml。将 WORKSPACE-ID 替换为上一步中的工作区 ID。TOPIC-AR N 替换为要向其发送通知的 Amazon SNS 主题的 ARN,将区域替换为您正在使用的主题。 AWS 区域 记住,Amazon Managed Service for Prometheus 对 Amazon SNS 主题必须具有权限

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: AlertManagerDefinition metadata: name: alert-manager spec: workspaceID: WORKSPACE-ID configuration: | alertmanager_config: | route: receiver: default_receiver receivers: - name: default_receiver sns_configs: - topic_arn: TOPIC-ARN sigv4: region: REGION message: | alert_type: {{ .CommonLabels.alertname }} event_type: {{ .CommonLabels.event_type }}
    注意

    要了解有关这些配置文件格式的更多信息,请参阅RuleGroupsNamespaceDataAlertManagerDefinitionData

  5. 运行以下命令来创建您的规则组和警报管理器配置(此命令取决于您在步骤 1 中设置的系统变量)。

    kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE

    稍等片刻,这些更改将会变得可用。

    注意

    要更新资源,而不是创建资源,只需更新 yaml 文件,然后再次运行 kubectl apply 命令即可。

    要删除资源,请运行以下命令。ResourceType替换为要删除的资源类型WorkspaceAlertManagerDefinition、或RuleGroupNamespaceResourceName替换为要删除的资源的名称。

    kubectl delete ResourceType ResourceName -n $ACK_SYSTEM_NAMESPACE

至此,新工作区的部署就完成了。下一部分将介绍如何配置您的集群以向该工作区发送指标。

配置您的 Amazon EKS 集群以写入 Amazon Managed Service for Prometheus 工作区

本部分介绍如何使用 Helm 配置在您的 Amazon EKS 集群中运行的 Prometheus,以便将指标远程写入您在上一部分中创建的 Amazon Managed Service for Prometheus 工作区。

在此过程中,您将需要自己创建的用于摄取指标的 IAM 角色的名称。如果尚未执行此操作,请参阅设置服务角色从 Amazon EKS 集群中摄取指标以获取更多信息和说明。如果您按照这些说明进行操作,IAM 角色将叫名为 amp-iamproxy-ingest-role

配置 Amazon EKS 集群进行远程写入
  1. 使用以下命令获取工作区的 prometheusEndpoint。将 WORKSPACE-ID 替换为上一部分中的工作区 ID。

    aws amp describe-workspace --workspace-id WORKSPACE-ID

    prometheusEndpoint 将出现在返回结果中,其格式如下所示:

    https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/

    保存此 URL 以供后续步骤使用。

  2. 创建一个包含以下文本的新文件,并将其命名为 prometheus-config.yaml。将 account 替换为您的账户 ID,将 workspaceURL/ 替换为您刚才找到的 URL,将 region 替换为您系统的相应 AWS 区域 。

    serviceAccounts: server: name: "amp-iamproxy-ingest-service-account" annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::account:role/amp-iamproxy-ingest-role" server: remoteWrite: - url: workspaceURL/api/v1/remote_write sigv4: region: region queue_config: max_samples_per_send: 1000 max_shards: 200 capacity: 2500
  3. 使用以下 Helm 命令查找 Prometheus 图表和命名空间名称以及图表版本。

    helm ls --all-namespaces

    根据到目前为止的步骤,Prometheus 图表和命名空间都应该名为 prometheus,图表版本可能为 15.2.0

  4. 使用上一步中PrometheusChartVersion找到的PrometheusChartNamePrometheusNamespace、和,运行以下命令。

    helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion

    几分钟后,您将看到一条消息,提示升级成功。

  5. (可选)通过 awscurl 查询 Amazon Managed Service for Prometheus 终端节点,以此验证指标是否成功发送。将区域替换为您正在使用的区域 AWS 区域 ,将 WorkspaceURL/ 替换为您在步骤 1 中找到的网址。

    awscurl --service="aps" --region="Region" "workspaceURL/api/v1/query?query=node_cpu_seconds_total"

现在,您已经创建了 Amazon Managed Service for Prometheus 工作区,并使用 YAML 文件作为配置从您的 Amazon EKS 集群与其连接。这些文件称为自定义资源定义(CRD),位于您的 Amazon EKS 集群中。您可以使用适用于 Kubernetes 的 AWS 控制器直接从集群管理所有适用于 Prometheus 的亚马逊托管服务资源。