准备目标主机¶
配置操作系统¶
本节描述了目标主机操作系统的安装和配置,以及部署 SSH 密钥和配置存储。
安装操作系统¶
在目标主机上安装以下受支持的操作系统之一
- Ubuntu Server 24.04 (Noble Numbat) 64 位
- Debian 12 (Bookworm) 64 位
- Debian 13 (Trixie) 64 位
- CentOS 10 Stream 64 位
- Rocky Linux 10 64 位
配置至少一个网络接口以访问互联网或合适的本地仓库。
某些发行版会在 /etc/hosts 文件中添加一个多余的条目,该条目将实际主机名解析为另一个环回 IP 地址,例如 127.0.1.1。您必须注释掉或删除此条目以防止名称解析问题。 不要删除 127.0.0.1 条目。 此步骤对于 metal 部署尤其重要。
使用短主机名而不是完全限定域名 (FQDN) 以防止与 LXC 和 SSH 长度限制问题。
我们建议将安全外壳 (SSH) 服务器软件包添加到目标主机上的安装中,这些主机没有本地(控制台)访问权限。
注意
我们还建议将您的区域设置为 en_US.UTF-8。其他区域可能有效,但未经测试或支持。
配置 Debian¶
更新软件包源列表
# apt update
升级系统软件包和内核
# apt dist-upgrade
安装其他软件软件包
# apt install bridge-utils debootstrap ifenslave ifenslave-2.6 \ lsof lvm2 openssh-server sudo tcpdump vlan python3
重新启动主机以激活更改并使用新内核。
配置 Ubuntu¶
更新软件包源列表
# apt update
升级系统软件包和内核
# apt dist-upgrade
安装其他软件软件包
# apt install bridge-utils debootstrap openssh-server \ tcpdump vlan python3
如果您的内核版本有内核附加软件包,请安装它
# apt install linux-modules-extra-$(uname -r)
重新启动主机以激活更改并使用新内核。
配置 CentOS Stream / Rocky Linux¶
升级系统软件包和内核
# dnf upgrade
禁用 SELinux。编辑
/etc/sysconfig/selinux,确保SELINUX=enforcing已更改为SELINUX=disabled。- # 对于从版本 9 开始的 RHEL 发行版,推荐的
禁用 SELinux 的方法是通过 grubby 使用引导加载程序
# grubby --update-kernel ALL --args selinux=0
注意
由于缺乏该功能的维护者,OpenStack-Ansible 不支持 CentOS/RHEL 上启用的 SELinux。
禁用 firewalld 以实现适当的组件通信
# systemctl stop firewalld # systemctl mask firewalld
安装其他软件软件包
# dnf install iputils lsof openssh-server\ sudo tcpdump python3
(可选) 通过更改 sysctl 中的 printk 值来降低内核日志级别
# echo "kernel.printk='4 1 7 4'" >> /etc/sysctl.conf
重新启动主机以激活更改并使用新内核。
配置 SSH 密钥¶
Ansible 使用 SSH 连接部署主机和目标主机。您可以使用 root 用户或允许通过 Ansible become(例如将用户添加到 sudoers)来提升权限的任何其他用户。有关更多详细信息,请参阅 以非 root 身份运行。
将部署主机上公钥文件的内容复制到每个目标主机上的
~/.ssh/authorized_keys文件中。从部署主机到每个目标主机测试公钥身份验证,方法是使用 SSH 连接到目标主机。如果可以连接并获得 shell 而无需身份验证,则表示它正在工作。SSH 提供一个无需询问密码即可获得的 shell。
有关如何生成 SSH 密钥对以及最佳实践的更多信息,请参阅 GitHub 关于生成 SSH 密钥的文档。
配置存储¶
逻辑卷管理器 (LVM) 允许将单个设备拆分为多个逻辑卷,这些逻辑卷向操作系统显示为物理存储设备。块存储 (cinder) 服务以及可选地运行 OpenStack 基础架构的 LXC 容器,可以选择使用 LVM 作为其数据存储。
注意
OpenStack-Ansible 会自动在节点上配置 LVM,并覆盖任何现有的 LVM 配置。如果您有自定义的 LVM 配置,请根据需要编辑生成的配置文件。
要使用可选的块存储 (cinder) 服务,请在存储主机上创建一个名为
cinder-volumes的 LVM 卷组。在创建物理卷时指定 2048 的元数据大小。例如# pvcreate --metadatasize 2048 physical_volume_device_path # vgcreate cinder-volumes physical_volume_device_path
可选地,为容器文件系统创建一个名为
lxc的 LVM 卷组,并在 user_variables.yml 中设置lxc_container_backing_store: lvm,如果您想使用 LVM 与 LXC。如果lxc卷组不存在,容器将默认安装在/var/lib/lxc下的文件系统上。
配置网络¶
OpenStack-Ansible 使用桥接连接物理和逻辑网络接口到主机上的虚拟网络接口到容器内。目标主机需要配置以下网络桥接
桥接名称 |
最佳配置于 |
使用静态 IP |
|---|---|---|
br-mgmt |
每个节点 |
始终 |
br-storage |
每个存储节点 |
在 metal 上部署组件时 |
每个计算节点 |
始终 |
|
br-vxlan |
每个网络节点 |
在 metal 上部署组件时 |
每个计算节点 |
始终 |
|
br-vlan |
每个网络节点 |
从不 |
每个计算节点 |
从不 |
有关主机和容器网络实现方式的详细参考,请参阅 OpenStack-Ansible 参考架构,容器网络部分。
有关用例示例,请参阅 用户指南。
主机网络桥接信息¶
LXC 内部:
lxcbr0lxcbr0桥接是 LXC 的 必需 组件,但 OpenStack-Ansible 会自动配置它。它使用 dnsmasq (DHCP/DNS) + NAT 为容器提供外部(通常是互联网)连接。此桥接不直接连接到主机上的任何物理或逻辑接口,因为 iptables 处理连接。它连接到每个容器中的
eth0。桥接连接到的容器网络可在
openstack_user_config.yml文件中的provider_networks字典中配置。容器管理:
br-mgmtbr-mgmt桥接提供基础设施和 OpenStack 服务之间的管理和通信。桥接连接到物理或逻辑接口,通常是
bond0VLAN 子接口。它还连接到每个容器中的eth1。桥接连接到的容器网络接口可在
openstack_user_config.yml文件中配置。存储:
br-storagebr-storage桥接提供 OpenStack 服务和块存储设备之间对块存储设备的隔离访问。桥接连接到物理或逻辑接口,通常是
bond0VLAN 子接口。它还连接到每个相关容器中的eth2。桥接连接到的容器网络接口可在
openstack_user_config.yml文件中配置。OpenStack Networking 隧道:
br-vxlan如果环境配置为允许项目使用 VXLAN 创建虚拟网络,则
br-vxlan接口是 必需的。它提供封装虚拟(VXLAN)隧道网络流量的接口。请注意,
br-vxlan并非必须是桥接,可以直接使用物理接口或 bond VLAN 子接口,并且会更有效。此处保留名称br-vxlan以保持文档和示例配置的一致性。桥接连接到的容器网络接口可在
openstack_user_config.yml文件中配置。OpenStack Networking 提供程序:
br-vlan注意
br-vlan 桥接不再是严格必需的——通过正确的配置,可以直接使用物理接口(例如,在 OVN 中)。它仍然存在于某些设置中,主要是为了保持一致性和使文档和示例配置中的命名约定保持一致,但其使用是可选的。
br-vlan桥接提供带有 VLAN 标记或平面(无 VLAN 标记)网络的 инфраструктура。桥接连接到物理或逻辑接口,通常是
bond1。它未分配 IP 地址,因为它仅处理第二层连接。桥接连接到的容器网络接口可在
openstack_user_config.yml文件中配置。