Instalación del complemento auxiliar de métricas Amazon VPC CNI plugin for Kubernetes - Amazon EKS

Instalación del complemento auxiliar de métricas Amazon VPC CNI plugin for Kubernetes

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 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) existente para el clúster. Para determinar si ya tiene un proveedor o para crear uno, consulte Creación de un proveedor de OIDC de IAM para su clúster.

  • La versión 2.8.6 o posterior, o bien, la versión 1.26.3 o posterior de la AWS CLI instalada y configurada en su dispositivo o AWS CloudShell. Puede comprobar su versión actual con aws --version | cut -d / -f2 | cut -d ' ' -f1. Los administradores de paquetes tales como yum, apt-get o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, 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 versión de la AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Installing AWS CLI to your home directory (Instalación de la AWS CLI en el directorio de inicio) en la Guía del usuario de AWS CloudShell.

  • La herramienta de línea de comandos de kubectl está instalada en su dispositivo 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.22, puede utilizar la versión kubectl 1.21, 1.22 o 1.23 con él. Para instalar o actualizar kubectl, consulte Instalación o actualización del 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. Ejecute el siguiente comando para crear un archivo llamado cni-metrics-helper-policy.json.

      cat >cni-metrics-helper-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" } ] } EOF
    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. Puede reemplazar AmazonEKSVPCCNIMetricsHelperRole-my-cluster por cualquier nombre que elija, pero le recomendamos incluir el nombre del clúster con el que usará este rol en el nombre del rol. Reemplace 111122223333 por el ID de su la cuenta y region-code por la Región de AWS donde se encuentra su clúster.

    eksctl create iamserviceaccount \ --name cni-metrics-helper \ --namespace kube-system \ --cluster my-cluster \ --role-name "AmazonEKSVPCCNIMetricsHelperRole-my-cluster" \ --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

      El ejemplo de resultado es el siguiente.

      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 su dispositivo. Sustituya 111122223333 por su ID de cuenta. Reemplace EXAMPLED539D4633E53DE1B71EXAMPLE y region-code por los valores que se devolvieron en el paso anterior. Después de reemplazar los valores, ejecute el comando para crear un archivo denominado trust-policy.json.

        cat >trust-policy.json <<EOF { "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" } } } ] } EOF
      2. Cree el rol. Puede reemplazar AmazonEKSVPCCNIMetricsHelperRole-my-cluster por cualquier nombre que elija, pero le recomendamos incluir el nombre del clúster con el que usará este rol en el nombre del rol.

        aws iam create-role \ --role-name AmazonEKSVPCCNIMetricsHelperRole-my-cluster \ --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. Compruebe que el rol que creó está configurado correctamente.

    1. Compruebe la política de confianza para el rol.

      aws iam get-role --role-name AmazonEKSVPCCNIMetricsHelperRole-my-cluster --query Role.AssumeRolePolicyDocument.Statement[]

      A continuación, se muestra un ejemplo de resultado.

      [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:cni-metrics-helper", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ]
    2. Compruebe que el proveedor OIDC de su clúster coincida con el proveedor que se devolvió en el paso anterior.

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

      A continuación, se muestra un ejemplo de resultado.

      https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE

      En el resultado devuelto, la parte https:// del proveedor no se incluye en el resultado devuelto en el paso anterior. Esto es normal.

  4. 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.

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

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.11.4/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.4/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.4/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
  5. Agregue un comentario en la cuenta de servicio de cni-metrics-helper de Kubernetes creada en el paso anterior con el ARN del rol de IAM que creó anteriormente. Reemplace 111122223333 por el ID de cuenta, my-cluster por el nombre del clúster y AmazonEKSVPCCNIMetricsHelperRole por 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
  6. (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 Configuración del punto de conexión de AWS Security Token Service para una cuenta de servicio .

  7. 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 de control que puede monitorear.

    
                        Métricas CNI de EKS