【问题标题】:How to deploy a Kubernetes Job at AKS with Prefect如何使用 Prefect 在 AKS 部署 Kubernetes 作业
【发布时间】:2022-02-21 18:51:44
【问题描述】:

我是 Prefect 的新手,想使用 Prefect 在 Azure Kubernetes 服务上部署 Kubernetes 作业。 我已经建立了一个 Linux 容器,包括 Prefect、kubectl。我可以建立到 AKS 集群的连接,并且通过使用 kubectl,我可以在 AKS 上部署 Kubernetes 作业。 但是它如何与 Prefect 一起工作? 在 Container 中,我存储了 .py 文件和一个 YAML 文件,它定义了 Kubernetes 作业。

--> kubectl apply -f deploytestcontainer.yaml --> 有效

运行附加的示例 Prefect 代码也可以工作(但作业未在 AKS 中部署)

这就是“firstk8sjob.py”的内容

import prefect
from prefect import task, Flow
from prefect.run_configs import KubernetesRun
 
@task
def hello_task():
    flow.run_config = KubernetesRun(job_template_path="deploytestcontainer.yaml")
    logger = prefect.context.get("logger")
    logger.info("Hello world!")
 
with Flow("hello-flow") as flow:
    hello_task()
 
flow.run()

非常感谢您的建议!

【问题讨论】:

  • 那么,如果您对您的 AKS 运行 kubectl get jobs -A,输出是什么?
  • @Hackerman :通过使用 kubectl,我能够按预期部署作业 - 所以 kubectl 的使用很好。但我需要使用 Prefect 来部署这项工作......

标签: python azure kubernetes prefect


【解决方案1】:

将流部署到 ​​Azure AKS 有两个步骤:

  1. 将您的 Kubernetes 代理部署到此集群
  2. 注册您的流程

首先,您需要部署一个 Kubernetes 代理。您可以使用以下方法生成清单文件:

prefect agent kubernetes install --rbac --key YOUR_API_KEY --label YOUR_LABEL > agent.yaml

然后您可以检查该文件,并根据需要对其进行修改(例如,更改图像版本以匹配您所需的 Python 和 Prefect 版本,在需要时添加环境变量等)。

请注意,API 密钥适用于 Prefect Cloud - 您是 Prefect Cloud 还是 Prefect Server 用户?如果你在 Prefect Server 上,你还需要those env variables

清单准备就绪后,您可以将其应用到 AKS 群集:

kubectl apply -f agent.yaml # optionally set: -n yournamespace 

然后,一旦代理运行,您只需在KubernetesRun 上指定标签即可部署您的流程。

请注意,您在不推荐的任务中设置运行配置,这可能是您的问题的原因。您应该将运行配置附加到您的流对象,如下所示:

import prefect
from prefect import task, Flow
from prefect.run_configs import KubernetesRun


@task
def hello_task():
    logger = prefect.context.get("logger")
    logger.info("Hello world!")


with Flow("hello-flow", run_config=KubernetesRun(labels=["YOUR_LABEL"])) as flow:
    hello_task()

if __name__ == "__main__":
    flow.register("YOUR_PROJECT_NAME")

您还可以在 CLI 中注册并摆脱此 "__main__" 块:

prefect register --project YOUR_PROJECT_NAME -p path/to/flow.py

注册流程后,您可以使用以下命令触发 AKS 上的运行:

prefect run --name "hello-flow" --project YOUR_PROJECT_NAME --watch

【讨论】:

  • 谢谢你的回答,我想这就是我要找的。由于我是 Prefect 的新手,因此实施您的步骤需要一段时间 - 我会根据进度为您提供更新!
  • 再次感谢您的回答。最后,我获得了更多的知识,并且可以成功地将 Prefect Flow 部署为 Kubernetes 作业。我在一篇文章中总结了实现 - patrickkoch.dev/posts/post_15 也许它对其他人有用,他们几乎从头开始就 Prefect 就像我几周前所做的那样
  • 这太棒了。非常感谢你的分享。你介意我在 Prefect Slack 社区分享它吗?
  • 很高兴你喜欢它——谢谢!当然,随时分享:)
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2020-12-22
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多