Openstack

OpenStackCluster([region, size, image, ...])

运行在 Openstack 虚拟机实例上的集群

概述

身份验证

使用 OpenStack Identity 服务 (Keystone) 进行身份验证

  1. 获取 OpenStack Identity 服务 (Keystone) 的身份验证 URL (auth_url),并将其配置到 Dask 配置中的 cloudprovider.openstack.auth_url

  2. 获取您的区域 (region),并将其配置到 Dask 配置中的 cloudprovider.openstack.region
    $ openstack region list
    +-----------+---------------+-------------+
    | Region    | Parent Region | Description |
    +-----------+---------------+-------------+
    | RegionOne | None          |             |
    +-----------+---------------+-------------+
    
  3. 生成应用程序凭据 (application credential)

    $ openstack application credential create dask --unrestricted
    +--------------+----------------------------------------------------------------------------------------+
    | Field        | Value                                                                                  |
    +--------------+----------------------------------------------------------------------------------------+
    | description  | None                                                                                   |
    | expires_at   | None                                                                                   |
    | id           | 0a0372dbedfb4e82ab66449c3316ef1e                                                       |
    | name         | dask                                                                             |
    | project_id   | e99b6f4b9bf84a9da27e20c9cbfe887a                                                       |
    | roles        | Member anotherrole                                                                     |
    | secret       | ArOy6DYcLeLTRlTmfvF1TH1QmRzYbmD91cbVPOHL3ckyRaLXlaq5pTGJqvCvqg6leEvTI1SQeX3QK-3iwmdPxg |
    | unrestricted | True                                                                                   |
    +--------------+----------------------------------------------------------------------------------------+
    

    并将 application_credential_idapplication_credential_secret 配置到 Dask 配置中的 cloudprovider.openstack.application_credential_idcloudprovider.openstack.application_credential_secret

所有这些变量都可以从OpenStack RC 文件clouds.yaml 文件中获取。

示例配置文件

# ~/.config/dask/cloudprovider.yaml

 cloudprovider:
   openstack:
     region: "RegionOne"
     auth_url: "https://cloud.home.karatosun.xyz:5000"
     application_credential_id: "0a0372dbedfb4e82ab66449c3316ef1e"
     application_credential_secret: "ArOy6DYcLeLTRlTmfvF1TH1QmRzYbmD91cbVPOHL3ckyRaLXlaq5pTGJqvCvqg6leEvTI1SQeX3QK-3iwmdPxg"
     auth_type: "v3applicationcredential"

您也可以将它们导出为环境变量。

$ export DASK_CLOUDPROVIDER__APPLICATION_CREDENTIAL_ID="0a0372dbedfb4e82ab66449c3316ef1e"
class dask_cloudprovider.openstack.OpenStackCluster(region: str = None, size: str = None, image: str = None, docker_image: str = None, debug: bool = False, bootstrap: bool = True, **kwargs)[source]

运行在 Openstack 虚拟机实例上的集群

这个集群管理器构建了一个运行在通用 Openstack 云上的 Dask 集群

配置集群时,您可能会发现安装 'python-openstackclient' 客户端对于查询 Openstack API 以获取可用选项很有用。

https://github.com/openstack/python-openstackclient

参数
region: str

OpenStack 中分配资源的区域名称。通常设置为 'default',除非在您的云配置中指定。

使用以下命令列出可用区域:openstack region list

auth_url: str

OpenStack Identity 服务 (Keystone) 的身份验证 URL。示例:https://cloud.example.com:5000

application_credential_id: str

在 OpenStack 中创建的应用程序凭据 ID。

使用以下命令创建应用程序凭据:openstack application credential create

application_credential_secret: str

与用于身份验证的应用程序凭据 ID 相关联的密钥。

auth_type: str

使用的身份验证类型,对于使用 OpenStack 应用程序凭据,通常为 "v3applicationcredential"。

network_id: str

OpenStack 中用于连接集群虚拟机的内部/私有网络的唯一标识符。

使用以下命令列出可用网络:openstack network list

image: str

用于虚拟机的操作系统镜像名称或 ID。Dask Cloudprovider 将自动引导基于 Ubuntu 的镜像。其他镜像需要 Docker,对于 GPU,则需要 NVIDIA Drivers 和 NVIDIA Docker。

使用以下命令列出可用镜像:openstack image list

keypair_name: str

用于实例访问的 SSH 密钥对的名称。请确保您已创建密钥对或使用现有密钥对。

使用以下命令列出可用密钥对:openstack keypair list

security_group: str

定义实例防火墙规则的安全组名称。

默认值为 default。请确保配置了以下访问规则:
  • egress 0.0.0.0/0 在所有端口上,用于下载 docker 镜像和通用数据访问

  • ingress <internal-cidr>/8 在所有端口上,用于 worker 的内部通信

  • ingress 0.0.0.0/0 在 8786-8787 端口上,用于 dashboard/scheduler 的外部访问

  • (可选) ingress 0.0.0.0./0 在 22 端口上,用于 ssh 访问

使用以下命令列出可用安全组:openstack security group list

create_floating_ip: bool

指定是否为每个实例分配浮动 IP,以启用外部访问。如果需要外部连接,请设置为 True

external_network_id: str

用于分配浮动 IP 的外部网络的 ID。

使用以下命令列出可用外部网络:openstack network list –external

n_workers: int (可选)

初始化集群时的 worker 数量。默认为 0

worker_module: str

worker 运行的 Python 模块。默认为 distributed.cli.dask_worker

worker_options: dict

传递给 worker 类的参数。请参阅 distributed.worker.Worker 以了解默认的 worker 类。如果您设置了 worker_module,请参考自定义 worker 类的文档字符串。

scheduler_options: dict

传递给 scheduler 类的参数。请参阅 distributed.scheduler.Scheduler

env_vars: dict

传递给 worker 的环境变量。

extra_bootstrap: list[str] (可选)

在引导阶段运行的额外命令。

docker_image: string (可选)

在所有实例上运行的 Docker 镜像。

该镜像必须具有有效的 Python 环境并安装了 dask,以便 dask-schedulerdask-worker 命令可用。建议 Python 环境与创建 OpenStackCluster 的本地环境匹配。

对于 GPU 实例类型,Docker 镜像必须安装 NVIDIA 驱动程序和 dask-cuda

默认情况下将使用 daskdev/dask:latest 镜像。

属性
asynchronous

我们是否在事件循环中运行?

auto_shutdown
bootstrap
called_from_running_loop
command
dashboard_link
docker_image
gpu_instance
loop
name
observed
plan
requested
scheduler_address
scheduler_class
worker_class

方法

adapt([Adaptive, minimum, maximum, ...])

开启自适应

call_async(f, *args, **kwargs)

在线程中将阻塞函数作为协程运行。

from_name(name)

创建此类的实例以按名称表示现有集群。

get_client()

返回集群的客户端

get_logs([cluster, scheduler, workers])

返回集群、scheduler 和 worker 的日志

get_tags()

生成应用于所有资源的标签。

new_worker_spec()

返回下一个 worker 的名称和规格

scale([n, memory, cores])

将集群扩展到 n 个 worker

scale_up([n, memory, cores])

将集群扩展到 n 个 worker

sync(func, *args[, asynchronous, ...])

根据调用上下文同步或异步调用 funcargs

wait_for_workers(n_workers[, timeout])

阻塞调用,等待 n 个 worker 准备就绪后继续

close

get_cloud_init

logs

render_cloud_init

render_process_cloud_init

scale_down