Passer au contenu

Comment résoudre les erreurs d'API lorsque je mets à niveau la version de mon cluster dans Amazon EKS ?

Lecture de 5 minute(s)
0

J'ai reçu un message d'erreur ou d'avertissement indiquant que mon cluster utilise une API obsolète que je dois corriger avant la prochaine mise à niveau.

Brève description

Lors de la mise à niveau d'une version de cluster, l'onglet Mettre à niveau les informations de la console Amazon EKS indique l'état des différents composants de Kubernetes. Au cours du processus de mise à niveau des différents composants, les états suivants s'affichent :

  • Un statut Erreur indique que le cluster rejette les appels qui font référence à la version spécifique de l'API après la mise à niveau du cluster.
  • Un statut Avertissement indique qu'il existe un problème, mais qu’aucune action immédiate n'est nécessaire. Ce statut peut survenir lorsqu'il est prévu de supprimer la ressource Kubernetes dans une version antérieure d'au moins deux versions à la version actuelle du cluster.
  • Un statut Réussite indique que le composant a réussi toutes les vérifications et validations de mise à niveau. Aucune action n'est nécessaire.
  • Un statut Inconnu indique que le système de mise à niveau ne peut pas déterminer le statut du composant, probablement en raison d'un manque d'informations ou d'un état non concluant au cours du processus. Il est possible que vous deviez prendre des mesures.

Avant de mettre à niveau votre cluster, examinez les composants présentant un statut Erreur ou Avertissement afin de comprendre et de résoudre d’éventuels problèmes.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Vérifier le statut des API

Utilisez la console de gestion AWS ou l'AWS CLI pour vérifier le statut des API obsolètes de votre cluster.

Console de gestion AWS

Procédez comme suit :

  1. Ouvrez la console Amazon EKS.
  2. Sélectionnez le nom de votre cluster.
  3. Dans Informations sur le cluster, choisissez Mettre à niveau les informations.
  4. Examinez tous les avertissements ou messages d'erreur d'API obsolètes sous Mettre à niveau les informations.

AWS CLI

Pour répertorier tous les informations relatives à la mise à niveau dans le fichier YAML, exécutez la commande suivante :

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

Remarque : Remplacez your-cluster-name et your-region-name par les valeurs de votre cluster.

Enregistrez la sortie dans le format de fichier de votre choix.

Pour filtrer les informations afin d'afficher uniquement les erreurs, exécutez la commande suivante :

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

Remarque : Remplacez your-cluster-name et your-region-name par les valeurs de votre cluster.

La sortie est enregistrée au format texte.

Résoudre une erreur de statut d'API obsolète

Si le statut de l’onglet Mettre à niveau les informations indique que votre cluster utilise une API obsolète, un message d'erreur peut s’afficher. Par exemple, si une erreur d'API PDB (budgets de perturbation des pods) se produit, vous pouvez recevoir un message similaire au message suivant :

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

Pour résoudre cette erreur, procédez comme suit :

  1. Exécutez la commande suivante pour répertorier les PDB utilisés par le cluster :

    kubectl get pdb -A
  2. Exécutez la commande suivante pour afficher le résultat permettant d'afficher les PDB qui utilisent la dernière version de l'API ou une version obsolète :

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

    Remarque : Remplacez your-pdb-name par votre PDB et remplacez your-namespace par votre espace de noms.

  3. Si l'une de vos PDB utilise une version d'API obsolète, mettez-la à jour pour utiliser la dernière version d'API dans vos fichiers de configuration YAML. Pour plus d’informations, consultez la page Spécification d’un budget de perturbation pour votre application du site Web Kubernetes.

  4. Si vous ne pouvez pas déterminer l'entité qui appelle l'API obsolète parce qu'il s'agit d'un agent utilisateur spécifique, tel que kube-apiserver, newrelic ou kube-controller-manager, consultez le fichier journal kube-api-server-audit de votre cluster EKS afin de déterminer l'entité.
    Remarque : Les journaux d'audit Cloudwatch doivent être activés sur votre cluster EKS pour exécuter la requête suivante.

  5. Ouvrez la console Amazon CloudWatch.

  6. Choisissez Logs Insights, puis sélectionnez votre groupe de journaux dans le menu. Par exemple, -/aws/eks/eksworkshop/cluster.

  7. Filtrez l'heure et la date pour afficher l'heure de la dernière requête.
    Requête :

    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

    Sortie :

    {
       "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. Pour mettre à jour l'API obsolète avec la dernière API, effectuez l'une des actions suivantes :
    Si le nom d'utilisateur indique cluster-autoscaler, mettez à jour votre autoscaler de cluster vers la dernière version.
    Si le nom d'utilisateur indique newrelic-kube-state-metric, mettez à jour le cluster vers la nouvelle version de kube-state-metrics si celle-ci est installée séparément. Ou, si kube-state-metrics est intégré, mettez à niveau le plug-in new relic.
    Remarque : AWS analyse l'API obsolète au cours des 30 derniers jours. Après avoir mis à jour cluster-autoscaler ou newrelic-kube-state-metric, AWS peut mettre jusqu'à 30 jours pour analyser l'API obsolète et mettre à jour le statut dans l'onglet Mettre à jour les informations.

AWS OFFICIELA mis à jour il y a 4 mois