Dask Kubernetes 操作器
目录
Dask Kubernetes 操作器¶
欢迎来到 Dask Kubernetes 操作器的文档。
注意
如果您正在寻找关于在 Kubernetes 上部署 Dask 的高级文档,新用户应前往Dask 文档中关于 Kubernetes 的页面。
软件包 dask-kubernetes
提供了适用于 Kubernetes 的 Dask 操作器。dask-kubernetes
是部署 Dask 集群的众多选项之一,更多选项的概述请参阅 Dask 文档中的部署 Dask。
快速入门¶
KubeCluster
使用 Kubernetes 自定义资源在 Kubernetes 集群上部署 Dask 集群。它被设计用于动态启动临时部署。
$ # Install operator CRDs and controller, needs to be done once on your Kubernetes cluster
$ helm install --repo https://helm.dask.org --create-namespace -n dask-operator --generate-name dask-kubernetes-operator
$ # Install dask-kubernetes
$ pip install dask-kubernetes
from dask_kubernetes.operator import KubeCluster
cluster = KubeCluster(name="my-dask-cluster", image='ghcr.io/dask/dask:latest')
cluster.scale(10)
什么是操作器?¶
Dask 操作器是一组自定义资源和一个运行在您的 Kubernetes 集群上的控制器,它允许您将 Dask 集群创建和管理为 Kubernetes 资源。可以通过使用 kubectl 的 Kubernetes API 或使用 KubeCluster 的 Python API 来创建集群。
要安装操作器,您需要应用一些自定义资源定义,这些定义允许我们描述 Dask 资源以及操作器本身,操作器是一个小型 Python 应用程序,它监听 Kubernetes API 中与我们的自定义资源相关的事件,并相应地创建 Pods
和 Services
等其他资源。
操作器管理哪些资源?¶
操作器管理着一套资源层次结构,其中包括用于表示集群和工作节点组等 Dask 原语的自定义资源,以及用于运行集群进程和促进通信的 Pod 和 Service 等原生 Kubernetes 资源。
graph TD DaskJob(DaskJob) DaskCluster(DaskCluster) DaskAutoscaler(DaskAutoscaler) SchedulerService(Scheduler Service) SchedulerPod(Scheduler Pod) DaskWorkerGroup(DaskWorkerGroup) WorkerPodA(Worker Pod A) WorkerPodB(Worker Pod B) WorkerPodC(Worker Pod C) JobPod(Job Runner Pod) DaskJob --> DaskCluster DaskJob --> JobPod DaskCluster --> SchedulerService DaskCluster --> DaskAutoscaler SchedulerService --> SchedulerPod DaskCluster --> DaskWorkerGroup DaskWorkerGroup --> WorkerPodA DaskWorkerGroup --> WorkerPodB DaskWorkerGroup --> WorkerPodC classDef dask stroke:#FDA061,stroke-width:4px classDef dashed stroke-dasharray: 5 5 class DaskJob dask class DaskCluster dask class DaskWorkerGroup dask class DaskAutoscaler dask class DaskAutoscaler dashed class SchedulerService dashed class SchedulerPod dashed class WorkerPodA dashed class WorkerPodB dashed class WorkerPodC dashed class JobPod dashed
工作节点组¶
一个 DaskWorkerGroup
表示一组同构的、可扩缩的工作节点。该资源类似于原生 Kubernetes Deployment
,因为它能够智能地管理一组工作节点及其 Pod
生命周期。工作节点组必须附加到一个 Dask Cluster 资源才能工作。
DaskWorkerGroup 资源上的所有 Kubernetes 注解都将传递给工作节点 Pod
资源。由 kopf 或 kubectl 创建的注解(即以“kopf.zalando.org”或“kubectl.kubernetes.io”开头的)将不会传递。
集群¶
DaskCluster
自定义资源通过创建调度器 Pod
、调度器 Service
和默认的 DaskWorkerGroup
来创建一个 Dask 集群,而 DaskWorkerGroup 又会创建工作节点 Pod
资源。
工作节点通过调度器 Service
连接到调度器,并且该 Service 也可以暴露给用户,以便客户端连接并执行任务。
操作器还支持创建额外的工作节点组。这些是具有不同配置设置的额外工作节点组,可以单独扩缩。然后,您可以使用资源注解将不同的任务调度到不同的组。
DaskCluster 资源上的所有Kubernetes 注解 <https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/annotations/> 都将传递给调度器 Pod
和 Service
以及 DaskWorkerGroup
资源。由 kopf 或 kubectl 创建的注解(即以“kopf.zalando.org”或“kubectl.kubernetes.io”开头的)将不会传递。
例如,您可能希望拥有一个更小的、具有更多内存的工作节点池用于内存密集型任务,或者拥有 GPU 用于计算密集型任务。
作业¶
一个 DaskJob
是一种批处理风格的资源,它创建一个 Pod
来执行某个特定的任务从开始到结束,同时会创建一个可用于执行工作的 DaskCluster
。
DaskJob 资源上的所有Kubernetes 注解 <https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/annotations/> 都将传递给 job-runner Pod
资源。如果还想在集群相关资源(调度器和工作节点 Pods
)上设置 Kubernetes 注解,可以在 DaskJob 资源中的 spec.cluster.metadata
中设置。由 kopf 或 kubectl 创建的注解(即以“kopf.zalando.org”或“kubectl.kubernetes.io”开头的)将不会传递。
作业 Pod
运行完成后,集群会自动移除以节省资源。这对于使用 Dask 训练分布式机器学习模型等工作流程非常有用。
自动扩缩器¶
一个 DaskAutoscaler
资源会定期与调度器通信,并将默认的 DaskWorkerGroup
自动扩缩到所需的工作节点数量。
from dask_kubernetes.operator import KubeCluster
cluster = KubeCluster(name="my-dask-cluster", image='ghcr.io/dask/dask:latest')
cluster.adapt(minimum=1, maximum=10)