View a markdown version of this page

使用 CloudFormation 或 Helm 部署 Enhanced Container Insights(Classic) - Amazon CloudWatch

使用 CloudFormation 或 Helm 部署 Enhanced Container Insights(Classic)

可以使用 CloudFormation 模板或 Helm 图表将 Enhanced Container Insights(Classic)部署为基础设施即代码。此方法可安装 v6.2.0 之前版本的 amazon-cloudwatch-observability 附加组件,以启用 Classic 指标管道。如果通过 IaC 管道管理集群,并且想要可重复的、受版本控制的部署,请选择此方法。

建议

对于新的部署,建议使用 Enhanced Container Insights(建议),其将附加组件版本 6.2.0 或更高版本与基于 OTEL 的管道搭配使用。

先决条件

在通过 CloudFormation 或 Helm 部署 Enhanced Container Insights(Classic)之前,请确认已满足以下要求。

  • 运行 Kubernetes 1.25 版本或更高版本的现有 Amazon EKS 集群

  • AWS CLI 版本 2.12.0 或更高版本

  • 已配置 kubectl 以与目标集群通信

  • 用于创建 CloudFormation 堆栈的 IAM 权限(适用于 CloudFormation 方法)

  • Helm v3.8 或更高版本(适用于 Helm 方法)

  • 从集群到 CloudWatch 端点的出站互联网访问

使用 CloudFormation 进行部署

使用 CloudFormation 模板部署具有 Classic 配置的 CloudWatch 可观测性附加组件。此模板使用 AWS::EKS::Addon 资源来安装 v6.2.0 之前版本的附加组件。

CloudFormation 模板

以下模板创建了在 Amazon EKS 集群上启用 Enhanced Container Insights(Classic)所需的资源。

AWSTemplateFormatVersion: '2010-09-09' Description: Deploy Enhanced Container Insights (Classic) on an EKS cluster Parameters: ClusterName: Type: String Description: The name of your EKS cluster Resources: CloudWatchAgentRole: Type: AWS::IAM::Role Properties: RoleName: EKS-CloudWatch-Agent-Role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: pods.eks.amazonaws.com Action: - sts:AssumeRole - sts:TagSession ManagedPolicyArns: - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy PodIdentityAssociation: Type: AWS::EKS::PodIdentityAssociation Properties: ClusterName: !Ref ClusterName Namespace: amazon-cloudwatch ServiceAccount: cloudwatch-agent RoleArn: !GetAtt CloudWatchAgentRole.Arn CloudWatchObservabilityAddon: Type: AWS::EKS::Addon DependsOn: PodIdentityAssociation Properties: ClusterName: !Ref ClusterName AddonName: amazon-cloudwatch-observability AddonVersion: v5.4.0-eksbuild.1 ServiceAccountRoleArn: !GetAtt CloudWatchAgentRole.Arn ResolveConflicts: OVERWRITE

此模板创建以下资源:

  • 附加了 CloudWatchAgentServerPolicy 托管策略的 IAM 角色

  • EKS 容器组身份关联,用于将角色映射到 CloudWatch 代理服务账户

  • 带有 Classic 版本(v6.2.0 之前的版本)的 amazon-cloudwatch-observability EKS 附加组件

部署 CloudFormation 堆栈

使用 AWS CLI 根据模板创建 CloudFormation 堆栈。

部署堆栈
  1. 将前述模板保存到一个名为 classic-container-insights.yaml 的文件中。

  2. 运行如下命令。将 cluster-name 替换为 Amazon EKS 集群的名称。

    aws cloudformation create-stack \ --stack-name classic-container-insights \ --template-body file://classic-container-insights.yaml \ --parameters ParameterKey=ClusterName,ParameterValue=cluster-name \ --capabilities CAPABILITY_NAMED_IAM
  3. 等待堆栈创建完成。

    aws cloudformation wait stack-create-complete \ --stack-name classic-container-insights
  4. 确认堆栈状态是否为 CREATE_COMPLETE

    aws cloudformation describe-stacks \ --stack-name classic-container-insights \ --query "Stacks[0].StackStatus" \ --output text

使用 Helm 进行部署

如果使用 Helm 来管理 Kubernetes 工作负载,请使用 Helm 图表部署 Enhanced Container Insights(Classic)。该图表安装了带有 Classic 指标管道的 CloudWatch 可观测性算子。

注意

使用 Helm 时,必须分别创建 IAM 角色和容器组身份关联。Helm 图表仅安装 Kubernetes 资源。

步骤 1:创建 IAM 角色

安装 Helm 图表之前为 CloudWatch 代理创建 IAM 角色。

创建 IAM 角色和容器组身份关联
  1. 运行以下命令为 EKS 容器组身份创建具有信任策略的角色。

    aws iam create-role \ --role-name EKS-CloudWatch-Agent-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:TagSession"] }] }'
  2. CloudWatchAgentServerPolicy 托管式策略附加到角色。

    aws iam attach-role-policy \ --role-name EKS-CloudWatch-Agent-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
  3. 创建容器组身份关联。将 cluster-name 替换为 Amazon EKS 集群的名称,并将 account-id 替换为 AWS 账户 ID。

    aws eks create-pod-identity-association \ --cluster-name cluster-name \ --namespace amazon-cloudwatch \ --service-account cloudwatch-agent \ --role-arn arn:aws:iam::account-id:role/EKS-CloudWatch-Agent-Role

步骤 2:安装 Helm 图表

安装 Classic 版本(v6.2.0 之前的版本)的 CloudWatch 可观测性 Helm 图表。

安装 Helm 图表
  1. 运行如下命令。将 cluster-name 替换为 Amazon EKS 集群的名称,并将 region 替换为您的 AWS 区域。

    helm install amazon-cloudwatch-observability \ oci://public.ecr.aws/cloudwatch-agent/amazon-cloudwatch-observability-helm-chart \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --version 5.4.0
  2. 确认 Helm 版本是否已成功部署。

    helm list -n amazon-cloudwatch

    状态必须为 deployed

验证部署

CloudFormation 堆栈创建或 Helm 安装完成后,请确认附加组件是否正在运行并将数据发送到 CloudWatch。

验证部署
  1. 确认 CloudWatch 代理容器组(pod)是否正在运行。

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    所有容器组(pod)都必须显示 Running 状态。

  2. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 控制台。

  3. 在导航窗格中,选择 Metrics(指标),然后选择 All metrics(所有指标)。

  4. 确认指标是否显示在集群的 ContainerInsights 命名空间中。

指标通常会在部署完成后的 3 到 5 分钟内显示在 CloudWatch 中。

后续步骤

部署 Enhanced Container Insights(Classic)后,即可浏览以下主题。