CNI 指标帮助程序 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

CNI 指标帮助程序

CNI 指标帮助程序是一种工具,您可以用来抓取网络接口和 IP 地址信息、在集群级别聚合指标以及将指标推送到 Amazon CloudWatch。要详细了解这款指标帮助程序,请参阅 GitHub 上的 cni-metrics-helper

在管理 Amazon EKS 集群时,您可能希望了解已经分配了多少个 IP 地址以及还有多少个地址可用。CNI 指标帮助程序可帮助您:

  • 跟踪这些指标随时间的变化

  • 诊断和排除与 IP 分配和回收相关的问题

  • 提供容量规划见解

预置了节点时,CNI 插件会自动从节点的子网向主网络接口 (eth0) 分配辅助 IP 地址池。此 IP 地址池称为暖池,其大小由节点的实例类型确定。例如,一个 c4.large 实例的每个接口可以支持三个网络接口和九个 IP 地址。可供指定 Pod 使用的 IP 地址数量比最大值(十个)少一个,因为其中一个 IP 地址预留给弹性网络接口自身。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的每个实例类型的每个网络接口的 IP 地址

在 IP 地址池耗尽时,该插件会自动附加另一个弹性网络接口到实例,并将另外一组辅助 IP 地址分配到接口。此过程将继续,直到节点不再支持额外的弹性网络接口。

系统为您的集群收集以下指标并导出到 CloudWatch:

  • 集群可以支持的网络接口的最大数量

  • 已分配到 Pod 的网络接口数

  • 当前分配给 Pod 的 IP 地址

  • IP 地址总数以及最大可用 IP 地址数

  • ipamD 错误数

先决条件

  • 集群的现有 Amazon Identity and Access Management (IAM) OpenID Connect (OIDC) 提供程序。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商

  • 您的计算机或 Amazon CloudShell 上安装并配置了 2.4.9 版或更高版本,或 1.22.30 版或更高版本的 Amazon CLI。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的安装、更新和卸载 Amazon CLI使用 aws configure 进行快速配置

  • 计算机或 Amazon CloudShell 上已安装 kubectl 命令行工具。其版本必须与您的集群版本相同,或者最多高出两个版本。要安装或升级 kubectl,请参阅 安装 kubectl

部署 CNI 指标帮助程序

创建 IAM 策略和角色并部署指标帮助程序。

部署 CNI 指标帮助程序

  1. 创建一项 IAM 策略,该策略需向 CNI 指标帮助程序授予 cloudwatch:PutMetricData 权限,以便向 CloudWatch 发送指标数据。

    1. 将以下内容复制到名为 cni-metrics-helper-policy.json 的文件中。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" } ] }
    2. 创建一项名为 AmazonEKSVPCCNIMetricsHelperPolicy 的 IAM 策略。

      aws iam create-policy --policy-name AmazonEKSVPCCNIMetricsHelperPolicy \ --description "Grants permission to write metrics to CloudWatch" \ --policy-document file://cni-metrics-helper-policy.json
  2. 创建 IAM 角色并向其附加此 IAM 策略。创建一个 Kubernetes 服务账户。用 IAM 角色 ARN 对 Kubernetes 服务账户进行注释,用 Kubernetes 服务账户名称对 IAM 角色进行注释。您可以使用 eksctl 或 Amazon CLI 创建角色。

    eksctl

    运行以下命令以创建 IAM 角色。如果您没有集群 IAM OIDC 提供商,则该命令还会创建 IAM OIDC 提供商。请将 my-cluster 替换为集群名称,将 111122223333 替换为账户 ID,并将 region-code 替换为集群所在的 Amazon Web Services 区域。

    eksctl create iamserviceaccount \ --name cni-metrics-helper \ --namespace kube-system \ --cluster my-cluster \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --approve \ --override-existing-serviceaccounts \ --region region-code
    Amazon CLI
    1. 确定集群的 OIDC 提供商 URL。将 my-cluster 替换为您的集群名称。如果命令的输出为 None,请查看先决条件

      aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

      输出

      https://oidc.eks.region-code.amazonaws.com.cn/id/oidc-id
    2. 创建 IAM 角色,向 Kubernetes 服务账户授予 AssumeRoleWithWebIdentity 操作权限。

      1. 将以下内容复制到名为 trust-policy.json 的文件中。将 111122223333 替换为您的账户 ID。将 oidc-idregion-code 替换为在上一步中返回的值。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com.cn/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com.cn/id/oidc-id:sub": "system:serviceaccount:kube-system:cni-metrics-helper" } } } ] }
      2. 创建角色。

        aws iam create-role \ --role-name AmazonEKSVPCCNIMetricsHelperRole \ --assume-role-policy-document file://"trust-policy.json"
    3. 向角色附加 IAM 策略。将 111122223333 替换为您的账户 ID。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --role-name AmazonEKSVPCCNIMetricsHelperRole
  3. 使用以下命令将最新版本的 CNI 指标帮助程序添加到您的集群。

    重要

    您每次只更新一个次要版本。例如,如果您的当前版本为 1.8,并且您想要更新到 1.10,则应首先更新到 1.9,再更新到 1.10,方法是在以下命令更改版本号。

    最新版本适用于 Amazon EKS 支持的所有 Kubernetes 版本。

    中国(北京)(cn-north-1) 或中国(宁夏)(cn-northwest-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/cni-metrics-helper-cn.yaml
    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/cni-metrics-helper-us-gov-east-1.yaml
    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.10/config/master/cni-metrics-helper-us-gov-west-1.yaml
  4. 用之前创建的 IAM 角色的 ARN 注释上一步创建的 cni-metrics-helper Kubernetes 服务账户。使用与上一步骤中用于创建角色的工具相匹配的命令。将 111122223333 替换为您的账户 ID,将 my-cluster 替换为您的集群名称,并将 1J7XB63IN3L6T 替换为您的角色 ID。

    • 如果您之前是使用 eksctl 创建的角色,请使用此命令。

      kubectl annotate serviceaccount cni-metrics-helper \ -n kube-system \ eks.amazonaws.com.cn/role-arn=arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-iamserviceaccount-kube-sy-Role1-1J7XB63IN3L6T
    • 如果使用 Amazon CLI 创建角色,请使用此命令。

      kubectl annotate serviceaccount cni-metrics-helper \ -n kube-system \ eks.amazonaws.com.cn/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIMetricsHelperRole
  5. 重新启动 cni-metrics-helper 部署。

    kubectl rollout restart \ deployment cni-metrics-helper \ -n kube-system

创建指标控制面板

部署 CNI 指标帮助程序之后,您可在 CloudWatch 控制台中查看 CNI 指标。本主题可帮助您创建控制面板来查看集群的 CNI 指标。

创建 CNI 指标面板

  1. 访问 https://console.aws.amazon.com/cloudwatch/,打开 CloudWatch 控制台。

  2. 在左侧导航窗格中,选择 Metrics(指标),然后选择 All metrics(全部指标)。

  3. Custom Namespaces(自定义命名空间)中选择 Kubernetes

  4. 选择 CLUSTER_ID

  5. Metrics(指标)选项卡上,选择要添加到控制面板的指标。

  6. 在控制台右上方,选择 Actions(操作),然后选择 Add to dashboard(添加到控制面板)。

  7. Select a dashboard(选择控制面板)部分选择 Create new(新建),为控制面板输入一个名称(例如 EKS-CNI-metrics),然后选择 Create(创建)。

  8. Widget type(小组件类型)部分选择 Number(数字)。

  9. Customize widget title(自定义小组件标题)部分中,输入控制面板标题的逻辑名称,例如 EKS CNI metrics

  10. 选择 Add to dashboard(添加到控制面板)完成操作。现在,您的 CNI 指标已添加到可以监控的控制面板,如下所示。

    
                        EKS CNI 指标