如何使用 Prefect 在 AKS 上部署 Kubernetes 作业
How to deploy a Kubernetes Job at AKS with Prefect
我是 Prefect 的新手,想使用 Prefect 在 Azure Kubernetes 服务上部署 Kubernetes 作业。
我已经设置了一个 Linux 容器,包括 Prefect、kubectl。我可以建立到 AKS 集群的连接,并且通过使用 kubectl,我可以在 AKS 上部署一个 Kubernetes 作业。
但是它如何与 Prefect 一起使用呢?
在容器中,我存储了 .py 文件和一个定义 Kubernetes 作业的 YAML 文件。
--> 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()
非常感谢您的建议!
将流部署到 Azure AKS 有两个步骤:
- 将您的 Kubernetes 代理部署到此集群
- 注册您的流程
首先,您需要部署一个 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
然后,一旦代理 运行ning,您只需在 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 在 Azure Kubernetes 服务上部署 Kubernetes 作业。 我已经设置了一个 Linux 容器,包括 Prefect、kubectl。我可以建立到 AKS 集群的连接,并且通过使用 kubectl,我可以在 AKS 上部署一个 Kubernetes 作业。 但是它如何与 Prefect 一起使用呢? 在容器中,我存储了 .py 文件和一个定义 Kubernetes 作业的 YAML 文件。
--> 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()
非常感谢您的建议!
将流部署到 Azure AKS 有两个步骤:
- 将您的 Kubernetes 代理部署到此集群
- 注册您的流程
首先,您需要部署一个 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
然后,一旦代理 运行ning,您只需在 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