Auxiliar de métricas - Amazon EKS

Auxiliar de métricas

El auxiliar de métricas de CNI es una herramienta que puede utilizar para extraer información de la interfaz de red y la dirección IP, agregar métricas en el nivel del clúster y publicar las métricas en Amazon CloudWatch. Para obtener más información acerca del asistente de métricas, consulte cni-metrics-helper en GitHub.

Al administrar un clúster de Amazon EKS, es posible que desee saber cuántas direcciones IP se han asignado y cuántas se encuentran disponibles. El ayudante de métricas de CNI le ayuda a:

  • Realizar un seguimiento de estas métricas a lo largo del tiempo

  • Solución y diagnóstico de problemas relacionados con la asignación y recuperación de IP

  • Proporcionar información detallada sobre la planificación de capacidad

Cuando se aprovisiona un nodo, el complemento CNI asigna de forma automática un grupo de direcciones IP secundarias de la subred del nodo a la interfaz de red principal (eth0). Este grupo de direcciones IP se conoce como grupo activo y su tamaño lo determina el tipo de instancia del nodo. Por ejemplo, una instancia c4.large puede admitir tres interfaces de red y nueve direcciones IP por interfaz. El número de direcciones IP disponibles para un pod determinado es una menor que el máximo (de diez), ya que una de las direcciones IP está reservada para la propia interfaz de red elástica. A fin de obtener más información, consulte Direcciones IP por interfaz de red por tipo de instancia en la Guía del usuario de Amazon EC2 para instancias de Linux.

A medida que se agota el grupo de direcciones IP, el complemento asocia automáticamente otra interfaz de red elástica a la instancia y asigna otro conjunto de direcciones IP secundarias a esa interfaz. Este proceso continúa hasta que el nodo ya no puede admitir interfaces de red elásticas adicionales.

Las siguientes métricas se recopilan para el clúster y se exportan a CloudWatch:

  • El número máximo de interfaces de red que puede admitir el clúster

  • El número de interfaces de red que se han asignado a los pods

  • El número de direcciones IP asignadas actualmente a los pods

  • Número total y máximo de direcciones IP disponibles

  • El número de errores de ipamD

Requisitos previos

  • Un proveedor de OpenID Connect (OIDC) existente de AWS Identity and Access Management (IAM) para el clúster. Para determinar si ya tiene un proveedor o para crear uno, consulte Crear un proveedor de OIDC de IAM para su clúster.

  • La versión 2.6.3 o posterior, o bien, la versión 1.23.11 o posterior de la AWS CLI instalada y configurada en su computadora o AWS CloudShell. Para obtener más información, consulte Instalar, actualizar y desinstalar la AWS CLI y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface.

  • La herramienta de la línea de comandos de kubectl está instalada en la computadora o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión Kubernetes de su clúster. Por ejemplo, si la versión del clúster es 1.21, puede utilizar la versión kubectl 1.20,1.21 o 1.22 con él. Para instalar o actualizar kubectl, consulte Instalar kubectl.

  • Si su clúster es 1.21 o posterior, asegúrese de que sus complementos Amazon VPC CNI plugin for Kubernetes, kube-proxy y CoreDNS se encuentren en las versiones mínimas enumeradas en los Tokens de cuenta de servicio.

Implementar el asistente de métricas de CNI

Cree una política y un rol de IAM e implemente el asistente de métricas.

Para implementar el auxiliar de métricas de CNI

  1. Cree una política de IAM que otorgue los permisos de cloudwatch:PutMetricData al asistente de métricas de CNI para enviar datos de métricas a CloudWatch.

    1. Copie el siguiente contenido en un archivo denominado cni-metrics-helper-policy.json.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" } ] }
    2. Cree una política de IAM denominada AmazonEKSVPCCNIMetricsHelperPolicy.

      aws iam create-policy --policy-name AmazonEKSVPCCNIMetricsHelperPolicy \ --description "Grants permission to write metrics to CloudWatch" \ --policy-document file://cni-metrics-helper-policy.json
  2. Cree un rol de IAM y asocie la política de IAM al rol. Cree una cuenta de servicio de Kubernetes. Agregue un comentario en la cuenta de servicio de Kubernetes con el ARN del rol de IAM y el rol de IAM con el nombre de cuenta de servicio de Kubernetes. Puede crear el rol mediante eksctl o AWS CLI.

    eksctl

    Ejecute el siguiente comando para crear el rol de IAM. Reemplace my-cluster por el nombre del clúster, 111122223333 por el ID de cuenta y region-code por la Región de AWS en la que se encuentra el clúster.

    eksctl create iamserviceaccount \ --name cni-metrics-helper \ --namespace kube-system \ --cluster my-cluster \ --role-name "AmazonEKSVPCCNIMetricsHelperRole" \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --approve
    AWS CLI
    1. Determine la URL del proveedor OIDC del clúster. Reemplace my-cluster por el nombre de su clúster. Si la salida del comando es None, revise los Requisitos previos.

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

      Ejemplo de resultados:

      oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
    2. Cree el rol de IAM otorgándole a la cuenta de servicio de Kubernetes la acción AssumeRoleWithWebIdentity.

      1. Copie los siguientes contenidos en un archivo denominado trust-policy.json. Sustituya 111122223333 por su ID de cuenta. Reemplace EXAMPLED539D4633E53DE1B71EXAMPLE y region-code por los valores que se devolvieron en el paso anterior.

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

        aws iam create-role \ --role-name AmazonEKSVPCCNIMetricsHelperRole \ --assume-role-policy-document file://"trust-policy.json"
    3. Adjunte la política de IAM al rol. Sustituya 111122223333 por su ID de cuenta.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKSVPCCNIMetricsHelperPolicy \ --role-name AmazonEKSVPCCNIMetricsHelperRole
  3. Utilice el siguiente comando para la Región de AWS en el que se encuentra el clúster para agregar la versión recomendada del asistente de métricas de CNI al clúster.

    importante

    Solo debe actualizar una versión secundaria a la vez. Por ejemplo, si su versión secundaria actual es 1.9 y desea actualizar a 1.11, primero debe actualizar a 1.10 y, a continuación, actualizar a 1.11. Para ello, cambie el número de versión en uno de los comandos siguientes.

    La última versión y la más reciente funciona con todas las versiones de Kubernetes compatibles con Amazon EKS.

    China (Pekín) (cn-north-1) o China (Ningxia) (cn-northwest-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.2/config/master/cni-metrics-helper-cn.yaml

    AWS GovCloud (EE. UU. Este) (us-gov-east-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.2/config/master/cni-metrics-helper-us-gov-east-1.yaml

    AWS GovCloud (EE. UU. Oeste) (us-gov-west-1)

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.2/config/master/cni-metrics-helper-us-gov-west-1.yaml

    Todas las demás Regiones de AWS

    1. Descargue el archivo de manifiesto.

      curl -o cni-metrics-helper.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.2/config/master/cni-metrics-helper.yaml
    2. Si el clúster no está en us-west-2, reemplace region-code en el siguiente comando por la Región de AWS en la que se encuentra el clúster y, a continuación, jecute el modificado para reemplazar us-west-2 en el archivo con su Región de AWS.

      sed -i.bak -e 's/us-west-2/region-code/' cni-metrics-helper.yaml
    3. Si el clúster no está en us-west-2, reemplace 602401143452 en el siguiente comando por la cuenta de Registros de imágenes de contenedor de Amazon para la Región de AWS en la que se encuentra el clúster y, a continuación, jecute el modificado para reemplazar 602401143452 en el archivo.

      sed -i.bak -e 's/602401143452/602401143452/' cni-metrics-helper.yaml
    4. Aplique el archivo de manifiesto al clúster.

      kubectl apply -f cni-metrics-helper.yaml
  4. Agregue un comentario en la cuenta de servicio de Kubernetes de cni-metrics-helper creada en el paso anterior con el ARN del rol de IAM que creó anteriormente. Reemplace 111122223333 con su ID de cuenta de my-cluster con el nombre del clúster y AmazonEKSVPCCNIMetricsHelperRole con el nombre del rol de IAM que creó en el paso anterior.

    kubectl annotate serviceaccount cni-metrics-helper \ -n kube-system \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIMetricsHelperRole
  5. (Opcional) Configure el tipo de punto de conexión AWS Security Token Service utilizado por su cuenta de servicio de Kubernetes. Para obtener más información, consulte Configure el punto de conexión AWS Security Token Service de una cuenta de servicio .

  6. Reinicie la implementación de cni-metrics-helper.

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

Creación de un panel de métricas

Después de haber implementado el auxiliar de métricas de CNI, puede ver las métricas de CNI en la consola de CloudWatch. Este tema le ayuda a crear un panel para ver las métricas de CNI del clúster.

Para crear un panel de métricas de CNI

  1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  2. En el panel de navegación izquierdo, seleccione Metrics (Métricas) y, a continuación, seleccione All metrics (Todas las métricas).

  3. En Custom Namespaces (Espacios de nombres personalizados), seleccione Kubernetes.

  4. Seleccione CLUSTER_ID.

  5. En la pestaña Metrics (Métricas), seleccione las métricas que desea agregar al panel.

  6. En la parte superior derecha de la consola, seleccione Actions (Acciones) y, luego, Add to dashboard (Agregar al panel).

  7. En la sección Select a dashboard (Seleccionar un panel), seleccione Create new (Crear nuevo), ingrese un nombre para el panel, como EKS-CNI-metrics, y, a continuación, seleccione Create (Crear).

  8. En la sección Widget type (Tipo de widget), elija Number (Número).

  9. En la sección Customize widget title (Personalizar título del widget), ingrese un nombre lógico para el título del panel, como EKS CNI metrics.

  10. Seleccione Add to dashboard (Agregar al panel) para terminar. Ahora las métricas de CNI se agregan a un panel que puede monitorear, tal y como se muestra a continuación.

    
                        Métricas CNI de EKS