主机配置¶
本节涵盖主机的配置。它不涵盖容器的配置或部署。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.ymlseed.ymlcompute.ymlcontroller.ymlinfra-vms.ymlmonitoring.ymlstorage.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 执行一个引导步骤来创建它,作为不同的用户。 在云镜像中,通常有一个以操作系统发行版命名的用户,例如 rocky 或 ubuntu。 此用户默认为 os_distribution 变量,但 CentOS 除外,CentOS 使用 cloud-user,但可以通过以下变量设置
seed_hypervisor_bootstrap_userseed_bootstrap_userinfra_vm_bootstrap_usercompute_bootstrap_usercontroller_bootstrap_usermonitoring_bootstrap_userstorage_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_user 和 root)定义的用户的列表,以及用于 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 中 seed、seed-hypervisor 和/或 overcloud 组的组变量进行设置。
kayobe-config 仓库中的默认 Kayobe 配置将 ansible_python_interpreter 设置为 {{ virtualenv_path }}/kayobe/bin/python,用于 seed、seed-hypervisor 和 overcloud 组。
磁盘擦除¶
- 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_usersseed_usersinfra_vm_userscompute_userscontroller_usersmonitoring_usersstorage_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 设置为 true 或 false 来启用或禁用 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_http 和 apt_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:以空格分隔的仓库类型列表,例如deb或deb-src(可选,默认值为deb)url:仓库的 URLsuites:以空格分隔的 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:密钥的 URLfilename:在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-hypervisor、seed、overcloud 和 infra-vms 主机上。
可以使用以下变量来设置要安装的软件包
dev_tools_packages_default:默认安装的软件包列表。(默认值:bash-completion、tcpdump和vim)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_enabledseed_firewalld_enabledinfra_vm_firewalld_enabledcompute_firewalld_enabledcontroller_firewalld_enabledmonitoring_firewalld_enabledstorage_firewalld_enabled
启用 firewalld 时,可以使用以下变量来配置要创建的区域列表。每个条目都是一个包含 zone 项目的字典
seed_hypervisor_firewalld_zonesseed_firewalld_zonesinfra_vm_firewalld_zonescompute_firewalld_zonescontroller_firewalld_zonesmonitoring_firewalld_zonesstorage_firewalld_zones
可以使用以下变量来设置默认区域。默认值为未设置,在这种情况下,默认区域将不会更改
seed_hypervisor_firewalld_default_zoneseed_firewalld_default_zoneinfra_vm_firewalld_default_zonecompute_firewalld_default_zonecontroller_firewalld_default_zonemonitoring_firewalld_default_zonestorage_firewalld_default_zone
可以使用以下变量来设置要应用的规则列表。每个条目都是一个包含传递给 firewalld 模块的参数的字典。如果未提供,则省略参数,但以下参数除外:offline(默认 true)、permanent(默认 true)、state(默认 enabled)
seed_hypervisor_firewalld_rulesseed_firewalld_rulesinfra_vm_firewalld_rulescompute_firewalld_rulescontroller_firewalld_rulesmonitoring_firewalld_rulesstorage_firewalld_rules
在以下示例中,在控制器上启用了 firewalld。public 和 internal 区域已创建,其默认规则已禁用。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_profileseed_tuned_active_builtin_profilecompute_tuned_active_builtin_profilecontroller_tuned_active_builtin_profilemonitoring_tuned_active_builtin_profilestorage_tuned_active_builtin_profileinfra_vm_tuned_active_builtin_profile
默认情况下,Kayobe 会应用与系统中每个主机角色匹配的 tuned 配置
seed hypervisor:
virtual-hostseed:
virtual-guestinfrastructure VM:
virtual-guestcompute:
virtual-hostcontrollers:
throughput-performancemonitoring:
throughput-performancestorage:
throughput-performance
例如,要将 controllers 的 tuned 配置更改为 network-throughput
controllers.yml¶controller_tuned_active_builtin_profile: network-throughput
Sysctls¶
- tags
sysctl
可以将任意 sysctl 配置应用于主机。变量格式为字典/映射,将参数名称映射到其所需的值。可以使用以下变量为特定类型的宿主机设置 sysctl 配置
seed_hypervisor_sysctl_parametersseed_sysctl_parametersinfra_vm_sysctl_parameterscompute_sysctl_parameterscontroller_sysctl_parametersmonitoring_sysctl_parametersstorage_sysctl_parameters
例如,要将 net.ipv4.ip_forward 参数设置为 1 在 controllers 上
controllers.yml¶controller_sysctl_parameters:
net.ipv4.ip_forward: 1
IP 路由和源 NAT¶
- tags
ip-routingsnat
可以在 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 角色。为了避免维护 kayobe 和 mrlesmithjr.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_arraysseed_mdadm_arraysinfra_vm_mdadm_arrayscompute_mdadm_arrayscontroller_mdadm_arraysmonitoring_mdadm_arraysstorage_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_devicesseed_luks_devicesinfra_vm_luks_devicescompute_luks_devicescontroller_luks_devicesmonitoring_luks_devicesstorage_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_groupsseed_lvm_groupsinfra_vm_lvm_groupscompute_lvm_groupscontroller_lvm_groupsmonitoring_lvm_groupsstorage_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_enabledcontroller_lvm_group_data_enabledseed_lvm_group_data_enabledinfra_vm_lvm_group_data_enabledstorage_lvm_group_data_enabled
要使用此配置,必须通过以下变量配置磁盘列表
seed_lvm_group_data_disksinfra_vm_lvm_group_data_diskscompute_lvm_group_data_diskscontroller_lvm_group_data_disksmonitoring_lvm_group_data_disksstorage_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_sizeinfra_vm_lvm_group_data_lv_docker_volumes_sizecompute_lvm_group_data_lv_docker_volumes_sizecontroller_lvm_group_data_lv_docker_volumes_sizemonitoring_lvm_group_data_lv_docker_volumes_sizestorage_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_lvsinfra_vm_lvm_group_data_lvscompute_lvm_group_data_lvscontroller_lvm_group_data_lvsmonitoring_lvm_group_data_lvsstorage_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_extrainfra_vm_lvm_groups_extracompute_lvm_groups_extracontroller_lvm_groups_extramonitoring_lvm_groups_extrastorage_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-ansiblekolla-target-venv
有关 Kolla Ansible 的远程 Python 虚拟环境的信息,请参阅 上下文:远程执行环境。
容器引擎¶
- tags
dockerpodman
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_nova为true且kolla_enable_nova_libvirt_container为false,则为 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_default和compute_libvirt_conf_extra的组合。compute_libvirtd_log_levellibvirtd 的数字日志级别。默认值为 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_default和compute_qemu_conf_extra的组合。compute_libvirt_enable_sasl是否启用 libvirt SASL 身份验证。默认值与
compute_libvirt_tcp_listen相同。compute_libvirt_sasl_passwordlibvirt SASL 密码。默认情况下未设置。当
compute_libvirt_enable_sasl为true时,必须定义此项。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_install为true时,要在 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_swapseed_hypervisor_swapinfra_vm_swapcompute_swapcontroller_swapmonitoring_swapstorage_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。