使用 Amazon CloudWatch Observability EKS 附加组件安装 CloudWatch 代理
Amazon CloudWatch Observability EKS 附加组件会在 Amazon EKS 集群上安装 CloudWatch 代理和 Fluent-bit 代理,默认情况下会启用针对 Amazon EKS 增强了可观测性的 Container Insights 和 CloudWatch Application Signals。使用该附加组件时,您可以从 Amazon EKS 集群收集基础设施指标、应用程序性能遥测和容器日志。
借助针对 Amazon EKS 增强了可观测性的 Container Insights,Container Insights 指标按每次观测收费,而不是按存储的指标或摄取的日志收费。对于 Application Signals,计费基于应用程序的入站请求、来自应用程序的出站请求以及每个配置的服务级别目标(SLO)。收到的每个入站请求都会生成一个应用程序信号,而发出的每个出站请求都会生成一个应用程序信号。每个 SLO 在每个测量周期内创建两个应用程序信号。有关 CloudWatch 定价的信息,请参阅 Amazon CloudWatch 定价
运行 Kubernetes 版本 1.23 或更高版本的 Amazon EKS 集群支持 Amazon CloudWatch Observability EKS 附加组件。
安装该附加组件时,还必须授予 IAM 权限,让 CloudWatch 代理能够向 CloudWatch 发送指标、日志和跟踪。有两种方式可执行此操作:
将策略附加到 Worker 节点的 IAM 角色。此选项会向 Worker 节点授予向 CloudWatch 发送遥测数据的权限。
对代理容器组(pod)的服务账户使用 IAM 角色,并将策略附加到此角色。这仅适用于 Amazon EKS 集群。此选项仅允许 CloudWatch 访问相应的代理容器组(pod)。
选项 1:使用 IAM 权限在 Worker 节点上进行安装
要使用此方法,请先输入以下命令,将 CloudWatchAgentServerPolicy IAM policy 附加到您的 Worker 节点上。在此命令中,将 my-worker-node-role
替换为您的 Kubernetes Worker 节点使用的 IAM 角色。
aws iam attach-role-policy \ --role-name
my-worker-node-role
\ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
然后安装 Amazon CloudWatch Observability EKS 附加组件。要安装该附加组件,您可以使用 Amazon CLI、控制台、Amazon CloudFormation 或 Terraform。
选项 2:使用 IAM 服务账户角色进行安装
在使用此方法之前,请验证以下先决条件:
-
在某个支持 Container Insights 的 Amazon Web Services 区域 中,您具有运行正常并附加了节点的 Amazon EKS 集群。有关支持的区域列表,请参阅Container Insights。
-
您已经为集群安装并配置
kubectl
。有关更多信息,请参阅 Amazon EKS 用户指南 中的安装kubectl
。 -
您已安装
eksctl
。有关更多信息,请参阅《Amazon EKS 用户指南》中的安装或更新eksctl
。
使用 IAM 服务账户角色安装 Amazon CloudWatch Observability EKS 附加组件
如果集群还没有 OpenID Connect(OIDC)提供程序,请输入以下命令来创建一个。有关更多信息,请参阅《Amazon EKS 用户指南》中的配置 Kubernetes 服务账户以代入 IAM 角色。
eksctl utils associate-iam-oidc-provider --cluster
my-cluster-name
--approve输入以下命令以创建附加了 CloudWatchAgentServerPolicy 策略的 IAM 角色,然后使用 OIDC 将代理服务账户配置为代入该角色。将
my-cluster-name
替换为您的集群名称,并将my-service-account-role
替换为要将服务账户关联到的角色名称。如果角色尚不存在,eksctl
会为您创建它。eksctl create iamserviceaccount \ --name cloudwatch-agent \ --namespace amazon-cloudwatch --cluster
my-cluster-name
\ --role-namemy-service-account-role
\ --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-only \ --approve通过输入以下命令安装附加组件。将
my-cluster-name
替换为您的集群名称,将111122223333
替换为账户 ID,并将my-service-account-role
替换为在上一步中创建的 IAM 角色。aws eks create-addon --addon-name amazon-cloudwatch-observability --cluster-name
my-cluster-name
--service-account-role-arn arn:aws:iam::111122223333
:role/my-service-account-role
(可选)其他配置
选择不收集容器日志
默认情况下,该附加组件使用 Fluent Bit 从所有容器组(pod)收集容器日志,然后将日志发送到 CloudWatch Logs。有关收集哪些日志的信息,请参阅 设置 Fluent Bit。
要选择不收集容器日志,请在创建或更新附加组件时传递以下选项:
--configuration-values '{ "containerLogs": { "enabled": false } }'
选择不收集 NVIDIA GPU 指标
从 CloudWatch 代理版本 1.300034.0 开始,Container Insights 默认从 EKS 工作负载收集 NVIDIA GPU 指标。这些指标列于 NVIDIA GPU 指标 的表格中。
您可以将 CloudWatch 代理配置文件中的 accelerated_compute_metrics
选项设置为 false
,从而选择不收集 NVIDIA GPU 指标。此选项位于 CloudWatch 配置文件中 metrics_collected
部分的 kubernetes
部分。以下是选择不收集的配置示例。
{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "emf": { }, "kubernetes": { "enhanced_container_insights": true, "accelerated_compute_metrics": false } }, "force_flush_interval": 5, } }
使用自定义 CloudWatch 代理配置
要使用 CloudWatch 代理收集其他指标、日志或跟踪,您可以指定自定义配置,同时保持 Container Insights 和 CloudWatch Application Signals 处于启用状态。为此,请将 CloudWatch 代理配置文件嵌入到高级配置代理密钥(您可以在创建或更新 EKS 附加组件时使用该密钥)下的配置密钥中。以下是您未提供任何其他配置时的默认代理配置。
重要
您使用其他配置设置提供的任何自定义配置都会覆盖代理使用的默认配置。请注意不要无意中禁用默认启用的功能,例如可观测性经增强的 Container Insights 和 CloudWatch Application Signals。在需要提供自定义代理配置的情况下,我们建议使用以下默认配置作为基准,然后对其进行相应的修改。
--configuration-values '{ "agent": { "config": { "logs": { "metrics_collected": { "app_signals": {}, "kubernetes": { "enhanced_container_insights": true } } }, "traces": { "traces_collected": { "app_signals": {} } } } }'
管理准入 webhook TLS 证书
Amazon CloudWatch Observability EKS 附加组件利用 Kubernetes 准入 webhookAmazonCloudWatchAgent
和 Instrumentation
自定义资源(CR)请求,如果启用了 CloudWatch Application Signals,则可以选择在集群上使用 Kubernetes 容器组(pod)请求。在 Kubernetes 中,webhook 需要一个 TLS 证书,API 服务器配置为信任该证书,以确保安全通信。
默认情况下,Amazon CloudWatch Observability EKS 附加组件会自动生成自签名 CA 和由此 CA 签名的 TLS 证书,以确保 API 服务器和 webhook 服务器之间的安全通信。此自动生成的证书的默认有效期为 10 年,到期后不会自动续订。此外,每次升级或重新安装附加组件时,都会重新生成 CA 捆绑包和证书,从而重置有效期。如果要更改自动生成的证书的默认有效期,则可以在创建或更新附加组件时使用以下其他配置。将 expiry-in-days
替换为所需的有效期持续时间(以天为单位)。
--configuration-values '{ "admissionWebhooks": { "autoGenerateCert": { "expiryDays":
expiry-in-days
} } }'
为了获得更安全、功能更丰富的证书颁发机构解决方案,该附加组件支持选择加入 cert-manager
我们建议您查看集群上管理 TLS 证书的最佳实践,并建议您选择使用针对生产环境的 cert-manager。请注意,如果您通过选择加入来启用 cert-manager,以便管理准入 webhook TLS 证书,则您需要在安装 Amazon CloudWatch Observability EKS 附加组件之前,在 Amazon EKS 集群上预安装 cert-manager。要了解有关可用安装选项的更多信息,请参阅 cert-manager 文档
--configuration-values '{ "admissionWebhooks": { "certManager": { "enabled": true } } }'
默认情况下,本节中讨论的高级配置将使用 SelfSigned
收集 Amazon EBS 卷 ID
如果您希望在性能日志中收集 Amazon EBS 卷 ID,则必须向附加到 Worker 节点或服务账户的 IAM 角色添加另一个策略。添加以下内容作为内联策略。有关更多信息,请参阅添加和删除 IAM 身份权限。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeVolumes" ], "Resource": "*", "Effect": "Allow" } ] }
Amazon CloudWatch Observability EKS 附加组件问题排查
可以使用以下信息帮助对 Amazon CloudWatch Observability EKS 附加组件的问题进行排查。
更新和删除 Amazon CloudWatch Observability EKS 附加组件
有关更新或删除 Amazon CloudWatch Observability EKS 附加组件的说明,请参阅管理 Amazon EKS 附加组件。使用 amazon-cloudwatch-observability
作为附加组件的名称。
验证 Amazon CloudWatch Observability EKS 附加组件使用的 CloudWatch 代理的版本
Amazon CloudWatch Observability EKS 附加组件安装 AmazonCloudWatchAgent
类型的自定义资源,用于控制集群上 CloudWatch 代理守护程序集的行为,包括正在使用的 CloudWatch 代理的版本。您可以通过输入以下命令获取集群 u 上安装的所有 AmazonCloudWatchAgent
自定义资源的列表:
kubectl get amazoncloudwatchagent -A
在此命令的输出中,您应该能够检查 CloudWatch 代理的版本。或者,您也可以描述集群上运行的 amazoncloudwatchagent
资源或其中一个 cloudwatch-agent-*
容器组(pod)来检查正在使用的映像。
管理附加组件时处理 ConfigurationConflict
在安装或更新 Amazon CloudWatch Observability EKS 附加组件时,如果您发现故障是由 ConfigurationConflict
类型的 Health Issue
(其描述以 Conflicts found when trying to apply. Will not continue due to resolve conflicts mode
开头)引起的,这可能是因为您已经在集群上安装了 CloudWatch 代理及其相关组件,例如 ServiceAccount、ClusterRole 和 ClusterRoleBinding。当附加组件尝试安装 CloudWatch 代理及其关联组件时,如果检测到内容有任何变化,在默认情况下这会使安装或更新失败,以避免覆盖集群上资源的状态。
如果您正在尝试载入 Amazon CloudWatch Observability EKS 附加组件,但出现此故障,我们建议您删除之前在集群上安装的现有 CloudWatch 代理设置,然后安装 EKS 附加组件。请务必备份您可能对原始 CloudWatch 代理设置所做的任何自定义,例如自定义代理配置,并在下次安装或更新时将其提供给 Amazon CloudWatch Observability EKS 附加组件。如果您之前安装了 CloudWatch 代理以载入 Container Insights,请参阅 删除 Container Insights 的 CloudWatch 代理和 Fluentd 获取更多信息。
或者,该附加组件支持具有指定 OVERWRITE
功能的冲突解决配置选项。您可以使用此选项,通过覆盖集群上的冲突来继续安装或更新附加组件。如果您使用的是 Amazon EKS 控制台,则在创建或更新附加组件时选择可选配置设置时,会找到冲突解决方法。如果您使用的是 Amazon CLI,则可以在命令中提供 --resolve-conflicts OVERWRITE
,以创建或更新附加组件。