跳到主要内容

调度:Docker

Benjamin 可选用 Docker 进行调度。

备注

使用 Docker 进行调度时,需要 Benjamin 的 API 组件同样运行于 Docker 中;启动的子容器将继承 API Server 的部分环境。

选用 Docker 进行调度

如果需要选用 Docker 进行调度,需要完成如下全局配置

  • scheduler 设置为 SchedulerDocker(也可通过环境变量 BJM_SCHEDULER=docker 进行设置)
  • docker_api_host 设置为子容器访问 API Server 的地址,通常为 container 名称(也可通过环境变量 BJM_DOCKER_API_HOST 进行设置)

为了简化配置信息,建议使用 docker-compose.yml 所给出的配置

使用时

  • 请配置环境变量 IMAGE(例如 10.0.81.34/benjamin/benjamin:stable
  • 请在 docker-compose.yml 的同级目录创建 config.json 写入 Benjamin 的全局配置信息
  • 请创建 /data/log/benjamin 目录来存放 Benjamin 的日志

配置

自定义镜像

使用 Docker 进行调度时,API 与 Manager/Worker 是解耦的,因此可以为 API 层和 Manager/Worker 层分别使用不同的镜像。

警告

虽然 API 与 Manager/Worker 进行解耦,但是涉及到数据库的改动时只有 API 层会执行 Auto Migration,因此使用低版本的 API 配合高版本的 Manager/Worker 存在数据模型不一致的风险。

如需自定义使用的镜像,请在 SchedulerConfig 中配置 override_docker_image 参数。

备注

Benjamin 的 Docker Scheduler 不支持下载镜像,因此请确保传递的镜像已经在 Docker 宿主机进行过 pull。

容器自动删除

使用 Docker 进行调度时,被创建的容器将在退出后自动删除(即 docker run 的 --rm),这会导致如果出现一些极端异常无法获取到日志难以定位问题的情况。

可通过 flag docker-rm=false 来关闭容器的自动删除来定位问题。