dask kubernetes aks(azure)虚拟节点

时间:2020-07-20 14:04:26

标签: azure kubernetes dask azure-aks dask-kubernetes

使用下面的代码,可以在天蓝色的aks中创建一个dask kubernetes集群。

它使用远程调度程序(dask.config.set({"kubernetes.scheduler-service-type": "LoadBalancer"})),并且运行良好。

要使用虚拟节点,请取消注释extra_pod_config=virtual_config行(在this official example之后)。

它不起作用,出现以下错误:

ACI does not support providing args without specifying the command. Please supply both command and args to the pod spec.

这与传递containers: args: [dask-scheduler]

有关

我应该提供哪个containers: command: 来解决此问题?

谢谢

import dask
from dask.distributed import Client
from dask_kubernetes import KubeCluster, KubeConfig, make_pod_spec

image = "daskdev/dask"
cluster = "aks-cluster1"
dask.config.set({"kubernetes.scheduler-service-type": "LoadBalancer"})
dask.config.set({"distributed.comm.timeouts.connect": 180})
virtual_config = {
    "nodeSelector": {
        "kubernetes.io/role": "agent",
        "beta.kubernetes.io/os": "linux",
        "type": "virtual-kubelet",
    },
    "tolerations": [
        {"key": "virtual-kubelet.io/provider", "operator": "Exists"},
    ],
}

pod_spec = make_pod_spec(
    image=image,
    # extra_pod_config=virtual_config,
    memory_limit="2G",
    memory_request="2G",
    cpu_limit=1,
    cpu_request=1,
    threads_per_worker=1,  # same as cpu
)

# az aks get-credentials --name aks-cluster1 --resource-group resource_group1
# cp ~/.kube/config ./aksconfig.yaml
auth = KubeConfig(config_file="./aksconfig.yaml", context=cluster,)
cluster = KubeCluster(
    pod_spec, auth=auth, deploy_mode="remote", scheduler_service_wait_timeout=180
)
client = Client(cluster)

1 个答案:

答案 0 :(得分:0)

原因来自此virtual kubelet protection:在pod配置中,dask使用FormArray启动调度程序或工作程序,但未提供args

因此,我明确添加了入口点命令command,它的工作原理是:成功创建了pod。

第二个问题:网络名称解析。工作人员无法通过网络名称command_entrypoint_explicit

连接到调度程序

尽管tcp://{name}.{namespace}:{port}有效。我在tcp://{name}.{namespace}.svc.cluster.local:{port}中进行了编辑,并且可以使用。

另一个选择是dask_kubernetes.core.Scheduler.start波纹管。下面的代码是一个完整的解决方案。

virtual_config