Ir para o conteúdo

Como resolvo erros de API ao atualizar minha versão de cluster no Amazon EKS?

5 minuto de leitura
0

Recebi um status de erro ou aviso de que meu cluster usa uma API obsoleta que preciso corrigir antes da próxima atualização.

Breve descrição

Durante a atualização de uma versão do cluster, a guia “Insights de atualização” no console do Amazon EKS mostra o status de vários componentes do Kubernetes. Durante o processo de atualização de diferentes componentes, você vê os seguintes status:

  • O status Erro mostra que o cluster rejeita chamadas que fazem referência à versão específica da API após a atualização do cluster.
  • O status Aviso mostra que há um problema, mas nenhuma ação imediata é necessária. Ele pode acontecer quando o recurso do Kubernetes está programado para ser removido em uma versão que seja pelo menos 2 versões mais antiga do que a versão atual do cluster.
  • O status Aprovação mostra que o componente passou por todas as verificações e validações de atualização. Nenhuma ação é necessária.
  • O status Desconhecido mostra que o sistema de atualização não pode determinar o status do componente, possivelmente devido à falta de informações ou a um estado inconclusivo durante o processo. Isso talvez requeira uma ação.

Antes de atualizar seu cluster, revise os componentes com status Erro ou Aviso para entender e resolver quaisquer problemas.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Verificar o status das APIs

Use o Console de Gerenciamento da AWS ou a AWS CLI para verificar os status das APIs obsoletas em seu cluster.

Console de Gerenciamento da AWS

Conclua as etapas a seguir:

  1. Abra o console do Amazon EKS.
  2. Selecione o nome do seu cluster.
  3. Em Informações do cluster, escolha Insights de atualização.
  4. Analise todos os avisos ou mensagens de erro da API obsoleta no status Insight.

AWS CLI

Para listar todos os detalhes de insights de atualização no arquivo YAML, execute o seguinte comando:

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

Observação: substitua your-cluster-name and your-region-name pelos valores do seu cluster.

Salve a saída no formato de arquivo da sua preferência.

Para filtrar os insights para mostrar apenas erros, execute o seguinte comando:

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

Observação: substitua your-cluster-name and your-region-name pelos valores do seu cluster.

A saída é salva em formato de texto.

Resolver um erro de status de API obsoleta

Se o status da guia Insights de atualização mostrar que seu cluster tem uma API obsoleta, você poderá receber um erro. Por exemplo, se ocorrer um erro na API do orçamento de interrupção do pod (PDB), você poderá receber uma mensagem semelhante à seguinte:

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

Para resolver esse erro, conclua as seguintes etapas:

  1. Execute o comando a seguir para listar os PDBs que o cluster usa:

    kubectl get pdb -A
  2. Execute o comando a seguir para ver a saída e visualizar PDBs que usam a versão mais recente da API ou uma versão obsoleta:

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

    Observação: substitua your-pdb-name pelo seu PDB e your-namespace pelo seu namespace.

  3. Se algum dos seus PDBs usar uma versão de API obsoleta, atualize-a para usar a versão mais recente da API em seus arquivos de configuração YAML. Para mais informações, consulte Specifying a Disruption Budget for your Application (Especificar o orçamento de interrupção para a aplicação) no site do Kubernetes.

  4. Se não for possível determinar a entidade que chama a API obsoleta porque é um atendente de usuário específico, como kube-apiserver, newrelic ou kube-controller-manager, verifique o arquivo de log kube-api-server-audit do seu cluster do EKS para determinar a entidade.
    Observação: seu cluster EKS deve ter os logs de auditoria do CloudWatch habilitados para executar a seguinte consulta.

  5. Abra o Console do Amazon CloudWatch.

  6. Escolha Insights de logs e selecione seu grupo de logs no menu. Por exemplo, -/aws/eks/eksworkshop/cluster.

  7. Filtre a hora e a data para mostrar a Hora da última solicitação.
    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

    Saída:

    {
       "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 atualizar a API obsoleta com a API mais recente, execute uma das seguintes ações:
    Se o nome de usuário mostrar cluster-autoscaler, atualize o autoscaler do seu cluster para a versão mais recente.
    Se o nome de usuário mostrar newrelic-kube-state-metric, atualize o cluster para a versão mais recente de kube-state-metrics, se instalado separadamente. Ou, se kube-state-metrics estiver incluído, atualize o plug-in New Relic.
    Observação: A AWS escaneia a API obsoleta nos últimos 30 dias. Depois de atualizar cluster-autoscaler ou newrelic-kube-state-metric, pode levar até 30 dias para que a AWS escaneie a API obsoleta e atualize o status na guia Insights de atualização.

AWS OFICIALAtualizada há um ano