本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用适用于 Kubernetes 的控制器管理适用于 Promethe AWS us 的亚马逊托管服务
Amazon Managed Service for Prometheus 与 AWS Controllers for Kubernetes(ACK)
本节介绍如何在现有亚马逊 EKS 集群中为 Kubernetes 设置 AWS 控制器和针对 Prometheus 的亚马逊托管服务。
您还可以阅读介绍适用于 Kubernetes 的 AWS 控制器和介绍适用于 Promethe
先决条件
在开始将适用于 Kubernet AWS es 的控制器和适用于 Prometheus 的亚马逊托管服务与您的 Amazon EKS 集群集成之前,您必须具备以下先决条件。
-
您必须拥有现有角色 AWS 账户 和权限,才能以编程方式创建适用于 Prometheus 的亚马逊托管服务和 IAM 角色。
-
您必须拥有启用了 OpenID Connect(OIDC)的现有 Amazon EKS 集群。
如果未启用 OIDC,则可以使用以下命令来启用。请记得用账户的相应值替换
YOUR_CLUSTER_NAME
和AWS_REGION
。eksctl utils associate-iam-oidc-provider \ --cluster ${
YOUR_CLUSTER_NAME
} --region ${AWS_REGION
} \ --approve有关将 OIDC 与 Amazon EKS 配合使用的更多信息,请参阅《Amazon EKS 用户指南》中的 OIDC 身份提供者身份验证和创建 IAM OIDC 提供者。
-
您必须在 Amazon EKS 集群上安装了Amazon EBS CSI 驱动程序。
-
您必须已安装 AWS CLI。 AWS CLI 用于从命令行调用 AWS 功能。
-
必须安装 Kubernetes 的软件包管理器 Helm。
-
必须在 Amazon EKS 集群中设置 Prometheus 的控制面板指标。
-
您必须有 Amazon Simple Notification Service (Amazon SNS) 主题,以便从新工作区发送警报。请确保您已授予 Amazon Managed Service for Prometheus向该主题发送消息的权限。
正确配置您的 Amazon EKS 集群后,您应该能够通过调用 kubectl get --raw
/metrics
查看针对 Prometheus 格式化的指标。现在,您可以为 Kubernetes 服务 AWS 控制器安装控制器,并使用它为 Prometheus 资源部署亚马逊托管服务。
使用适用于 Kubernetes 的 AWS 控制器部署工作空间
要部署适用于 Prometheus 的新亚马逊托管服务工作空间,您需要 AWS 为 Kubernetes 控制器安装控制器,然后使用它来创建工作空间。
部署适用于 Prometheus 的全新 Amazon 托管服务工作空间,其中包含适用于 Kubernetes 的控制器 AWS
-
使用以下命令通过 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
。 -
使用以下文本创建名为
workspace.yaml
的文件。这将用作您正在创建的工作区的配置。apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
-
运行以下命令来创建您的工作区(此命令取决于您在步骤 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
注意
您也可以使用现有工作区
,而不是创建新的工作区。 -
创建两个新的 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。将
AWS 区域 记住,Amazon Managed Service for Prometheus 对 Amazon SNS 主题必须具有权限。TOPIC-AR
N 替换为要向其发送通知的 Amazon SNS 主题的 ARN,将区域替换为您正在使用的主题。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 }}注意
要了解有关这些配置文件格式的更多信息,请参阅RuleGroupsNamespaceData和AlertManagerDefinitionData。
-
运行以下命令来创建您的规则组和警报管理器配置(此命令取决于您在步骤 1 中设置的系统变量)。
kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE
稍等片刻,这些更改将会变得可用。
注意
要更新资源,而不是创建资源,只需更新 yaml 文件,然后再次运行
kubectl apply
命令即可。要删除资源,请运行以下命令。
ResourceType
替换为要删除的资源类型Workspace
AlertManagerDefinition
、或RuleGroupNamespace
。ResourceName
替换为要删除的资源的名称。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 集群进行远程写入
-
使用以下命令获取工作区的
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 以供后续步骤使用。
-
创建一个包含以下文本的新文件,并将其命名为
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 -
使用以下 Helm 命令查找 Prometheus 图表和命名空间名称以及图表版本。
helm ls --all-namespaces
根据到目前为止的步骤,Prometheus 图表和命名空间都应该名为
prometheus
,图表版本可能为15.2.0
-
使用上一步中
PrometheusChartVersion
找到的PrometheusChartName
、和,运行以下命令。PrometheusNamespace
helm upgrade
PrometheusChartName
prometheus-community/prometheus -nPrometheusNamespace
-f prometheus-config.yaml --versionPrometheusChartVersion
几分钟后,您将看到一条消息,提示升级成功。
-
(可选)通过
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 的亚马逊托管服务资源。