dior.io kubernetes代理和任务执行



在阅读kubernetes代理文档时,我对下面的感到困惑

">将流运行配置为作为Kubernetes作业运行";

这是否意味着负责提交流和与api服务器通信的进程将作为kubernetes作业运行?

另一方面,我试图解决的用例是

  1. 设置后端服务器
  2. 执行由2个任务组成的流程
  3. 如果k8s infra可用,则任务应作为kubernetes作业执行
  4. 如果Dockeronlyinfra可用,那么任务应该作为docker容器执行

有人能建议我,如何在defect.io中解决上述场景吗?

没错。当您使用KubernetsAgent时,Prefect会将流部署为Kubernetes作业。

对于#1,你可以在你的代理YAML文件中这样做,如下所示:

env:
- name: PREFECT__CLOUD__AGENT__AUTH_TOKEN
value: ''
- name: PREFECT__CLOUD__API
value: "http://some_ip:4200/graphql" # paste your GraphQL Server endpoint here
- name: PREFECT__BACKEND
value: server

#2-编写您的流量

#3和#4-这在预取中更具挑战性,因为目前还没有负载平衡机制了解您的基础结构。您可以尝试一些技巧性的解决方案,但在Prefect中没有一流的方法来处理此问题。

一个破解方法是:你构建一个检查基础设施资源的父流,根据结果,它会使用DockerRun或KubernetsRun运行配置来加速你的流运行。

from prefect import Flow, task, case
from prefect.tasks.prefect import create_flow_run, wait_for_flow_run
from prefect.run_configs import DockerRun, KubernetesRun

@task
def check_the_infrastructure():
return "kubernetes"

with Flow("parent_flow") as flow:
infra = check_the_infrastructure()
with case(infra, "kubernetes"):
child_flow_run_id = create_flow_run(
flow_name="child_flow_name", run_config=KubernetesRun()
)
k8_child_flowrunview = wait_for_flow_run(
child_flow_run_id, raise_final_state=True, stream_logs=True
)
with case(infra, "docker"):
child_flow_run_id = create_flow_run(
flow_name="child_flow_name", run_config=DockerRun()
)
docker_child_flowrunview = wait_for_flow_run(
child_flow_run_id, raise_final_state=True, stream_logs=True
)

但请注意,这需要有两个代理:Kubernetes代理和Docker代理始终运行

最新更新