注意
本文档适用于 Ceph 的开发版本。
自定义容器服务
编排器允许使用 YAML 文件部署自定义容器。相应的 服务规范 必须如下所示:
service_type: container
service_id: foo
placement:
...
spec:
image: docker.io/library/foo:latest
entrypoint: /usr/bin/foo
uid: 1000
gid: 1000
args:
- "--net=host"
- "--cpus=2"
ports:
- 8080
- 8443
envs:
- SECRET=mypassword
- PORT=8080
- PUID=1000
- PGID=1000
volume_mounts:
CONFIG_DIR: /etc/foo
bind_mounts:
- ['type=bind', 'source=lib/modules', 'destination=/lib/modules', 'ro=true']
dirs:
- CONFIG_DIR
files:
CONFIG_DIR/foo.conf:
- refresh=true
- username=xyz
- "port: 1234"
其中服务规范的属性包括:
service_id服务的唯一名称。
imageDocker 镜像的名称。
uid在主机系统中创建目录和文件时使用的 UID。
gid在主机系统中创建目录和文件时使用的 GID。
entrypoint覆盖镜像的默认 ENTRYPOINT。
args额外的 Podman/Docker 命令行参数列表。
ports要在主机防火墙中打开的 TCP 端口列表。
envs环境变量列表。
bind_mounts使用绑定挂载时,主机上的文件或目录将挂载到容器中。相对 source=… 路径将位于 /var/lib/ceph/<cluster-fsid>/<daemon-name> 下。
volume_mounts使用卷挂载时,将在主机上 Docker 的存储目录中创建一个新目录,并且 Docker 管理该目录的内容。相对源路径将位于 /var/lib/ceph/<cluster-fsid>/<daemon-name> 下。
dirs在 /var/lib/ceph/<cluster-fsid>/<daemon-name> 下创建的目录列表。
files一个字典,其中键是文件的相对路径,值是文件内容。使用字符串时,内容必须用双引号括起来。在这种情况下,使用“\n”表示换行符。否则,将多行内容定义为字符串列表。给定的文件将在目录 /var/lib/ceph/<cluster-fsid>/<daemon-name> 下创建。将创建文件的目录的绝对路径必须存在。如有必要,使用 dirs 属性创建它们。
init_containers“init container”(初始化容器)定义列表。初始化容器在主容器启动之前运行准备步骤。初始化容器是可选的。可以定义一个或多个容器。每个定义可以包含以下字段:
image容器镜像的名称。如果未指定,初始化容器将继承顶层规范中的 image 值。
entrypoint自定义镜像的默认入口点。
entrypoint_args将传递给入口点的参数。行为与通用
extra_entrypoint_args字段相同。
volume_mounts与自定义容器规范的
volume_mounts相同 - 选择哪些卷将挂载到初始化容器中。如果未指定,初始化容器将继承主容器的值。
envs环境变量列表。
privileged一个布尔值,指示容器是否应以特权模式运行。如果未指定,初始化容器将继承主容器的值。
包含初始化容器的示例
service_type: container
service_id: foo
placement:
...
spec:
image: quay.io/example/foosystem:latest
entrypoint: /usr/bin/foo
uid: 1000
gid: 1000
ports:
- 8889
dirs:
- CONFIG_DIR
- DATA_DIR
volume_mounts:
CONFIG_DIR: /etc/foo
DATA_DIR: /var/lib/foo
files:
CONFIG_DIR/foo.conf:
- db_path=/var/lib/foo/db
init_containers:
- image: quay.io/example/curly:howard
entrypoint: bash
entrypoint_args:
- argument: "-c"
- argument: "[ -f /var/lib/foo/db ] || curl -o /var/lib/foo/sample.dat https://foo.example.com/samples/1.dat"
volume_mounts:
DATA_DIR: /var/lib/foo
- entrypoint: /usr/bin/foo-initialize-db
entrypoint_args:
- "--option=threads=8"
- entrypoint: /usr/local/bin/import-sample-datasets.sh
entrypoint_args:
- "/var/lib/foo/sample.dat"
envs:
- FOO_SOURCE_MISSING=ignore
- FOO_CLEANUP=yes
注意
初始化容器目前作为服务启动前运行的一个步骤实现,并受启动超时限制。所有初始化容器的总运行时间不能超过 200 秒,否则服务将无法启动。