主机配置

本节涵盖主机的配置。它不涵盖容器的配置或部署。Kayobe 配置的主机包括

  • Seed 超visor (kayobe seed hypervisor host configure)

  • Seed (kayobe seed host configure)

  • Infra 虚拟机 (kayobe infra vm host configure)

  • Overcloud (kayobe overcloud host configure)

除非另有说明,此处描述的所有主机配置都应用于这些类型的每种主机。

参见

用于限制 Kayobe 命令范围的 Ansible 标签包含在本页的相关部分下(有关更多信息,请参阅 标签)。

配置位置

一些主机配置选项通过全局变量设置,而另一些则为每种主机类型设置一个变量。 后者变量包含在 ${KAYOBE_CONFIG_PATH} 下面的文件中

  • seed-hypervisor.yml

  • seed.yml

  • compute.yml

  • controller.yml

  • infra-vms.yml

  • monitoring.yml

  • storage.yml

请注意,可以通过使用 inventory 主机或组变量来按主机或按组设置任何变量 - 这些划分是为了方便起见。

路径

Kayobe 在远程主机上使用几个目录。 在 ${KAYOBE_CONFIG_PATH}/globals.yml 中的变量层次结构可用于控制这些路径的位置。

  • base_path(默认 /opt/kayobe/)设置各种目录的默认基本路径。

  • config_path(默认 {{ base_path }}/etc)是存储配置文件的一个路径。

  • image_cache_path(默认 {{ base_path }}/images)是缓存下载或构建的镜像的一个路径。

  • source_checkout_path(默认 {{ base_path }}/src)是存储源代码仓库克隆的一个路径。

  • virtualenv_path(默认 {{ base_path }}/venvs)是创建 Python 虚拟环境的一个路径。

SSH Known Hosts

tags
ssh-known-host

严格来说,此配置应用于 Ansible 控制主机 (localhost),但它在 host configure 命令期间应用。 每个主机的 ansible_host 都被添加为 SSH known host。 这通常是主机在管理网络 (admin_oc_net_name) 上的 IP 地址,如在 ${KAYOBE_CONFIG_PATH}/network-allocation.yml 中定义(请参阅 IP 地址分配)。

Kayobe 用户引导

tags
kayobe-ansible-user

Kayobe 使用由 kayobe_ansible_user 变量(在 ${KAYOBE_CONFIG_PATH}/globals.yml 中)定义的用于远程 SSH 访问的用户帐户。 默认情况下,此值为 stack

通常,用于配置这些主机使用的镜像将不包含此用户帐户,因此 Kayobe 执行一个引导步骤来创建它,作为不同的用户。 在云镜像中,通常有一个以操作系统发行版命名的用户,例如 rockyubuntu。 此用户默认为 os_distribution 变量,但 CentOS 除外,CentOS 使用 cloud-user,但可以通过以下变量设置

  • seed_hypervisor_bootstrap_user

  • seed_bootstrap_user

  • infra_vm_bootstrap_user

  • compute_bootstrap_user

  • controller_bootstrap_user

  • monitoring_bootstrap_user

  • storage_bootstrap_user

例如,要将控制器的引导用户设置为 example-user

controllers.yml
controller_bootstrap_user: example-user

PyPI 镜像和代理

tags
pip

Kayobe 支持通过 ${KAYOBE_CONFIG_PATH}/pip.yml 中的变量配置 PyPI 镜像和/或代理。 通过将 pip_local_mirror 变量设置为 true 来启用镜像功能,并通过将 pip_proxy 变量设置为代理 URL 来启用代理功能。

Kayobe 将为以下内容生成配置

  • pip 以使用镜像和代理

  • easy_install 以使用镜像

对于由 pip_applicable_users(默认 kayobe_ansible_userroot)定义的用户的列表,以及用于 Kolla Ansible (kolla_ansible_user) 的用户。 镜像 URL 通过 pip_index_url 配置,并且 pip_trusted_hosts 是一个“受信任”主机列表,SSL 验证将被禁用。

例如,要配置使用测试 PyPI 镜像 https://test.pypi.org/simple/

pip.yml
pip_local_mirror: true
pip_index_url: https://test.pypi.org/simple/

要配置使用 PyPI 代理

pip.yml
pip_proxy: http://your_proxy_server:3128

Kayobe 远程虚拟环境

tags
kayobe-target-venv

默认情况下,Ansible 使用系统 python 解释器执行远程模块,即使 Ansible 控制过程是从虚拟环境内部执行的(除非使用 local 连接插件)。 如果必须与系统 python 包隔离安装 python 依赖项,则这不是理想的选择。 可以通过将主机变量 ansible_python_interpreter 设置为指向现有虚拟环境中的 python 解释器的路径来配置 Ansible 以使用虚拟环境。

如果 kayobe 检测到已设置 ansible_python_interpreter 并且引用了虚拟环境,则如果该虚拟环境不存在,它将创建该虚拟环境。 通常,此变量应通过 inventory 中 seedseed-hypervisor 和/或 overcloud 组的组变量进行设置。

kayobe-config 仓库中的默认 Kayobe 配置将 ansible_python_interpreter 设置为 {{ virtualenv_path }}/kayobe/bin/python,用于 seedseed-hypervisorovercloud 组。

磁盘擦除

tags
wipe-disks

使用可能在其磁盘上存在过时数据的 host 可能会影响云的部署。 这不是一个配置选项,因为它应该只执行一次以避免丢失有用的数据。 它通过将 --wipe-disks 参数传递给 host configure 命令来触发。

用户和组

tags
users

可以使用 ${KAYOBE_CONFIG_PATH}/users.yml 中的 users_default 变量配置 Linux 用户帐户和组。 列表的格式与 singleplatform-eng.users role 的 users 变量使用的格式相同。 可以使用以下变量为特定类型的主机设置用户

  • seed_hypervisor_users

  • seed_users

  • infra_vm_users

  • compute_users

  • controller_users

  • monitoring_users

  • storage_users

在下面的示例中,创建了一个名为 bob 的单个用户。 密码哈希是通过 mkpasswd --method=sha-512 生成的。 该用户被添加到 wheel 组,并授权了一个 SSH 密钥。 SSH 公钥应添加到 Kayobe 配置中。

users.yml
users_default:
 - username: bob
   name: Bob
   password: "$6$wJt9MLWrHlWN8$oXJHbdaslm9guD5EC3Dry1mphuqF9NPeQ43OXk3cXZa2ze/F9FOTxm2KvvDkbdxBDs7ouwdiLTUJ1Ff40.cFU."
   groups:
     - wheel
   append: True
   ssh_key:
     - "{{ lookup('file', kayobe_config_path ~ '/ssh-keys/id_rsa_bob.pub') }}"

DNF 包仓库

tags
dnf

在 CentOS 和 Rocky 上,Kayobe 支持通过 DNF 配置软件包仓库,通过 ${KAYOBE_CONFIG_PATH}/dnf.yml 中的变量进行配置。

DNF 配置文件的配置

DNF 的全局配置存储在 /etc/dnf/dnf.conf 中,可以通过 dnf_config 变量设置选项。 选项被添加到文件的 [main] 部分。 例如,要配置 DNF 使用代理服务器

dnf.yml
dnf_config:
  proxy: https://proxy.example.com

CentOS/Rocky 和 EPEL 镜像

可以通过将 dnf_use_local_mirror 设置为 true 来启用 CentOS/Rocky 和 EPEL 镜像。 CentOS 仓库镜像通过以下变量配置

  • dnf_centos_mirror_host(默认 mirror.centos.org)是镜像主机名。

  • dnf_centos_mirror_directory(默认 centos)是镜像上可以访问仓库的目录。

Rocky 仓库镜像通过以下变量配置

  • dnf_rocky_mirror_host(默认 dl.rockylinux.org)是镜像主机名

  • dnf_rocky_mirror_directory(默认 pub/rocky)是镜像上可以访问仓库的目录。

EPEL 仓库镜像通过以下变量配置

  • dnf_epel_mirror_host(默认 download.fedoraproject.org)是镜像主机名。

  • dnf_epel_mirror_directory(默认 pub/epel)是镜像上可以访问仓库的目录。

例如,要在 mirror.example.com 上配置 CentOS 和 EPEL 镜像

dnf.yml
dnf_use_local_mirror: true
dnf_centos_mirror_host: mirror.example.com
dnf_epel_mirror_host: mirror.example.com

自定义 DNF 仓库

还可以通过 dnf_custom_repos 变量配置自定义 DNF 仓库列表。 格式是字典/映射,仓库名称映射到要传递给 Ansible yum_repository 模块的参数的字典/映射。

例如,以下配置定义了一个名为 widgets 的单个 DNF 仓库。

dnf.yml
dnf_custom_repos:
  widgets:
    baseurl: http://example.com/repo
    file: widgets
    gpgkey: http://example.com/gpgkey
    gpgcheck: yes

启用或禁用 EPEL

在 Yoga 版本之前,EPEL DNF 仓库默认启用 (dnf_install_epel: true)。 自 Yoga 以来,默认禁用 (dnf_install_epel: false)。

以前,EPEL 需要安装一些软件包,例如 python-pip,但现在不再需要了。

可以通过将 dnf_install_epel 设置为 truefalse 来启用或禁用 EPEL DNF 仓库。

DNF 自动

DNF Automatic 提供了一种应用软件包定期更新的机制。DNF Automatic 默认情况下是禁用的,可以通过将 dnf_automatic_enabled 设置为 true 来启用。

dnf.yml
dnf_automatic_enabled:  true

默认情况下,仅应用安全更新。可以通过将 dnf_automatic_upgrade_type 设置为 default 来安装所有软件包的更新。这可能会导致系统可预测性降低,因为软件包在没有监督或测试的情况下被更新。

Apt

tags
apt

在 Ubuntu 上,Apt 用于管理软件包和软件包仓库。

Apt 缓存

Apt 缓存超时可以通过在 etc/kayobe/apt.yml 中的 apt_cache_valid_time(以秒为单位)进行配置,默认值为 3600。

Apt 代理

可以通过在 etc/kayobe/apt.yml 中的 apt_proxy_httpapt_proxy_https 配置 Apt 使用代理。这些应该设置为相关代理的完整 URL(例如 http://squid.example.com:3128)。

Apt 配置

自 Yoga 版本以来,可以通过在 etc/kayobe/apt.yml 中的 apt_config 变量定义任意全局 Apt 配置选项。格式是一个列表,每个条目映射到一个包含以下项目的字典/映射

  • content:自由格式的配置文件内容

  • filename:在 /etc/apt/apt.conf.d/ 中写入配置的文件名

apt_config 的默认值是一个空列表。

例如,以下配置告诉 Apt 在下载软件包时使用 2 次尝试

apt.yml
apt_config:
  - content: |
      Acquire::Retries 1;
    filename: 99retries

Apt 仓库

自 Yoga 版本以来,Kayobe 支持通过在 etc/kayobe/apt.yml 中的 apt_repositories 变量配置自定义 Apt 仓库。格式是一个列表,每个条目映射到一个包含以下项目的字典/映射

  • name<name>.sources 文件名部分。可选。默认值为 kayobe,默认文件名是 kayobe.sources

  • types:以空格分隔的仓库类型列表,例如 debdeb-src(可选,默认值为 deb

  • url:仓库的 URL

  • suites:以空格分隔的 suites 列表,例如 noble(可选,默认值为 ansible_facts.distribution_release

  • components:以空格分隔的 components 列表,例如 main(可选,默认值为 main

  • signed_by:以空格分隔的 GPG 密钥文件名列表,位于 apt_keys_path 中(可选,默认值未设置)

  • architecture:将使用的架构的空格分隔列表(可选,默认值未设置)

  • trusted:布尔值(可选,默认值未设置)

apt_repositories 的默认值是一个空列表。

例如,以下配置定义了一个 Apt 仓库

apt.yml
apt_repositories:
  - types: deb
    url: https://example.com/repo
    suites: noble
    components: all

在以下示例中,从本地软件包镜像获取 Ubuntu Noble 24.04 仓库。将 apt_disable_sources_list 变量设置为 true,这将禁用 /etc/apt/sources.list 中的所有仓库,包括默认的 Ubuntu 仓库。

apt.yml
apt_repositories:
  - url: http://mirror.example.com/ubuntu/
    suites: noble noble-updates
    components: main restricted universe multiverse
  - url: http://mirror.example.com/ubuntu/
    suites: noble-security
    components: main restricted universe multiverse

apt_disable_sources_list: true

Apt 密钥

某些仓库可能由一个不是 Apt 可信密钥的密钥签名。Kayobe 避免使用已弃用的 apt-key 工具,而是允许将密钥下载到目录。这使得仓库可以使用 SignedBy 选项来声明它们是由特定密钥签名的。这种方法比使用全局可信密钥更安全。

要下载的密钥由 apt_keys 变量定义。格式是一个列表,每个条目映射到一个包含以下项目的字典/映射

  • url:密钥的 URL

  • filename:在 apt_keys_path 中存储下载的密钥的文件名。扩展名应为 ASCII 装甲密钥的 .asc,否则为 .gpg

apt_keys 的默认值是一个空列表。

在以下示例中,下载了一个密钥,并配置了一个由该密钥签名的仓库。

apt.yml
apt_keys:
  - url: https://example.com/GPG-key
    filename: example-key.asc

apt_repositories:
  - types: deb
    url: https://example.com/repo
    suites: noble
    components: all
    signed_by: example-key.asc

Apt 首选项

可以通过在 etc/kayobe/apt.yml 中的 apt_preferences 变量定义任意全局 Apt 首选项选项。格式是一个列表,每个条目映射到一个包含以下项目的字典/映射

  • content:自由格式的首选项文件内容

  • filename:在 /etc/apt/preferences.d/ 中写入配置的文件名

apt_preferences 的默认值是一个空列表。

例如,以下配置告诉 Apt 仅固定来自自定义仓库的特定软件包,同时防止从那里安装任何其他软件包

apt.yml
apt_preferences:
  - content: |
      Package: *
      Pin: origin your.custom.repo
      Pin-Priority: 1

      Package: specific-package
      Pin: origin your.custom.repo
      Pin-Priority: 500
    filename: 99-pin-custom-repo

Apt 身份验证配置

某些仓库可能需要使用 HTTP 基本身份验证进行身份验证。Apt 支持在 sources.list 文件中 URL 中指定凭据,但这些文件必须是世界可读的。更安全的设置是将凭据写入 auth.conf 文件,这些文件可以具有更严格的权限。

身份验证配置由 apt_auth 变量定义。格式是一个列表,每个条目映射到一个包含以下项目的字典/映射

  • machine:auth 文件中的 machine 条目

  • login:auth 文件中的 machine 条目

  • password:auth 文件中的 machine 条目

  • filename:在 /etc/apt/auth.conf.d 中存储身份验证配置的文件名。扩展名应为 .conf

apt_auth 的默认值是一个空列表。

在以下示例中,为 apt.example.com 上的软件包仓库提供凭据。

apt.yml
apt_auth:
  - machine: apt.example.com
    login: my-username
    password: my-password
    filename: example.conf

开发工具

tags
dev-tools

可以配置开发工具(其他操作系统软件包)在主机上安装。默认情况下,开发工具安装在所有 seed-hypervisorseedovercloudinfra-vms 主机上。

可以使用以下变量来设置要安装的软件包

  • dev_tools_packages_default:默认安装的软件包列表。(默认值:bash-completiontcpdumpvim

  • dev_tools_packages_extra:与默认软件包一起安装的额外软件包列表。(默认值是一个空列表)

在以下示例中,修改了在所有主机上安装的默认软件包列表,以将 vim 替换为 emacs。将 bridge-utils 软件包添加到所有 overcloud 主机

dev-tools.yml
dev_tools_packages_default:
  - bash-completion
  - emacs
  - tcpdump
inventory/group_vars/overcloud/dev-tools
dev_tools_packages_extra:
  - bridge-utils

SELinux

tags
selinux

注意

SELinux 仅适用于 CentOS 和 Rocky 系统。

目前 Kolla Ansible 不支持 SELinux,因此 Kayobe 将其设置为 permissive。如果需要,可以通过将 selinux_state 设置为 disabled 来配置禁用它。Kayobe 将在需要时重新启动系统以进行 SELinux 配置。等待系统重新启动的超时时间是 selinux_reboot_timeout。或者,可以通过将 selinux_do_reboot 设置为 false 来避免重新启动。

可以使用 selinux_update_kernel_param 变量更改在内核命令行上设置的 selinux 状态;它接受一个布尔值。

网络配置

tags
network

有关主机网络配置的详细信息,请参阅 网络配置

Firewalld

tags
firewall

Firewalld 可用于在受支持的系统上提供防火墙。自 Xena 版本以来,Kayobe 提供了支持启用或禁用 firewalld,以及定义区域和规则。自 Zed 13.0.0 版本以来,Kayobe 添加了在 Ubuntu 系统上配置 firewalld 的支持。

可以使用以下变量来设置是否启用 firewalld

  • seed_hypervisor_firewalld_enabled

  • seed_firewalld_enabled

  • infra_vm_firewalld_enabled

  • compute_firewalld_enabled

  • controller_firewalld_enabled

  • monitoring_firewalld_enabled

  • storage_firewalld_enabled

启用 firewalld 时,可以使用以下变量来配置要创建的区域列表。每个条目都是一个包含 zone 项目的字典

  • seed_hypervisor_firewalld_zones

  • seed_firewalld_zones

  • infra_vm_firewalld_zones

  • compute_firewalld_zones

  • controller_firewalld_zones

  • monitoring_firewalld_zones

  • storage_firewalld_zones

可以使用以下变量来设置默认区域。默认值为未设置,在这种情况下,默认区域将不会更改

  • seed_hypervisor_firewalld_default_zone

  • seed_firewalld_default_zone

  • infra_vm_firewalld_default_zone

  • compute_firewalld_default_zone

  • controller_firewalld_default_zone

  • monitoring_firewalld_default_zone

  • storage_firewalld_default_zone

可以使用以下变量来设置要应用的规则列表。每个条目都是一个包含传递给 firewalld 模块的参数的字典。如果未提供,则省略参数,但以下参数除外:offline(默认 true)、permanent(默认 true)、state(默认 enabled

  • seed_hypervisor_firewalld_rules

  • seed_firewalld_rules

  • infra_vm_firewalld_rules

  • compute_firewalld_rules

  • controller_firewalld_rules

  • monitoring_firewalld_rules

  • storage_firewalld_rules

在以下示例中,在控制器上启用了 firewalld。publicinternal 区域已创建,其默认规则已禁用。TCP 端口 8080 在 internal 区域中打开,并且 http 服务在 public 区域中打开

controller_firewalld_enabled: true

controller_firewalld_zones:
  - zone: public
  - zone: internal

controller_firewalld_rules:
  # Disable default rules in internal zone.
  - service: dhcpv6-client
    state: disabled
    zone: internal
  - service: samba-client
    state: disabled
    zone: internal
  - service: ssh
    state: disabled
    zone: internal
  # Disable default rules in public zone.
  - service: dhcpv6-client
    state: disabled
    zone: public
  - service: ssh
    state: disabled
    zone: public
  # Enable TCP port 8080 in internal zone.
  - port: 8080/tcp
    zone: internal
  # Enable the HTTP service in the public zone.
  - service: http
    zone: public

UFW

tags
firewall

目前不支持在 Ubuntu 主机上配置 Uncomplicated Firewall (UFW)。相反,UFW 已被禁用。自 Yoga 以来,可以通过以下方式避免这种情况

ufw_enabled: true

请注意,尽管名称如此,但这不会主动启用 UFW。将来可能会这样做。

Tuned

tags
tuned

可以应用于主机的内置 tuned 配置。可以使用以下变量为特定类型的宿主机设置 tuned 配置

  • seed_hypervisor_tuned_active_builtin_profile

  • seed_tuned_active_builtin_profile

  • compute_tuned_active_builtin_profile

  • controller_tuned_active_builtin_profile

  • monitoring_tuned_active_builtin_profile

  • storage_tuned_active_builtin_profile

  • infra_vm_tuned_active_builtin_profile

默认情况下,Kayobe 会应用与系统中每个主机角色匹配的 tuned 配置

  • seed hypervisor: virtual-host

  • seed: virtual-guest

  • infrastructure VM: virtual-guest

  • compute: virtual-host

  • controllers: throughput-performance

  • monitoring: throughput-performance

  • storage: throughput-performance

例如,要将 controllers 的 tuned 配置更改为 network-throughput

controllers.yml
controller_tuned_active_builtin_profile: network-throughput

Sysctls

tags
sysctl

可以将任意 sysctl 配置应用于主机。变量格式为字典/映射,将参数名称映射到其所需的值。可以使用以下变量为特定类型的宿主机设置 sysctl 配置

  • seed_hypervisor_sysctl_parameters

  • seed_sysctl_parameters

  • infra_vm_sysctl_parameters

  • compute_sysctl_parameters

  • controller_sysctl_parameters

  • monitoring_sysctl_parameters

  • storage_sysctl_parameters

例如,要将 net.ipv4.ip_forward 参数设置为 1 在 controllers 上

controllers.yml
controller_sysctl_parameters:
  net.ipv4.ip_forward: 1

IP 路由和源 NAT

tags
ip-routing
snat

可以在 seed 主机上配置 IP 路由和源 NAT (SNAT),使其可以用作 overcloud 主机的默认网关。自 Xena 11.0.0 版本发布以来,默认情况下已禁用此功能,可以通过在 ${KAYOBE_CONFIG_PATH}/seed.yml 中将 seed_enable_snat 设置为 true 来启用。

同样,也可以配置 seed-hypervisor 主机以用作默认网关。默认情况下也已禁用此功能,可以通过在 ${KAYOBE_CONFIG_PATH}/seed-hypervisor.yml 中将 seed_hypervisor_enable_snat 设置为 true 来启用。

禁用 cloud-init

tags
disable-cloud-init

cloud-init 是一种流行的服务,用于执行系统引导。如果您不使用 cloud-init,则可以跳过此部分。

如果使用 seed 的 Bifrost 服务来配置控制平面主机,则可以通过 kolla_bifrost_dib_init_element 变量配置 cloud-init 的使用。

cloud-init 按照优先级递增的顺序搜索网络配置;每个项目都会覆盖前一个项目。在某些情况下,在后续启动时,cloud-init 可能会自动重新配置网络接口并导致网络配置出现一些问题。要禁用 cloud-init 在初始服务器引导后的运行,请在 ${KAYOBE_CONFIG_PATH}/overcloud.yml 中将 disable_cloud_init 设置为 true

禁用 Glean

tags
disable-glean

glean 服务可用于执行系统引导,扮演与 cloud-init 类似的角色。如果您不使用 glean,则可以跳过此部分。

如果使用 seed 的 Bifrost 服务来配置控制平面主机,则可以通过 kolla_bifrost_dib_init_element 变量配置 glean 的使用。

在初始服务器引导后,glean 服务可能会尝试启用所有网络接口,从而导致启动时出现超时。为了避免这种情况,glean 服务已被禁用。此外,任何由 glean 生成且未被 Kayobe 覆盖的网络接口配置文件都会被删除。

时区

tags
timezone

可以通过 ${KAYOBE_CONFIG_PATH}/time.yml 中的 timezone 变量配置时区。该值必须是有效的 Linux 时区。例如

time.yml
timezone: Europe/London

NTP

tags
ntp

Kayobe 将在 ntp 组中的所有主机上配置 Chrony。此组中的默认主机是

[ntp:children]
# Kayobe will configure Chrony on members of this group.
seed
seed-hypervisor
overcloud

这提供了一种灵活的方式来选择加入或退出 kayobe 管理 NTP 服务。

变量

可以通过 ${KAYOBE_CONFIG_PATH}/time.yml 中的变量配置网络时间协议 (NTP)。NTP 服务器列表通过 chrony_ntp_servers 配置,默认情况下使用 pool.ntp.org 服务器。

在内部,kayobe 使用 mrlesmithjr.chrony Ansible 角色。为了避免维护 kayobemrlesmithjr.chrony 之间的映射,所有变量都直接传递。这意味着您可以使用该角色定义的所有变量。例如,要更改 chrony_maxupdateskew 并覆盖 kayobe 的 chrony_ntp_servers 默认值

time.yml
chrony_ntp_servers:
  - server: 0.debian.pool.ntp.org
    options:
      - option: iburst
      - option: minpoll
        val: 8
chrony_maxupdateskew: 150.0

软件 RAID

tags
mdadm

虽然可以直接使用 LVM 使用 RAID,但一些操作员可能更喜欢 mdadm 提供的用户空间工具,或者可能拥有他们希望使用 Kayobe 管理的现有软件 RAID 阵列。

可以通过 mdadm_arrays 变量配置软件 RAID 阵列。为了方便起见,它映射到以下变量

  • seed_hypervisor_mdadm_arrays

  • seed_mdadm_arrays

  • infra_vm_mdadm_arrays

  • compute_mdadm_arrays

  • controller_mdadm_arrays

  • monitoring_mdadm_arrays

  • storage_mdadm_arrays

这些变量的格式与 mrlesmithjr.mdadm Ansible 角色中的 mdadm_arrays 变量定义的格式相同。

例如,要将 seed 的两个磁盘配置为 RAID1 mdadm 阵列,并将其作为 /dev/md0 提供

seed.yml
seed_mdadm_arrays:
  - name: md0
    devices:
      - /dev/sdb
      - /dev/sdc
    level: '1'
    state: present

加密

tags
luks

可以通过 luks_devices 变量配置加密的块设备。为了方便起见,它映射到以下变量

  • seed_hypervisor_luks_devices

  • seed_luks_devices

  • infra_vm_luks_devices

  • compute_luks_devices

  • controller_luks_devices

  • monitoring_luks_devices

  • storage_luks_devices

这些变量的格式与 stackhpc.luks Ansible 角色中的 luks_devices 变量定义的格式相同。

例如,要加密软件 raid 设备 /dev/md0 在 seed 上,并将其作为 /dev/mapper/md0crypt 提供

seed.yml
seed_luks_devices:
  - name: md0crypt
    device: /dev/md0

注意

目前尚不可能加密根设备。

LVM

tags
lvm

可以通过 lvm_groups 变量配置逻辑卷管理器 (LVM) 物理卷、卷组和逻辑卷。为了方便起见,它映射到以下变量

  • seed_hypervisor_lvm_groups

  • seed_lvm_groups

  • infra_vm_lvm_groups

  • compute_lvm_groups

  • controller_lvm_groups

  • monitoring_lvm_groups

  • storage_lvm_groups

这些变量的格式与 mrlesmithjr.manage_lvm Ansible 角色中的 lvm_groups 变量定义的格式相同。

用于 libvirt 的 LVM

默认情况下,seed hypervisor 上未配置 LVM。可以配置 LVM 以提供 libvirt 存储池的存储,通常挂载在 /var/lib/libvirt/images

要使用此配置,请将 seed_hypervisor_lvm_groups 变量设置为 "{{ seed_hypervisor_lvm_groups_with_data }}" 并通过 seed_hypervisor_lvm_group_data_disks 变量提供磁盘列表。

用于 Docker 的 LVM

注意

在 Kayobe 的 Train 及更早版本中,始终默认启用 data 卷组。

可以创建一个用于存储 Docker 卷数据的逻辑卷,挂载在 /var/lib/docker/volumes。该逻辑卷在名为 data 的卷组中创建。

以下变量启用此配置,默认值为 false

  • compute_lvm_group_data_enabled

  • controller_lvm_group_data_enabled

  • seed_lvm_group_data_enabled

  • infra_vm_lvm_group_data_enabled

  • storage_lvm_group_data_enabled

要使用此配置,必须通过以下变量配置磁盘列表

  • seed_lvm_group_data_disks

  • infra_vm_lvm_group_data_disks

  • compute_lvm_group_data_disks

  • controller_lvm_group_data_disks

  • monitoring_lvm_group_data_disks

  • storage_lvm_group_data_disks

例如,要将 seed 的两个磁盘配置为用于 LVM

seed.yml
seed_lvm_group_data_disks:
  - /dev/sdb
  - /dev/sdc

Docker 卷 LVM 卷的大小由以下变量给出,默认值为 75%(卷组容量)

  • seed_lvm_group_data_lv_docker_volumes_size

  • infra_vm_lvm_group_data_lv_docker_volumes_size

  • compute_lvm_group_data_lv_docker_volumes_size

  • controller_lvm_group_data_lv_docker_volumes_size

  • monitoring_lvm_group_data_lv_docker_volumes_size

  • storage_lvm_group_data_lv_docker_volumes_size

您可以使用以下变量控制分配给 docker 卷 LV 的存储量。

controllers.yml
controller_lvm_group_data_lv_docker_volumes_size: 100%

可以避免完全使用 LVM,从而避免对多个磁盘的要求。在这种情况下,将适当的 <host>_lvm_groups 变量设置为一个空列表

storage.yml
storage_lvm_groups: []

自定义 LVM

要定义默认 data 卷组中的其他逻辑卷,请修改以下变量之一

  • seed_lvm_group_data_lvs

  • infra_vm_lvm_group_data_lvs

  • compute_lvm_group_data_lvs

  • controller_lvm_group_data_lvs

  • monitoring_lvm_group_data_lvs

  • storage_lvm_group_data_lvs

在列表中包含 <host>_lvm_group_data_lv_docker_volumes 变量以包含 Docker 卷数据的 LVM 卷

monitoring.yml
monitoring_lvm_group_data_lvs:
  - "{{ monitoring_lvm_group_data_lv_docker_volumes }}"
  - lvname: other-vol
    size: 1%
    create: true
    filesystem: ext4
    mount: true
    mntp: /path/to/mount

可以定义其他 LVM 卷组通过以下变量

  • seed_lvm_groups_extra

  • infra_vm_lvm_groups_extra

  • compute_lvm_groups_extra

  • controller_lvm_groups_extra

  • monitoring_lvm_groups_extra

  • storage_lvm_groups_extra

例如

compute.yml
compute_lvm_groups_extra:
  - vgname: other-vg
    disks:
      - /dev/sdb
    create: true
    lvnames:
      - lvname: other-vol
        size: 100%FREE
        create: true
        mount: false

或者,通过以下 <host>_lvm_groups 变量之一替换整个卷组列表,以用自定义配置替换默认配置。

controllers.yml
controller_lvm_groups:
  - vgname: only-vg
    disks: /dev/sdb
    create: true
    lvnames:
      - lvname: only-vol
        size: 100%
        create: true
        mount: false

Kolla-Ansible 远程虚拟环境

tags
kolla-ansible
kolla-target-venv

有关 Kolla Ansible 的远程 Python 虚拟环境的信息,请参阅 上下文:远程执行环境

容器引擎

tags
docker
podman

Kayobe 支持以下容器引擎

  • Podman

  • Docker

可以通过在 container-engine.yml 中设置 container_engine 来配置容器引擎。默认容器引擎是 docker。例如,要使用 podman

container-engine.yml
container_engine: podman

Podman

openstack.kolla.podman 角色用于配置 Podman。请参阅 角色默认值 以获取配置选项列表(确保切换到正确的分支)。这些可以通过 Ansible 库存中的变量或使用额外变量来覆盖,例如,在 container-engine.yml

container-engine.yml
podman_storage_driver: overlay

可以通过 podman_registry 配置私有镜像仓库。如果使用不安全的(HTTP)仓库,请将 podman_registry_insecure 设置为 true

Docker

变量 docker_storage_driver 设置 Docker 存储驱动程序,默认情况下使用 overlay2 驱动程序。有关配置 Docker 的 LVM 的信息,请参阅 LVM

如果使用不安全的(HTTP)仓库,请将 docker_registry_insecure 设置为 true

可以通过 docker_registry 配置私有 Docker 仓库,并通过 docker_registry_ca 配置证书颁发机构(CA)文件。

要使用一个或多个 Docker 仓库镜像,请使用变量 docker_registry_mirrors

如果使用除 1500 以外的 MTU,可以使用 docker_daemon_mtu 进行配置。此设置不适用于使用 net=host 的容器(如 Kolla Ansible 的容器),但可能在构建镜像时是必要的。

Docker 的实时恢复功能可以通过 docker_daemon_live_restore 进行配置,但由于观察到的问题,默认情况下已禁用。

计算 libvirt 守护进程

tags
libvirt-host

注意

本节介绍计算节点上的 libvirt 守护进程,而不是种子超visor。

从 Yoga 开始,Kayobe 提供支持以部署和配置 libvirt 主机守护进程,作为 Kolla Ansible 支持的 nova_libvirt 容器的替代方案。默认情况下不使用主机守护进程,但可以通过在 $KAYOBE_CONFIG_PATH/kolla.yml 中将 kolla_enable_nova_libvirt_container 设置为 false 来启用它。

目前不支持从容器化的 libvirt 迁移到主机 libvirt。

以下选项在 $KAYOBE_CONFIG_PATH/compute.yml 中可用,并且仅在使用 libvirt 守护进程而不是 nova_libvirt 容器时相关。

compute_libvirt_enabled

是否启用主机 libvirt 守护进程。默认情况下,如果 kolla_enable_novatruekolla_enable_nova_libvirt_containerfalse,则为 true。

compute_libvirt_conf_default

要写入 /etc/libvirt/libvirtd.conf 的默认配置选项的字典。

compute_libvirt_conf_extra

要写入 /etc/libvirt/libvirtd.conf 的附加配置选项的字典。

compute_libvirt_conf

要写入 /etc/libvirt/libvirtd.conf 的配置选项的字典。默认情况下,是 compute_libvirt_conf_defaultcompute_libvirt_conf_extra 的组合。

compute_libvirtd_log_level

libvirtd 的数字日志级别。默认值为 3。

compute_qemu_conf_default

要写入 /etc/libvirt/qemu.conf 的默认配置选项的字典。

compute_qemu_conf_extra

要写入 /etc/libvirt/qemu.conf 的附加配置选项的字典。

compute_qemu_conf

要写入 /etc/libvirt/qemu.conf 的配置选项的字典。默认情况下,是 compute_qemu_conf_defaultcompute_qemu_conf_extra 的组合。

compute_libvirt_enable_sasl

是否启用 libvirt SASL 身份验证。默认值与 compute_libvirt_tcp_listen 相同。

compute_libvirt_sasl_password

libvirt SASL 密码。默认情况下未设置。当 compute_libvirt_enable_sasltrue 时,必须定义此项。

compute_libvirt_enable_tls

是否启用 libvirt TLS 侦听器。默认值为 false。

compute_libvirt_ceph_repo_install

是否在 CentOS 和 Rocky 主机上安装 Ceph 软件包仓库。默认值为 true

compute_libvirt_ceph_repo_release

compute_libvirt_ceph_repo_installtrue 时,要在 CentOS 和 Rocky 主机上安装的 Ceph 软件包仓库版本。默认值为 squid

示例:自定义 libvirtd.conf

要自定义 libvirt 守护进程日志输出,将级别 3 发送到 journal

compute.yml
compute_libvirt_conf_extra:
  log_outputs: "3:journald"

示例:自定义 qemu.conf

要自定义 QEMU,以避免在日志中添加时间戳

compute.yml
compute_qemu_conf_extra:
  log_timestamp: 0

示例:SASL

默认情况下启用 SASL 身份验证。这为 libvirt API 的 TCP 和 TLS 连接提供身份验证。需要一个密码,应使用 Ansible Vault 进行加密。

compute.yml
compute_libvirt_sasl_password: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  63363937303539373738356236393563636466313130633435353933613637343231303836343933
  3463623265653030323665383337376462363434396361320a653737376237353261303066616637
  66613562316533313632613433643537346463303363376664396661343835373033326261383065
  3731643633656636360a623534313665343066656161333866613338313266613465336332376463
  3234

示例:启用 libvirt TLS 侦听器

要启用 libvirt TLS 侦听器

compute.yml
compute_libvirt_enable_tls: true

启用 TLS 侦听器后,需要提供客户端、服务器和 CA 证书。应提供以下文件

cacert.pem

用于签署客户端和服务器证书的 CA 证书。

clientcert.pem

客户端证书。

clientkey.pem

客户端密钥。

servercert.pem

服务器证书。

serverkey.pem

服务器密钥。

建议使用 Ansible Vault 加密密钥文件。

将搜索以下路径以查找这些文件

  • $KAYOBE_CONFIG_PATH/certificates/libvirt/{{ inventory_hostname }}/

  • $KAYOBE_CONFIG_PATH/certificates/libvirt/

这样,可以为每个主机生成证书,或使用通配符证书进行共享。

如果使用 Kayobe 环境,则环境中的证书优先。

Kayobe 会使 CA 证书和客户端证书和密钥可供 Kolla Ansible 使用,供 nova_compute 服务使用。

示例:禁用 Ceph 仓库安装

在 CentOS 和 Rocky 主机上,安装了一个 CentOS Storage SIG Ceph 仓库,该仓库提供了比 CentOS/Rocky AppStream 可用的更新的 Ceph 库。当使用 Ceph 作为 Cinder 卷或 Nova 临时块设备时,这可能是必要的。在某些情况下,例如在使用本地软件包镜像时,上游仓库可能不合适。可以按以下方式禁用仓库的安装

compute.yml
compute_libvirt_ceph_repo_install: false

示例:安装 libvirt 所需的其他软件包

在某些情况下,可能需要在计算主机上安装其他软件包供 libvirt 使用。 stackhpc.libvirt-host Ansible 角色通过 libvirt_host_extra_daemon_packages 变量支持此功能。应通过 Ansible 库存中的组变量定义该变量,以避免将更改应用于种子超visor。例如,要安装用于访问 TPM 硬件的 trousers 软件包

inventory/group_vars/compute/libvirt
libvirt_host_extra_daemon_packages:
  - trousers

交换

tags
swap

可以通过 swap 变量配置交换文件和设备。为了方便起见,它映射到以下变量

  • seed_swap

  • seed_hypervisor_swap

  • infra_vm_swap

  • compute_swap

  • controller_swap

  • monitoring_swap

  • storage_swap

格式是一个列表,每个项目映射到一个字典/映射。对于交换设备,应存在以下项目

  • device:交换设备的绝对路径。

对于交换文件,应存在以下项目

  • path:要创建的交换文件的绝对路径。

  • size_mb:交换文件的大小,以 MiB 为单位。

swap 的默认值为一个空列表。

示例:使用交换分区启用交换

以下示例定义了一个使用控制器主机上现有 /dev/sda3 分区的交换设备

controllers.yml
controller_swap:
  - device: /dev/sda3

示例:使用交换文件启用交换

以下示例定义了一个将在计算主机上的 /swapfile 创建的 1GiB 交换文件

compute.yml
compute_swap:
  - path: /swapfile
    size_mb: 1024

libvirt 容器的 AppArmor

tags
apparmor-libvirt

注意

在 Yoga 版本之前,这由 kolla-ansible bootstrap-servers 命令处理。

在运行 nova_libvirt Kolla 容器的 Ubuntu 系统上,libvirt 的 AppArmor 规则已禁用。

将条目添加到 /etc/hosts

tags
etc-hosts

注意

在 Yoga 版本之前,这由 kolla-ansible bootstrap-servers 命令处理。

从 Yoga 开始,Kayobe 会将 /etc/hosts 中所有 overcloud 组中的主机的条目添加到 /etc/hosts 中。这些条目将主机的 hostname 和 FQDN 映射到内部 API 网络上的 IP 地址。可以通过以下方式避免这种情况

customize_etc_hosts: false

默认情况下,每个主机都会获得 overcloud 组中每个其他主机的条目,默认情况下。可以自定义将添加的主机列表

etc_hosts_hosts: "{{ groups['compute'] }}"

应注意的是,此功能需要为将添加到任何 /etc/hosts 文件的所有主机填充 facts。在使用 --limit 参数时,Kayobe 将为所有没有 facts 的主机(包括超出限制的主机)收集 facts。启用 Kayobe 的 facts 缓存可以减少此影响。可以按以下方式避免此 facts 收集过程

etc_hosts_gather_facts: false

安装 Kolla Ansible 所需的软件包

tags
kolla-packages

注意

在 Yoga 版本之前,这由 kolla-ansible bootstrap-servers 命令处理。

少量软件包需要在主机上安装,以用于 Kolla Ansible 和它部署的服务,而另一些软件包必须删除。

日志

tags
日志记录

Kayobe 将为以下 ansible 组中的节点配置持久日志记录

  • seed-hypervisor

  • seed

  • overcloud

  • infra-vms

这意味着 systemd journal 将写入本地存储(而不是内存),并允许您查看之前的启动日志。存储限制默认为文件系统的 10%,硬限制为 4GiB(使用 journald 默认值)。有关更多详细信息,请参阅 journald 文档

如果您希望禁用此功能,可以将 journald_storage 设置为 volatile