Kolla Images API

Kolla 提供了两种不同的方法来在运行时修改容器。第一种是通过暴露给容器的 配置文件,并由初始化脚本处理;第二种是通过更传统的 环境变量

外部配置

所有的 Kolla 镜像都理解一个 JSON 格式的配置,它描述了一组容器在执行(可能)长时间运行的进程之前需要执行的操作。 此配置还指定了运行服务要执行的命令。

当容器运行 kolla_start,默认的入口点时,它会使用 kolla_set_configs 以提升的权限处理配置文件,这意味着它能够设置文件所有权和权限。

配置文件的格式

kolla_set_configs 脚本理解以下属性

  • command (必需): 容器在完成初始化步骤后运行的命令。

  • config_files: 将文件和目录复制到容器内部。 字典列表,每个字典包含以下属性

    • source (必需): 需要复制的文件或目录的路径。 理解 shell 通配符。

    • dest (必需): 文件或目录将被复制到的路径。 不需要存在,如果目标存在则会被删除。

    • owner (必需,除非 preserve_properties 设置为 true): 要更改所有权的用户:组。 useruser:user 同义。 必须是用户名和组名,而不是 uid/gid。

    • perm (必需,除非 preserve_properties 设置为 true): 要设置为目标文件和目录的 unix 权限。 必须以数字八进制形式传递。

    • preserve_properties: 复制原始文件和目录的所有权和权限。 布尔值,默认为 false

    • optional: 如果文件系统上不存在源文件,则不引发错误。 布尔值,默认为 false

    • merge: 将源目录合并到目标目录,而不是替换它。 布尔值,默认为 false

  • permissions: 更改容器内文件或目录的权限和/或所有权。 字典列表,每个字典包含以下属性

    • path (必需): 要更新的文件或目录的路径。

    • owner (必需): 要更改所有权的用户:组。 useruser:user 同义。 必须是用户名和组名,而不是 uid/gid。

    • perm: 要设置为目标文件和目录的 unix 权限。 必须以数字八进制形式传递。

    • recurse: 是否递归地将更改应用于目标目录。 布尔值,默认为 false

    • exclude: 当 recurse 设置为 true 时要排除的目录或文件名称的数组。 支持 Python 正则表达式。 默认为空数组。

这是一个示例配置文件

{
    "command": "trove-api --config-file=/etc/trove/trove.conf",
    "config_files": [
        {
            "source": "/var/lib/kolla/config_files/trove.conf",
            "dest": "/etc/trove/trove.conf",
            "owner": "trove",
            "perm": "0600",
            "optional": false
        }
    ],
    "permissions": [
        {
            "path": "/var/log/kolla/trove",
            "owner": "trove:trove",
            "recurse": true,
            "exclude": ["/var/log/^snapshot.*"]
        }
    ]
}

将配置文件传递给容器

可以通过专用路径将配置传递给容器:/var/lib/kolla/config_files/config.json。 建议出于安全原因将此路径挂载为只读。

在容器中挂载配置文件

docker run -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS \
    -v /path/to/config.json:/var/lib/kolla/config_files/config.json:ro \
    kolla-image

环境变量

要传递给容器的变量

Kolla 容器还理解一些环境变量,以更改其在运行时时的行为

  • KOLLA_CONFIG_STRATEGY (必需): 定义 kolla_start 脚本 如何复制配置文件。 必须是以下之一

    • COPY_ONCE: 配置文件只复制一次,即容器第一次启动时。 在这种情况下,容器是完全不可变的。

    • COPY_ALWAYS: 配置文件每次容器启动时都会复制。 如果主机上的配置文件发生更改,则更改将在下次容器重新启动时应用。

  • KOLLA_SKIP_EXTEND_START: 如果设置,则绕过 extend_start.sh 脚本。 默认情况下未设置。

  • KOLLA_SERVICE_NAME: 如果设置,则在容器内的 PS1 中显示变量的值。 默认情况下未设置。

  • KOLLA_BOOTSTRAP: 如果设置,并且镜像支持,则运行镜像 extend_start.sh 脚本中定义的 bootstrap 代码。 默认情况下未设置。

  • KOLLA_UPGRADE: 如果设置,并且镜像支持,则运行镜像 extend_start.sh 脚本中定义的升级代码。 默认情况下未设置。

  • KOLLA_UPGRADE_CHECK: 如果设置,并且镜像支持,则运行 <service>-status upgrade check 命令,该命令在镜像的 extend_start.sh 脚本中定义。 当前,它被硬编码为仅 nova-status upgrade check。 默认情况下未设置。

  • KOLLA_OSM: 如果设置,并且镜像支持,则运行镜像 extend_start.sh 脚本中定义的在线数据库迁移代码。 默认情况下未设置。

容器可能会公开其他环境变量以启用或禁用功能,例如 horizon 容器,它查找 ENABLE_XXX 变量,其中 XXX 是 horizon 插件名称。 这些通常在特定于容器的 extend_start.sh 脚本中定义,例如 horizon

容器中可用的变量

以下变量在所有镜像中可用,并且可以在脚本中评估

  • KOLLA_BASE_DISTRO: 用于构建镜像的 base_distro(例如 centos、ubuntu)