Kolla 配置

使用 Kayobe 构建镜像的任何人应熟悉 Kolla 项目的文档

容器镜像构建主机

镜像是在 container-image-builders 组中的主机上构建的。默认的 Kayobe Ansible 库存将种子主机放在此组中,尽管可以通过修改库存将不同的主机放在该组中。

例如,要在 localhost 上构建镜像

inventory/groups
[container-image-builders:children]
inventory/hosts
[container-image-builders]
localhost

Kolla 安装

在构建容器镜像之前,Kolla 及其依赖项将安装在容器镜像构建主机上。以下变量会影响 Kolla 的安装

kolla_ctl_install_type

安装类型,可以是 binary (PyPI) 或 source (git)。默认值为 source

kolla_source_path

Kolla 源代码检出目录的路径。默认值为 {{ source_checkout_path ~ '/kolla' }}

kolla_source_url

如果类型为 source,则 Kolla 源代码仓库的 URL。默认值为 https://opendev.org/openstack/kolla

kolla_source_version

如果类型为 source,则 Kolla 源代码仓库的版本(分支、标签等)。默认值为 {{ openstack_branch }},与 Kayobe 上游分支名称相同。

kolla_venv

在容器镜像构建主机上安装 Kolla 的虚拟环境的路径。默认值为 {{ virtualenv_path ~ '/kolla' }}

kolla_build_config_path

生成 kolla 配置的路径。默认值为 {{ config_path ~ '/kolla' }}

例如,要从自定义 Git 仓库安装

kolla.yml
kolla_source_url: https://git.example.com/kolla
kolla_source_version: downstream

全局配置

以下变量是全局变量,会影响所有容器镜像。它们用于生成 Kolla 配置文件 kolla-build.conf,并影响 Kolla Ansible 配置

kolla_base_arch

Kolla 基本容器镜像架构。选项为 x86_64aarch64。默认值为 {{ ansible_facts.architecture }}

kolla_base_distro

Kolla 基本容器镜像发行版。选项为 centosdebianrockyubuntu。默认值为 {{ os_distribution }}

kolla_base_distro_version

Kolla 基本容器镜像发行版版本。默认值取决于 kolla_base_distro

kolla_docker_namespace

用于 Kolla 镜像的 Docker 命名空间。默认值为 kolla

kolla_docker_registry

用于 Kolla 镜像的 Docker 仓库的 URL。默认值是使用 docker_registrypodman_registry 的值,具体取决于 container_engine 的值(请参阅 容器引擎)。

kolla_docker_registry_username

用于访问 Docker 仓库的用户名。默认值未设置,在这种情况下,仓库将未经身份验证使用。

kolla_docker_registry_password

用于访问 Docker 仓库的密码。默认值未设置,在这种情况下,仓库将未经身份验证使用。

kolla_openstack_release

Kolla OpenStack 发布版本。这应该是一个 Docker 镜像标签。默认值是稳定分支和已标记发布版本上的 OpenStack 发布名称(例如 rocky),或者 Kayobe master 分支上的 master

kolla_tag

Kolla 容器镜像标签。这是将应用于构建的容器镜像的标签。默认值为 kolla_openstack_release

例如,要使用命名空间 example 和位于 registry.example.com:4000 的私有 Docker 仓库构建 Kolla rocky 镜像,并使用 zed 发布版

kolla.yml
kolla_base_distro: rocky
kolla_docker_namespace: example
kolla_docker_registry: registry.example.com:4000
kolla_openstack_release: zed

使用此配置构建的 ironic-api 镜像将如下所示:

registry.example.com:4000/example/ironic-api:zed-rocky-9

可以通过编写位于 ${KAYOBE_CONFIG_PATH/kolla/kolla-build.conf 的文件进一步自定义 Kolla 配置文件。例如,要启用调试日志记录

kolla/kolla-build.conf
[DEFAULT]
debug = True

种子镜像

kayobe seed container image build 命令构建种子服务的镜像。种子服务所需的唯一镜像为 bifrost-deploy 镜像。

Overcloud 镜像

kayobe overcloud container image build 命令构建控制平面的镜像。构建的默认镜像集取决于通过 kolla.yml 中的 kolla_enable_<service> 标志启用的哪些服务和功能。

例如,以下配置将启用 Magnum 服务,并将 magnum-apimagnum-conductor 容器添加到将要构建的 overcloud 镜像集中

kolla.yml
kolla_enable_magnum: true

如果设置了相应的标志,但未构建所需的镜像,请检查在 ansible/inventory/group_vars/all/kolla 中的 overcloud_container_image_sets 中定义的镜像集。

镜像自定义

有三种主要方法来自定义 Kolla 容器镜像

  1. 覆盖 Jinja2 块

  2. 覆盖 Jinja2 变量

  3. 源代码位置

覆盖 Jinja2 块

Kolla 的镜像通过生成 Dockerfile 的 Jinja2 模板定义。Jinja2 块经常用于允许替换一个或多个 Dockerfile 中的特定语句。有关详细信息,请参阅 Kolla 文档

块通过 kolla_build_blocks 变量配置,该变量是映射 Jinja2 块名称到其内容的字典。

例如,要覆盖块 header 以向每个镜像添加自定义标签

kolla.yml
kolla_build_blocks:
  header: |
    LABEL foo="bar"

这将导致 Kayobe 生成一个内容如下的 template-override.j2 文件

template-override.j2
{% extends parent_template %}

{% block header %}
LABEL foo="bar"
{% endblock %}

覆盖 Jinja2 变量

Jinja2 变量提供了自定义镜像的另一种方法。有关详细信息,请参阅 Kolla 文档,了解使用变量覆盖来修改镜像中要安装的软件包列表。

变量覆盖通过 kolla_build_customizations 变量配置,该变量是将要覆盖的变量名称映射到其值的字典/映射。

例如,要将 mod_auth_openidc 添加到安装在 keystone-base 镜像中的软件包列表中,我们可以将变量 keystone_base_packages_append 设置为包含 mod_auth_openidc 的列表。

kolla.yml
kolla_build_customizations:
  keystone_base_packages_append:
    - mod_auth_openidc

这将导致 Kayobe 生成一个内容如下的 template-override.j2 文件

template-override.j2
{% extends parent_template %}

{% set keystone_base_packages_append = ["mod_auth_openidc"] %}

请注意,变量值将在 template-override.j2 中以 JSON 编码。

源代码位置

对于 source 镜像构建,可以通过 kolla_sources 变量配置 Kolla 在容器中安装的软件包的源代码位置。格式是将源名称映射到其定义的字典/映射。有关详细信息,请参阅 Kolla 文档。默认值是指定 Bifrost 的 URL 和版本,如在 ${KAYOBE_CONFIG_PATH}/bifrost.yml 中定义的那样。

例如,要为 ironic-base 软件包指定自定义源位置

kolla.yml
kolla_sources:
  bifrost-base:
    type: "git"
    location: "{{ kolla_bifrost_source_url }}"
    reference: "{{ kolla_bifrost_source_version }}"
  ironic-base:
    type: "git"
    location: https://git.example.com/ironic
    reference: downstream

这将导致 Kayobe 将以下配置添加到 kolla-build.conf

kolla-build.conf
[bifrost-base]
type = git
location = https://opendev.org/openstack/bifrost
reference = stable/rocky

[ironic-base]
type = git
location = https://git.example.com/ironic
reference = downstream

请注意,如果使用种子,目前需要包含 Bifrost 源位置。

插件和附加组件

这些功能也可用于在 source 类型镜像中安装 插件附加组件

例如,要在 neutron-server 镜像中安装 networking-ansible 插件

kolla.yml
kolla_sources:
  bifrost-base:
    type: "git"
    location: "{{ kolla_bifrost_source_url }}"
    reference: "{{ kolla_bifrost_source_version }}"
  neutron-server-plugin-networking-ansible:
    type: "git"
    location: https://git.example.com/networking-ansible
    reference: downstream

neutron-server 镜像会自动安装提供给它的任何插件。对于不安装的镜像,可能需要如下块

kolla.yml
kolla_build_blocks:
  neutron_server_footer: |
    ADD plugins-archive /
    pip --no-cache-dir install /plugins/*

可以使用类似的方法进行附加组件。