Saltar al contenido

¿Cómo soluciono los errores de API al actualizar la versión de mi clúster en Amazon EKS?

5 minutos de lectura
0

He recibido un mensaje de error o advertencia en el que se indica que mi clúster utiliza una API obsoleta que tengo que corregir antes de la próxima actualización.

Descripción corta

Durante la actualización de una versión de clúster, la pestaña Información de actualización de la consola de Amazon EKS muestra el estado de varios componentes de Kubernetes. Durante el proceso de actualización de los diferentes componentes, verás los siguientes estados:

  • El estado Error indica que el clúster rechaza las llamadas que hacen referencia a la versión de API específica después de la actualización del clúster.
  • El estado Advertencia indica que hay un problema, pero no es necesaria ninguna acción inmediata. Este estado puede ocurrir cuando se programa la eliminación del recurso de Kubernetes en una versión que tenga al menos 2 versiones anteriores a la versión actual del clúster.
  • El estado Aprobado indica que el componente ha superado todas las comprobaciones y validaciones de la actualización. No es necesaria ninguna acción.
  • El estado Desconocido indica que el sistema de actualización no puede determinar el estado del componente, posiblemente debido a la falta de información o a un estado poco concluyente durante el proceso. Es posible que tengas que tomar medidas.

Antes de actualizar el clúster, revisa los componentes con un estado de error o advertencia para comprender y resolver cualquier problema.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Comprobación del estado de las API

Utiliza la consola de administración de AWS o la AWS CLI para comprobar el estado de las API obsoletas de tu clúster.

Consola de administración de AWS

Sigue estos pasos:

  1. Abre la consola de Amazon EKS.
  2. Selecciona el nombre de tu clúster.
  3. En Información del clúster, selecciona Información de actualización.
  4. Revisa cualquier advertencia o mensaje de error de la API obsoleta en el estado de la información.

AWS CLI

Para mostrar todos los detalles de la información de actualización en el archivo YAML, ejecuta el siguiente comando:

 [+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --output yaml >> insight.yaml

Nota: Sustituye your-cluster-name y your-region-name por los valores de tu clúster.

Guarda la salida en el formato de archivo que prefieras.

Para filtrar la información y mostrar solo los errores, ejecuta el siguiente comando:

[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --filter categories=UPGRADE_READINESS,statuses=ERROR

Nota: Sustituye your-cluster-name y your-region-name por los valores de tu clúster.

La salida se guarda en formato de texto.

Resolución de un error de estado de API obsoleta

Si el estado de la pestaña Información de actualización indica que tu clúster tiene una API obsoleta, es posible que recibas un error. Por ejemplo, si se produce un error en la API del presupuesto de interrupción del pod (PDB), es posible que recibas un mensaje similar al siguiente:

"EKS using deprecated api version "/apis/policy/v1beta1/poddisruptionbudgets" and needs to replace it with "/apis/policy/v1/poddisruptionbudgets" before upgrading EKS cluster."

Para solucionar el error, sigue estos pasos:

  1. Ejecuta el siguiente comando para enumerar las PDB que usa el clúster:

    kubectl get pdb -A
  2. Ejecuta el siguiente comando para ver el resultado y ver las PDB que utilizan la versión de API más reciente o una versión obsoleta:

    kubectl get pdb your-pdb-name -n your-namespace -o yaml

    Nota: Sustituye your-pdb-name por tu PDB y your-namespace por tu espacio de nombres.

  3. Si alguna de tus PDB usa una versión de API obsoleta, actualízala para usar la versión más reciente de la API en tus archivos de configuración de YAML. Para obtener más información, consulta Specifying a disruption budget for your application (Especificación de un presupuesto de interrupción para tu aplicación) en el sitio web de Kubernetes.

  4. Si no puedes determinar la entidad que llama a la API obsoleta porque es un agente de usuario específico, como kube-apiserver, newrelic o kube-controller-manager, comprueba el archivo de registro kube-api-server-audit de tu clúster para determinar la entidad.
    Nota: Tu clúster de EKS debe tener habilitados los registros de auditoría de Cloudwatch para ejecutar la siguiente consulta.

  5. Abre la consola de Amazon CloudWatch.

  6. Elige Información de registros y, a continuación, selecciona tu grupo de registro en el menú. Por ejemplo, -/aws/eks/eksworkshop/cluster.

  7. Filtra la fecha y la hora para mostrar la hora de la última solicitud.
    Consulta:

    fields @logStream, @timestamp, responseStatus.code, @message
    | filter @logStream like /^kube-apiserver-audit/
    | filter requestURI like /\/apis\/autoscaling\/v2beta2\/horizontalpodautoscalers/    ### ---> Replace this with your Deprecated API's
    | sort @timestamp desc
    | limit 1000

    Salida:

    {
       "kind":"Event",
       "apiVersion":"audit.k8s.io/v1",
       "level":"Request",
       "auditID":"bd2b2b0c-8556-4468-8b35-91e2e78759a6",
       "stage":"ResponseComplete",
       "requestURI":"/apis/autoscaling/v2beta2/horizontalpodautoscalers?allowWatchBookmarks=true\u0026resourceVersion=118801277\u0026timeout=5m51s\u0026timeoutSeconds=351\u0026watch=true",
       "verb":"watch",
       "user":{
          "username":"system:serviceaccount:newrelic:newrelic-kube-state-metrics",
          "uid":"9b97a09a-cf70-4fe2-8fd8-6c87110ce672",
          "groups":[
             "system:serviceaccounts",
             "system:serviceaccounts:newrelic",
             "system:authenticated"
          ],
          "extra":{
             "authentication.kubernetes.io/pod-name":[
                "newrelic-kube-state-metrics-5bb6ccc94d-8nj9v"
             ],
             "authentication.kubernetes.io/pod-uid":[
                "5b156744-00b6-4dfb-a998-a32140409b8e"
             ]
          }
       },
       "sourceIPs":[
          "10.62.98.22"
       ],
       "userAgent":"v2.6.0",
       "objectRef":{
          "resource":"horizontalpodautoscalers",
          "apiGroup":"autoscaling",
          "apiVersion":"v2beta2"
       },
       "responseStatus":{
          "metadata":{
    
          },
          "code":200
       },
       "requestReceivedTimestamp":"2024-12-13T20:13:04.438616Z",
       "stageTimestamp":"2024-12-13T20:18:55.441744Z",
       "annotations":{
          "authorization.k8s.io/decision":"allow",
          "authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"newrelic-kube-state-metrics\" of ClusterRole \"newrelic-kube-state-metrics\" to ServiceAccount \"newrelic-kube-state-metrics/newrelic\"",
          "k8s.io/deprecated":"true",
          "k8s.io/removed-release":"1.26"
       }
    }
  8. Para actualizar la API obsoleta con la API más reciente, realiza una de las siguientes acciones:
    Si el nombre de usuario muestra cluster-autoscaler, actualiza tu escalador automático de clústeres a la versión más reciente.
    Si el nombre de usuario muestra newrelic-kube-state-metric, actualiza el clúster a la versión más reciente de kube-state-metrics si se instala por separado. O, si kube-state-metrics está incluido, actualiza el nuevo complemento relic.
    Nota: AWS analiza la API obsoleta durante los últimos 30 días. Después de actualizar cluster-autoscaler or newrelic-kube-state-metric, es posible que AWS tarde hasta 30 días en analizar la API obsoleta y actualizar el estado en la pestaña Información de actualización.

OFICIAL DE AWSActualizada hace un año