Resolver problemas de tarefas do KubernetesExecutor

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página descreve como resolver problemas com tarefas executadas pelo KubernetesExecutor e oferece soluções para problemas comuns.

Abordagem geral para a solução de problemas do KubernetesExecutor

Para resolver problemas com uma tarefa executada com o KubernetesExecutor, faça as seguintes ações na ordem indicada:

  1. Verifique os registros da tarefa na interface do DAG ou na interface do Airflow.

  2. Verifique os registros do programador no console do Google Cloud:

    1. No console do Google Cloud, acesse a página Ambientes.

      Acessar "Ambientes"

    2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.

    3. Acesse a guia Logs e verifique a seção Logs do Airflow > Programador.

    4. Para um determinado período, inspecione o pod de worker KubernetesExecutor que estava executando a tarefa. Se o pod não existir mais, pule esta etapa. O pod tem o prefixo airflow-k8s-worker e um DAG ou um nome de tarefa no nome. Procure problemas relatados, como uma tarefa com falha ou que não pode ser programada.

Cenários comuns de solução de problemas do KubernetesExecutor

Esta seção lista cenários de solução de problemas comuns que você pode encontrar com o KubernetesExecutor.

A tarefa chega ao estado Running e falha durante a execução.

Sintomas:

  • Há registros da tarefa na interface do Airflow e na guia Logs na seção Workers.

Solução: os registros de tarefas indicam o problema.

A instância da tarefa chega ao estado queued e, depois de algum tempo, é marcada como UP_FOR_RETRY ou FAILED.

Sintomas:

  • Não há registros de tarefas na interface do Airflow e na guia Logs na seção Workers.
  • Há registros na guia Logs na seção Programador com uma mensagem de que a tarefa está marcada como UP_FOR_RETRY ou FAILED.

Solução:

  • Inspecione os registros do agendador para saber mais detalhes sobre o problema.

Possíveis causas:

  • Se os registros do programador contiverem a mensagem Adopted tasks were still pending after... seguida pela instância de tarefa impressa, verifique se o CeleryKubernetesExecutor está ativado no seu ambiente.

A instância da tarefa chega ao estado Queued e é marcada imediatamente como UP_FOR_RETRY ou FAILED.

Sintomas:

  • Não há registros da tarefa na interface do Airflow e na guia Logs na seção Workers.
  • Os registros do agendador na guia Logs na seção Agendador têm a mensagem Pod creation failed with reason ... Failing task e a mensagem de que a tarefa está marcada como UP_FOR_RETRY ou FAILED.

Solução:

  • Verifique os registros do programador para saber a resposta exata e o motivo da falha.

Possível motivo:

Se a mensagem de erro for quantities must match the regular expression ..., o problema provavelmente será causado por valores personalizados definidos para recursos do k8s (solicitações/limites) de pods de workers de tarefas.

As tarefas do KubernetesExecutor falham sem registros quando um grande número de tarefas é executado.

Quando o ambiente executa um grande número de tarefas com o KubernetesExecutor ou o KubernetesPodOperator ao mesmo tempo, o Cloud Composer 3 não aceita novas tarefas até que algumas das tarefas atuais sejam concluídas. As tarefas extras são marcadas como com falha, e o Airflow tenta novamente mais tarde, se você definir novas tentativas para elas. O Airflow faz isso por padrão.

Sintoma:as tarefas executadas com KubernetesExecutor ou KubernetesPodOperator falham sem registros de tarefas na interface do Airflow ou da DAG. Nos registros do programador, você pode encontrar mensagens de erro semelhantes a esta:

pods \"airflow-k8s-worker-*\" is forbidden: exceeded quota: k8s-resources-quota,
requested: pods=1, used: pods=*, limited: pods=*","reason":"Forbidden"

Soluções possíveis:

  • Ajuste a programação de execução do DAG para que as tarefas sejam distribuídas de maneira mais uniforme ao longo do tempo.
  • Reúna tarefas pequenas para reduzir o número de tarefas.

Alternativa:

Se você preferir que as tarefas permaneçam no estado programado até que o ambiente possa executá-las, defina um pool do Airflow com o número limitado de slots na interface do Airflow e associe todas as tarefas baseadas em contêiner a esse pool. Recomendamos definir o número de slots no pool como 50 ou menos. As tarefas extras vão permanecer no estado programado até que o pool do Airflow tenha um slot livre para executá-las. Se você usar essa solução alternativa sem aplicar soluções possíveis, ainda poderá ter uma fila grande de tarefas no pool do Airflow.

A seguir