docker - Jupyterhub SwarmSpawner 选择工作节点
问题描述
我已经设置了一个带有多个工作节点的 docker swarm。
我当前使用 SwarmSpawner 的 Jupyterhub 设置工作正常,我能够在生成图像之前基于用户选择的图像部署单用户 docker 图像,_options_form_default
在我的jupyterhub_config.py
.
我现在想要的是让用户能够选择他想在其上生成他的单用户 JupyterHub 映像的 swarm 工作节点名称(主机名),因为我们的工作节点具有不同类型的硬件规格(GPU、RAM、处理器等)并且用户提前知道他想使用的主机的名称。
是否可以确定生成图像的节点?
例如,我当前的 swarm 有 1 个主节点:“master”和 3 个工作节点:“node1”、“node2”、“node3”(这些是它们的主机名,因为它出现在主节点命令输出的列HOSTNAME
中docker node ls
节点)。
所以我想要的是,如下图所示,用户可以在下拉列表中选择他们想要在其上生成 jupyterhub 图像的 swarm 工作节点主机名,并提出如下问题:“选择服务器名称”。
解决方案
好的,所以我实际上想出了如何做到这一点。
这是我的相关部分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
推荐阅读
- c# - TestMethod 和 DataRow DateTime 参数
- python-3.x - 异步发送/接收客户端
- r - 根据其他数据框值 [R] 从一列数据框更改值
- python - 如何启动可以使用某些 django 功能的守护进程?
- powershell - 如何忽略 Invoke-Webrequest 错误消息
- r - 从每个单元格中具有多个日期的列中提取最新日期
- python - 何时以及如何将 `slice(obj)` 用于非`int`/`None` 类型?
- python - 将“for循环”与python中的列表结合使用
- math - 使用 NLP 技术的单词之间的距离
- php - 使用另一个字段作为值将计算字段添加到每个数组元素