Jupyterhub SwarmSpawner 选择工作节点

问题描述 投票:0回答:2

我设置了一个具有多个工作节点的 docker swarm。
我当前使用 SwarmSpawner 进行的 Jupyterhub 设置工作正常,我能够在生成图像之前根据用户选择的图像部署单用户 docker 图像,在我的

_options_form_default
中使用
jupyterhub_config.py

我现在想要的是让用户能够选择他想要在其上生成单用户 JupyterHub 映像的 swarm 工作节点名称(主机名),因为我们的工作节点具有不同类型的硬件规格(GPU、RAM、处理器等)并且用户提前知道他想要使用的主机的名称。
是否可以确定在其上生成图像的节点?

我当前的集群有 1 个主节点:“master”和 3 个工作节点:“node1”、“node2”、“node3”(这些是它们的主机名,如显示在输出的

HOSTNAME
列中)在主节点上命令
docker node ls
)。

所以我想要的是,正如下图所示,用户可以通过下拉菜单选择他们想要在其上生成 jupyterhub 映像的 swarm 工作节点主机名,并提出如下问题:“选择服务器名字”。

enter image description here

docker jupyter-notebook docker-swarm jupyterhub
2个回答
2
投票

好的,所以我实际上知道了如何做到这一点。
这是我的

jupyterhub_config.py
中的相关部分:

class CustomFormSpawner(SwarmSpawner):

    # Shows frontend form to user for host selection
    # The option values should correspond to the hostnames
    # that appear in the `docker node ls` command output
    def _options_form_default(self):
        return """
        <label for="hostname">Select your desired host</label>
        <select name="hostname" size="1">
            <option value="node1">node1 - GPU: RTX 2070 / CPU: 40</option>
            <option value="node2">node2 - GPU: GTX 1080 / CPU: 32</option>
        </select>
        """

    # Retrieve the selected choice and set the swarm placement constraints
    def options_from_form(self, formdata):
        options = {}
        options['hostname'] = formdata['hostname']
        hostname = ''.join(formdata['hostname'])
        self.extra_placement_spec = { 'constraints' : ['node.hostname==' + hostname] }
        return options

c.JupyterHub.spawner_class = CustomFormSpawner

0
投票

我还想部署 Jupyterhub SwarmSpawner。我的要求和你的类似。可以分享一下你的配置文件吗?

© www.soinside.com 2019 - 2024. All rights reserved.