prefect.io kubernetes 代理和任务执行
prefect.io kubernetes agent and task execution
在阅读 kubernetes agent documentation 时,我对下面的行感到困惑
"配置流-运行 运行 作为 Kubernetes 作业。"
这是否意味着负责提交流程和与 api 服务器通信的进程将 运行 作为 kubernetes 作业?
另一方面,我要解决的用例是
- 设置后端服务器
- 执行由 2 个任务组成的流程
- 如果 k8s 基础设施可用,则任务应作为 kubernetes 作业执行
- 如果 docker 只有基础设施可用,任务应作为 docker 容器执行。
有人可以建议我如何解决 prefect.io 中的上述情况吗?
完全正确。当您使用 KubernetesAgent 时,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 中更具挑战性,因为目前没有可识别您的基础架构的负载平衡机制。您可以尝试一些 hacky 解决方案,但在 Prefect 中没有 first-class 方法来处理这个问题。
一个 hack 是:你构建一个父流来检查你的基础设施资源,并根据结果,它使用 Docker运行 或 Kubernetes 启动你的流 运行 运行 运行 配置
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
)
但请注意,这将需要您拥有 2 个代理:Kubernetes 代理和 Docker 代理 运行ning
在阅读 kubernetes agent documentation 时,我对下面的行感到困惑
"配置流-运行 运行 作为 Kubernetes 作业。"
这是否意味着负责提交流程和与 api 服务器通信的进程将 运行 作为 kubernetes 作业?
另一方面,我要解决的用例是
- 设置后端服务器
- 执行由 2 个任务组成的流程
- 如果 k8s 基础设施可用,则任务应作为 kubernetes 作业执行
- 如果 docker 只有基础设施可用,任务应作为 docker 容器执行。
有人可以建议我如何解决 prefect.io 中的上述情况吗?
完全正确。当您使用 KubernetesAgent 时,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 中更具挑战性,因为目前没有可识别您的基础架构的负载平衡机制。您可以尝试一些 hacky 解决方案,但在 Prefect 中没有 first-class 方法来处理这个问题。
一个 hack 是:你构建一个父流来检查你的基础设施资源,并根据结果,它使用 Docker运行 或 Kubernetes 启动你的流 运行 运行 运行 配置
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
)
但请注意,这将需要您拥有 2 个代理:Kubernetes 代理和 Docker 代理 运行ning