fnndsc/pman是一个Flask应用程序,提供API用于通过各种调度器(如Kubernetes、Podman、Docker Swarm和SLURM)创建作业。它基本上将自身的JSON接口转换为对各种支持的后端的请求。
pman 与_pfcon_紧密耦合。pman 和 pfcon 通常作为一对部署,提供 pfcon 服务。
pman查看其实际运行的最简单方法是运行_miniChRIS-docker_。以下说明适用于_pman_的黑客和开发人员。
本节描述如何设置本地_pman_实例进行开发。
这些说明使用Docker和Docker Swarm在容器内运行_pman_以调度作业。启用代码更改的热重载。
shelldocker swarm init --advertise-addr 127.0.0.1 docker compose up -d
要使用docker stack deploy运行完整测试,请运行测试工具test_swarm.sh。
shell./test_swarm.sh
_pman_必须能够通过与Podman套接字通信来通过Podman调度容器。
shellsystemctl --user start podman.service export DOCKER_HOST="$(podman info --format '{{ .Host.RemoteSocket.Path }}')"
shellpython -m venv venv source venv/bin/activate pip install -r requirements/local.txt pip install -e .
shellpython -m pman
[***]
_pman_通过环境变量进行配置。有关其确切工作方式,请参阅pman/config.py中的源代码。
_pman_依赖_pfcon_在称为"storeBase"的目录中管理数据。"storeBase"是集群中每个节点都可见的存储空间。
对于使用Docker和Podman的单机部署,最佳解决方案是使用由_pfcon_挂载在/var/local/storeBase的本地卷。_pman_应配置为STORAGE_TYPE=docker_local_volume VOLUME_NAME=...。
在Kubernetes上,应使用单个PersistentVolumeClaim。它由_pfcon_挂载在/var/local/storeBase。_pman_应配置为STORAGE_TYPE=kubernetes_pvc VOLUME_NAME=...。
SLURM没有卷的概念,但SLURM集群通常使用在每个节点上相同路径挂载的NFS共享。_pman_应配置为STORAGE_TYPE=host STOREBASE=...,将共享挂载点指定为STOREBASE。
swarm 与 docker 的比较最初,_pman_与Docker Swarm API交互是为了支持多节点集群。然而,_pman_通常在单机上运行。开发环境、单机生产部署的CUBE的"主机"计算资源以及Power9超级计算机上的CUBE生产部署都是这种情况。Swarm模式主要是一种麻烦,其多节点能力测试不足。此外,多节点功能更好地由CONTAINER_ENV=kubernetes提供。
在_pman_ v4.1中,CONTAINER_ENV=docker作为新功能引入并成为默认配置。在此模式下,_pman_使用Docker Engine API而不是Swarm API,这对于单机用例更加方便。
CONTAINER_ENV=docker与Podman兼容。
已知Podman版本3或4可以工作。
配置用户能够设置资源限制。
[***]
| 环境变量 | 描述 |
|---|---|
SECRET_KEY | Flask密钥 |
CONTAINER_ENV | 以下之一: "swarm", "kubernetes", "cromwell", "docker" |
STORAGE_TYPE | 以下之一: "host", "docker_local_volume", "kubernetes_pvc" |
STOREBASE | 作业数据存储位置,当STORAGE_TYPE=host时有效,与VOLUME_NAME冲突 |
VOLUME_NAME | 数据卷名称,当STORAGE_TYPE=docker_local_volume或STORAGE_TYPE=kubernetes_pvc时有效 |
PFCON_SELECTOR | pfcon容器上的标签,可指定让pman自动发现VOLUME_NAME(默认: org.chrisproject.role=pfcon) |
CONTAINER_USER | 以UID:GID格式设置作业容器用户,可以是随机值范围 |
ENABLE_HOME_WORKAROUND | 如果设置为"yes",则设置作业环境变量HOME=/tmp |
SHM_SIZE | /dev/shm的大小(以mebibytes为单位)。(仅在Docker、Podman和Kubernetes中支持。) |
JOB_LABELS | CSV列表的key=value对,应用于容器作业的标签 |
JOB_LOGS_TAIL | (int) 作业日志的最大大小 |
IGNORE_LIMITS | 如果设置为"yes",则不对容器作业设置资源限制(用于不费力地使事情工作) |
REMOVE_JOBS | 如果设置为"no",则pman不会删除作业(用于调试) |
STOREAGE_TYPE=host当STORAGE_TYPE=host时,将STOREBASE指定为主机上的挂载点路径。
STOREAGE_TYPE=docker_local_volume对于单机实例,使用Docker/Podman本地卷作为"storeBase"。卷应在_pman_启动之前存在。可以通过以下两种方式之一识别它:
VOLUME_NAMEorg.chrisproject.role=pfcon的容器,并选择绑定到/var/local/storeBase的挂载点STORAGE_TYPE=kubernetes_pvc当STORAGE_TYPE=kubernetes_pvc时,VOLUME_NAME必须是配置为ReadWriteMany的PersistentVolumeClaim的名称。
在卷仅对特定UNIX用户可写的情况下(例如NFS支持的卷),CONTAINER_USER可用作解决方法。
当CONTAINER_ENV=kubernetes时适用
| 环境变量 | 描述 |
|---|---|
JOB_NAMESPACE | 创建作业的Kubernetes命名空间 |
NODE_SELECTOR | Pod的nodeSelector |
当CONTAINER_ENV=cromwell时适用
| 环境变量 | 描述 |
|---|---|
CROMWELL_URL | Cromwell URL |
TIMELIMIT_MINUTES | SLURM作业时间限制 |
有关其工作原理,请参见[***]
设置任意容器用户(例如CONTAINER_USER=***:***)可提高安全性,但会导致(不安全编写的)_ChRIS_插件失败。在某些情况下,ENABLE_HOME_WORKAROUND=yes可以使插件工作而无需更改其代码。
可以使用随机容器用户CONTAINER_USER=***-2147483647:***-2147483647,但考虑到pfcon的UID永远不会更改,这将导致一切中断。
_pman_的配置多年来变得混乱,因为它试图提供跨截然不同系统的接口。某些选项的混合搭配不受支持:
IGNORE_LIMITS=yes仅适用于CONTAINER_ENV=docker(或podman)。JOB_LABELS=...仅适用于CONTAINER_ENV=docker(或podman)和CONTAINER_ENV=kubernetes。CONTAINER_USER不适用于CONTAINER_ENV=cromwellCONTAINER_ENV=cromwell不转发环境变量。STORAGE_TYPE=host不支持Kubernetes

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务