Automatice la solución de problemas de Amazon EKS utilizando un flujo de trabajo de agente de roca en Amazon Bedrock

A medida que las organizaciones escaman su Servicio de Kubernetes de Amazon Elastic (Amazon EKS) implementaciones, los administradores de la plataforma enfrentan desafíos crecientes para administrar eficientemente los grupos de múltiples inquilinos. Tareas como investigar fallas de POD, abordar las limitaciones de recursos y resolver la configuración errónea pueden consumir un tiempo y esfuerzo significativos. En lugar de gastar valiosas horas de ingeniería, analizando los registros manualmente, el seguimiento de las métricas e implementar soluciones, los equipos deben centrarse en impulsar la innovación. Ahora, con el poder de IA generativapuede transformar sus operaciones de Kubernetes. Al implementar el monitoreo inteligente del clúster, el análisis de patrones y la remediación automatizada, puede reducir drásticamente ambos el tiempo medio para identificar (MTTI) y el tiempo medio de resolver (MTTR) para problemas comunes de clúster.

En AWS re: Invent 2024, anunciamos el múltiple capacidad de colaboración para Roca madre de Amazon (avance). Con la colaboración de múltiples agentes, puede construir, implementar y administrar múltiples agentes de IA que trabajan juntos en tareas complejas de varios pasos que requieren habilidades especializadas. Debido a que la resolución de problemas de un clúster EKS implica derivar ideas de múltiples señales de observabilidad y aplicar correcciones utilizando una tubería de integración e implementación continua (CI/CD), un flujo de trabajo de múltiples agentes puede ayudar a un equipo de operaciones a optimizar la gestión de los grupos de EKS. El agente de Workflow Manager puede integrarse con agentes individuales que interactúan con señales de observabilidad individuales y un flujo de trabajo de CI/CD para orquestar y realizar tareas basadas en la solicitud del usuario.

En esta publicación, demostramos cómo orquestar múltiples agentes de roca madre de Amazon para crear un sofisticado sistema de solución de problemas de Amazon EKS. Al permitir la colaboración entre agentes especializados (conocimientos derivados de K8SGPT y realizar acciones a través del marco de ArgoCD, puede construir una automatización integral que identifique, analice y resuelva problemas de clúster con una intervención humana mínima.

Descripción general de la solución

La arquitectura consta de los siguientes componentes centrales:

  • Amazon Bedrock Collaborator Agent: orquesta el flujo de trabajo y mantiene el contexto mientras enruta las indicaciones del usuario a agentes especializados, administrando operaciones de varios pasos e interacciones de agentes
  • Amazon Bedrock Agent para K8SGPT: evalúa los eventos de clúster y POD a través de la API de análisis de K8SGPT para problemas de seguridad, configuraciones erróneas y problemas de rendimiento, proporcionando sugerencias de remediación en lenguaje natural
  • Amazon Bedrock Agent para ArgoCD: administra la remediación basada en GITOPS a través de ArgoCD, manejo de reversiones, optimización de recursos y actualizaciones de configuración

El siguiente diagrama ilustra la arquitectura de la solución.

Requisitos previos

Necesita tener los siguientes requisitos previos:

Configure el clúster de Amazon EKS con K8SGPT y ArgoCd

Comenzamos con la instalación y la configuración del operador K8SGPT y el controlador ARGOCD en el clúster EKS.

El operador K8SGPT ayudará a habilitar el análisis con IA y la resolución de problemas de problemas de clúster. Por ejemplo, puede detectar y sugerir automáticamente correcciones para implementaciones mal configuradas, como identificar y resolver problemas de restricción de recursos en POD.

ARGOCD es una herramienta de entrega continua de GITOPS declarativa para Kubernetes que automatiza la implementación de aplicaciones manteniendo el estado de aplicación deseado en sincronización con lo que se define en un repositorio GIT.

El agente de Bedrock de Amazon sirve como el tomador de decisiones inteligente en nuestra arquitectura, analizando los problemas de clúster detectados por K8SGPT. Después de identificar la causa raíz, el agente orquesta las acciones correctivas a través del motor GITOPS de ArgoCD. Esta poderosa integración significa que cuando se detectan problemas (ya sea una implementación mal configurada, restricciones de recursos o problemas de escala), el agente puede integrarse automáticamente con ArgoCD para proporcionar las soluciones necesarias. Argocd luego recoge estos cambios y los sincroniza con su clúster EKS, creando una infraestructura verdaderamente autocuradora.

  1. Cree los espacios de nombres necesarios en Amazon EKS:
    kubectl create ns helm-guestbook
    kubectl create ns k8sgpt-operator-system
  2. Agregue el repositorio de timón K8SGPT e instale el operador:
    helm repo add k8sgpt https://charts.k8sgpt.ai/
    helm repo update
    helm install k8sgpt-operator k8sgpt/k8sgpt-operator \
      --namespace k8sgpt-operator-system
  3. Puede verificar la instalación ingresando el siguiente comando:
    kubectl get pods -n k8sgpt-operator-system
    
    NAME                                                          READY   STATUS    RESTARTS  AGE
    release-k8sgpt-operator-controller-manager-5b749ffd7f-7sgnd   2/2     Running   0         1d
    

Después de implementar el operador, puede configurar un recurso K8SGPT. Esta definición de recursos personalizada (CRD) tendrá el modelo de lenguaje grande (LLM) Configuración que ayudará en el análisis con IA y la resolución de problemas de problemas de clúster. K8SGPT admite varios backends para ayudar en el análisis con IA. Para esta publicación, usamos Amazon Bedrock como Backend y Claude V3 de Anthrope como el LLM.

  1. Debe crear la identidad POD para proporcionar el acceso al clúster EKS a otros servicios de AWS con Amazon Bedrock:
    eksctl create podidentityassociation  --cluster PetSite --namespace k8sgpt-operator-system --service-account-name k8sgpt  --role-name k8sgpt-app-eks-pod-identity-role --permission-policy-arns arn:aws:iam::aws:policy/AmazonBedrockFullAccess  --region $AWS_REGION
  2. Configurar el K8SGPT CRD:
    cat << EOF > k8sgpt.yaml
    apiVersion: core.k8sgpt.ai/v1alpha1
    kind: K8sGPT
    metadata:
      name: k8sgpt-bedrock
      namespace: k8sgpt-operator-system
    spec:
      ai:
        enabled: true
        model: anthropic.claude-v3
        backend: amazonbedrock
        region: us-east-1
        credentials:
          secretRef:
            name: k8sgpt-secret
            namespace: k8sgpt-operator-system
      noCache: false
      repository: ghcr.io/k8sgpt-ai/k8sgpt
      version: v0.3.48
    EOF
    
    kubectl apply -f k8sgpt.yaml
    
  3. Valide la configuración para confirmar que la vaina K8SGPT-Bedrock se ejecuta correctamente:
    kubectl get pods -n k8sgpt-operator-system
    NAME                                                          READY   STATUS    RESTARTS      AGE
    k8sgpt-bedrock-5b655cbb9b-sn897                               1/1     Running   9 (22d ago)   22d
    release-k8sgpt-operator-controller-manager-5b749ffd7f-7sgnd   2/2     Running   3 (10h ago)   22d
    
  4. Ahora puede configurar el controlador ArgoCD:
    helm repo add argo https://argoproj.github.io/argo-helm
    helm repo update
    kubectl create namespace argocd
    helm install argocd argo/argo-cd \
      --namespace argocd \
      --create-namespace
  5. Verifique la instalación de ArgoCD:
    kubectl get pods -n argocd
    NAME                                                READY   STATUS    RESTARTS   AGE
    argocd-application-controller-0                     1/1     Running   0          43d
    argocd-applicationset-controller-5c787df94f-7jpvp   1/1     Running   0          43d
    argocd-dex-server-55d5769f46-58dwx                  1/1     Running   0          43d
    argocd-notifications-controller-7ccbd7fb6-9pptz     1/1     Running   0          43d
    argocd-redis-587d59bbc-rndkp                        1/1     Running   0          43d
    argocd-repo-server-76f6c7686b-rhjkg                 1/1     Running   0          43d
    argocd-server-64fcc786c-bd2t8                       1/1     Running   0          43d
  6. Parche el servicio ArgoCD para tener un equilibrador de carga externo:
    kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
  7. Ahora puede acceder a la interfaz de usuario de ArgoCD con el siguiente punto final del equilibrador de carga y las credenciales para el usuario administrador:
    kubectl get svc argocd-server -n argocd
    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                                                              PORT(S)                      AGE
    argocd-server   LoadBalancer   10.100.168.229   a91a6fd4292ed420d92a1a5c748f43bc-653186012.us-east-1.elb.amazonaws.com   80:32334/TCP,443:32261/TCP   43d
  8. Recupere las credenciales para la UI de ArgoCd:
    export argocdpassword=`kubectl -n argocd get secret argocd-initial-admin-secret \
    -o jsonpath="{.data.password}" | base64 -d`
    
    echo ArgoCD admin password - $argocdpassword
  9. Empuje las credenciales a AWS Secrets Manager:
    aws secretsmanager create-secret \
    --name argocdcreds \
    --description "Credentials for argocd" \
    --secret-string "{\"USERNAME\":\"admin\",\"PASSWORD\":\"$argocdpassword\"}"
  10. Configurar una aplicación de muestra en ArgoCD:
    cat << EOF > argocd-application.yaml
    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
    name: helm-guestbook
    namespace: argocd
    spec:
    project: default
    source:
    repoURL: https://github.com/awsvikram/argocd-example-apps
    targetRevision: HEAD
    path: helm-guestbook
    destination:
    server: https://kubernetes.default.svc
    namespace: helm-guestbook
    syncPolicy:
    automated:
    prune: true
    selfHeal: true
    EOF
  11. Aplique la configuración y verifíquela desde la interfaz de usuario de ArgoCD iniciando sesión como usuario administrativo:
    kubectl apply -f argocd-application.yaml

    Aplicación Argocd

  12. K8SGPT tarda un tiempo en analizar las cápsulas recién creadas. Para hacer eso inmediato, reinicie las cápsulas creadas en el espacio de nombres K8SGPT-Operator-System. Las vainas se pueden reiniciar ingresando el siguiente comando:
    kubectl -n k8sgpt-operator-system rollout restart deploy
    
    deployment.apps/k8sgpt-bedrock restarted
    deployment.apps/k8sgpt-operator-controller-manager restarted

Configure los agentes de la roca madre de Amazon para K8SGPT y Argocd

Utilizamos una pila CloudFormation para implementar los agentes individuales en la región de EE. UU. (N. Virginia). Cuando tu desplegar CloudFormation plantillaimplementa varios recursos (se incurrirán en costos para los recursos de AWS utilizados).

Use los siguientes parámetros para la plantilla de CloudFormation:

La pila crea lo siguiente AWS Lambda Funciones:

  • <Stack name>-LambdaK8sGPTAgent-<auto-generated>
  • <Stack name>-RestartRollBackApplicationArgoCD-<auto-generated>
  • <Stack name>-ArgocdIncreaseMemory-<auto-generated>

La pila crea los siguientes agentes de roca madre de Amazon:

  • ArgoCDAgentcon los siguientes grupos de acción:
    1. argocd-rollback
    2. argocd-restart
    3. argocd-memory-management
  • K8sGPTAgentcon el siguiente grupo de acción:
    1. k8s-cluster-operations

La pila emite lo siguiente, con los siguientes agentes asociados a ella:

  1. ArgoCDAgent
  2. K8sGPTAgent
  • Lambdak8sgptagentrole, Gestión de identidad y acceso de AWS (Iam) papel Nombre de recursos de Amazon (ARN) asociado a la función Lambda que entrega interacciones con el agente K8SGPT en el clúster EKS. Este rol se necesitará en una etapa posterior del proceso de configuración.
  • K8sGPTAgentAliasIdID del alias K8SGPT Amazon Bedrock Agent Alias
  • ArgoCDAgentAliasIdID del alias de agente de roca de roca de Amazon de ArgoCd
  • CollaboratorAgentAliasIdID del colaborador Amazon Bedrock Agent Alias

Asigne los permisos apropiados para habilitar el agente K8SGPT Amazon Bedrock para acceder al clúster EKS

Para habilitar el agente K8SGPT Amazon Bedrock para acceder al clúster EKS, debe configurar los permisos de IAM apropiados utilizando las API de administración de acceso de Amazon EKS. Este es un proceso de dos pasos: primero, crea una entrada de acceso para el rol de ejecución de la función lambda (que puede encontrar en la sección de salida de plantilla de formación de nubes) y luego asocia el AmazonEKSViewPolicy para otorgar acceso de solo lectura al clúster. Esta configuración asegura que el agente K8SGPT tenga los permisos necesarios para monitorear y analizar los recursos del clúster EKS mientras mantiene el principio de menor privilegio.

  1. Cree una entrada de acceso para el rol de ejecución de la función Lambda
    export CFN_STACK_NAME=EKS-Troubleshooter
    	   export EKS_CLUSTER=PetSite
    
    export K8SGPT_LAMBDA_ROLE=`aws cloudformation describe-stacks --stack-name $CFN_STACK_NAME --query "Stacks[0].Outputs[?OutputKey=='LambdaK8sGPTAgentRole'].OutputValue" --output text`
    
    aws eks create-access-entry \
        --cluster-name $EKS_CLUSTER \
        --principal-arn $K8SGPT_LAMBDA_ROLE
  2. Asociar la Política de vista EKS con la entrada de acceso
    aws eks associate-access-policy \
        --cluster-name $EKS_CLUSTER \
        --principal-arn  $K8SGPT_LAMBDA_ROLE\
        --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
        --access-scope type=cluster
  3. Verifique los agentes de la roca madre de Amazon. La plantilla de CloudFormation agrega los tres agentes requeridos. Para ver a los agentes, en la consola de rock de Amazon, bajo herramientas de constructor en el panel de navegación, seleccione Agentescomo se muestra en la siguiente captura de pantalla.

Agentes de roca madre

Realice la resolución de problemas de Amazon EKS utilizando el flujo de trabajo de Amazon Bedrock Agentic

Ahora, prueba la solución. Exploramos los siguientes dos escenarios:

  1. El agente coordina con el agente K8SGPT para proporcionar información sobre la causa raíz de una falla de la vaina
  2. El agente colaborador coordina con el agente de ArgoCD para proporcionar una respuesta

El agente coordina con el agente K8SGPT para proporcionar información sobre la causa raíz de una falla de la cápsula

En esta sección, examinamos una alerta hacia abajo para una aplicación de muestra llamada Memory-Demo. Estamos interesados ​​en la causa raíz del problema. Usamos el siguiente mensaje: “Recibimos una alerta de abajo para la aplicación Memory-Demo. Ayúdanos con la causa raíz del problema”.

El agente no solo declaró la causa raíz, sino que fue un paso más allá para corregir potencialmente el error, que en este caso está aumentando los recursos de memoria a la aplicación.

Hallazgo del agente de K8SGPT

El agente colaborador coordina con el agente ARGOCD para proporcionar una respuesta

Para este escenario, continuamos desde el aviso anterior. Creemos que la aplicación no se proporcionó suficiente memoria, y debería aumentarse para solucionar permanentemente el problema. También podemos decir que la aplicación está en un estado poco saludable en la interfaz de usuario de ArgoCD, como se muestra en la siguiente captura de pantalla.

Arcoui

Ahora procedamos a aumentar la memoria, como se muestra en la siguiente captura de pantalla.

Interactuar con el agente para aumentar la memoria

El agente interactuó con el argocd_operations Agente de roca madre de Amazon y pudo aumentar con éxito la memoria. Lo mismo se puede inferir en la interfaz de usuario de ArgoCd.

Argoui que muestra la memoria aumentando

Limpieza

Si decide dejar de usar la solución, complete los siguientes pasos:

  1. Para eliminar los recursos asociados implementados utilizando AWS CloudFormation:
    1. En la consola de CloudFormation de AWS, elija pilas en el panel de navegación.
    2. Localice la pila que creó durante el proceso de implementación (le asignó un nombre).
    3. Seleccione la pila y elija Eliminar.
  2. Elimine el clúster EKS si creó uno específicamente para esta implementación.

Conclusión

Al orquestar múltiples agentes de roca madre de Amazon, hemos demostrado cómo construir un sistema de solución de problemas de Amazon EKS con IA que simplifica las operaciones de Kubernetes. Esta integración del análisis K8SGPT y la automatización de implementación de ArgoCD muestran las poderosas posibilidades al combinar agentes de IA especializados con las herramientas de DevOps existentes. Aunque esta solución representa el avance en las operaciones automatizadas de Kubernetes, es importante recordar que la supervisión humana sigue siendo valiosa, particularmente para escenarios complejos y decisiones estratégicas.

A medida que Amazon Bedrock y sus capacidades de agente continúan evolucionando, podemos esperar posibilidades de orquestación aún más sofisticadas. Puede extender esta solución para incorporar herramientas, métricas y flujos de trabajo de automatización para satisfacer las necesidades específicas de su organización.

Para obtener más información sobre Amazon Bedrock, consulte los siguientes recursos:


Sobre los autores

Vikram Venkataraman es un arquitecto de soluciones especialistas principales en Amazon Web Services (AWS). Ayuda a los clientes a modernizar, escalar y adoptar las mejores prácticas para sus cargas de trabajo contenedores. Con el surgimiento de la IA generativa, Vikram ha estado trabajando activamente con los clientes para aprovechar los servicios de IA/ML de AWS para resolver desafíos operativos complejos, optimizar los flujos de trabajo de monitoreo y mejorar la respuesta de incidentes a través de la automatización inteligente.

Puneeth Ranjan Komaragiri es un gerente de cuenta técnica principal en Amazon Web Services (AWS). Es particularmente apasionado por el monitoreo y la observabilidad, la gestión financiera en la nube y los dominios generativos de IA. En su papel actual, Puneeth disfruta colaborando estrechamente con los clientes, aprovechando su experiencia para ayudarlos a diseñar y arquitectando sus cargas de trabajo en la nube para una escala y resistencia óptimas.

Sudheer sangunni es un gerente de cuenta técnica senior en AWS Enterprise Support. Con su amplia experiencia en AWS Cloud y Big Data, Sudheer desempeña un papel fundamental en ayudar a los clientes a mejorar sus capacidades de monitoreo y observabilidad dentro de las ofertas de AWS.

Vikrant Choudhary es gerente de cuentas técnicas senior en Amazon Web Services (AWS), especializada en ciencias de la salud y ciencias de la vida. Con más de 15 años de experiencia en soluciones en la nube y arquitectura empresarial, ayuda a las empresas a acelerar sus iniciativas de transformación digital. En su rol actual, Vikrant se asocia con los clientes para arquitectos e implementan soluciones innovadoras, desde migraciones en la nube y modernización de aplicaciones hasta tecnologías emergentes como la IA generativa, impulsando los resultados comerciales exitosos a través de la adopción de la nube.