注意

本文档适用于 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

    服务的唯一名称。

  • image

    Docker 镜像的名称。

  • 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 秒,否则服务将无法启动。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入