O Argo Workflows é amplamente utilizado para tarefas agendadas, machine learning e ETL, mas as definições em YAML podem ser difíceis de aprender. O Hera Python SDK permite construir workflows em Python, com suporte a tarefas complexas, testes simplificados e integração nativa ao ecossistema Python. Este tópico explica como usar o SDK para Python para criar Argo Workflows em grande escala.
Contexto
O Argo Workflows é uma ferramenta open source nativa do Kubernetes para orquestrar workflows complexos com dependências flexíveis entre tarefas.
Os casos de uso incluem tarefas agendadas, machine learning, simulação, computação científica, ETL, treinamento de modelos e CI/CD. O Argo Workflows utiliza YAML para definir workflows, mas a indentação rigorosa e a estrutura hierárquica do YAML geram uma curva de aprendizado íngreme para workflows complexos.
O Hera é um SDK para Python destinado à criação e ao envio de Argo Workflows, permitindo que cientistas de dados trabalhem em Python em vez de YAML.
Comparação de métodos de autoria
|
YAML |
Hera |
|
|
Simplicidade |
Alta |
Alta, com menos linhas de código |
|
Escrita de workflows complexos |
Difícil |
Fácil. Evita erros de sintaxe do YAML. |
|
Integração com o ecossistema Python |
Difícil |
Fácil. Acesso a bibliotecas Python. |
|
Testabilidade |
Difícil, propensa a erros de sintaxe |
Fácil. Frameworks de teste melhoram a qualidade e a manutenibilidade do código. |
O Hera conecta o ecossistema Python ao Argo Workflows, viabilizando a orquestração de tarefas em grande escala sem a complexidade do YAML. Os exemplos a seguir utilizam o Hera.
Crie um cluster e obtenha um token
Create an Argo workflow cluster e, em seguida, ative Argo Server and access the workflow console.
-
Crie um token de cluster.
kubectl create token default -n default
Envie workflows com o Hera
-
Instale o Hera.
pip install hera -
Escreva e envie os workflows.
Diamante DAG simples
Um diamante DAG é um padrão comum em que as tarefas divergem e convergem. Neste exemplo, a Tarefa A executa primeiro; depois, B e C executam em paralelo; por fim, a Tarefa D executa após a conclusão de ambas.
-
Crie um file chamado
simpleDAG.pycom o conteúdo a seguir.# Import the required packages. from hera.workflows import DAG, Workflow, script from hera.shared import global_config import urllib3 urllib3.disable_warnings() # Configure the host address and token. global_config.host = "https://{{argo_server_IP}}:2746" global_config.token = "abcdefgxxxxxx" # Replace with the token you obtained. global_config.verify_ssl = "" # The @script decorator is a key Hera feature that lets you orchestrate Python functions almost natively. # It allows you to call the decorated function within a Hera context manager, such as a Workflow or Steps context. # The function still runs normally outside of any Hera context, which means you can write unit tests for it. # This example prints the input message. @script(image="mirrors-ssl.aliyuncs.com/python:3.10") def echo(message: str): print(message) # A Workflow is the primary resource in Argo and a key class in Hera. It stores templates, sets an entrypoint, and runs them. with Workflow( generate_name="dag-diamond-", entrypoint="diamond", namespace="default", ) as w: with DAG(name="diamond"): A = echo(name="A", arguments={"message": "A"}) # Build a template. B = echo(name="B", arguments={"message": "B"}) C = echo(name="C", arguments={"message": "C"}) D = echo(name="D", arguments={"message": "D"}) A >> [B, C] >> D # Define the dependencies: Tasks B and C depend on A, and task D depends on B and C. # Create the workflow. w.create() -
Envie o workflow.
python simpleDAG.py -
Visualize o DAG da tarefa e os resultados no workflow console.
O workflow
dag-diamond-g9v45exibe um DAG em formato de diamante: o nó A é concluído, B e C executam em paralelo e depois convergem em D. Todos os nós mostram execução bem-sucedida.
Map-reduce
Este exemplo usa modelos DAG para implementar MapReduce: divide uma tarefa em etapas de map paralelas e agrega os resultados em uma etapa de reduce. Cada etapa é uma função Python.
-
Crie um file chamado
map-reduce.pycom o conteúdo a seguir. -
Envie o workflow.
python map-reduce.py Visualize o DAG da tarefa e os resultados no workflow console. Na página WORKFLOW DETAILS, o DAG mostra o nó
split, quatro nósmapparalelos e o nóreduce, todos executados com sucesso (marca de verificação verde).
-
Referências
-
Documentação do Hera:
-
Exemplos de implantação em YAML:
Diamante simples (YAML): dag-diamond.yaml
Map-reduce (YAML): map-reduce.yaml