注意

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

    一个“初始化容器”定义的列表。初始化容器用于在主容器启动之前运行准备工作。初始化容器是可选的。可以定义一个或多个容器。

    • image

      容器镜像的名称。如果未指定,初始化容器将继承顶级 spec 的镜像值。

    • entrypoint

      自定义镜像的默认入口点。

    • entrypoint_args

      将传递给入口点的参数。行为与通用extra_entrypoint_argsfield.

    • volume_mounts

      与自定义容器 spec 的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

Note

初始化容器目前实现为在服务启动之前运行的步骤,并且受启动超时的影响。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.