配置计算 (nova) 服务 (可选)¶
计算服务 (nova) 处理 OpenStack 环境中虚拟机的创建。OpenStack-Ansible 使用的许多默认选项都可以在 nova role 中的 defaults/main.yml 中找到。
可用区¶
具有多个可用区的部署者可以设置 Ansible 变量 nova_nova_conf_overrides.DEFAULT.default_schedule_zone 以指定新请求的可用区。这在具有不同类型 hypervisor 的环境中很有用,其中构建会根据其资源需求发送到某些硬件类型。
例如,如果您有在两个机架上运行的服务器,且不共享 PDU。这两个机架可以分组为两个可用区。当一个机架断电时,另一个仍然可以工作。通过将您的容器分布到这两个机架(可用区)上,您将提高您的服务可用性。
Ceph (RBD) 的块设备调优¶
启用 Ceph 并定义 nova_libvirt_images_rbd_pool 会默认更改两个 libvirt 配置
hw_disk_discard:
unmapdisk_cachemodes:
network=writeback
在 libvirt 中将 hw_disk_discard 设置为 unmap 可为底层块设备启用 discard(有时称为 TRIM)支持。这允许回收底层磁盘上未使用的块。
将 disk_cachemodes 设置为 network=writeback 允许数据在每次更改时写入缓存,但这些更改会在定期的时间间隔刷新到磁盘。这可以提高 Ceph 块设备上的写入性能。
您可以使用两个 Ansible 变量(此处显示默认值)来自定义这些设置
nova_libvirt_hw_disk_discard: 'unmap'
nova_libvirt_disk_cachemodes: 'network=writeback'
您可以通过将 nova_libvirt_hw_disk_discard 设置为 ignore 来禁用 discard。可以将 nova_libvirt_disk_cachemodes 设置为空字符串以禁用 network=writeback。
以下最小示例配置将 nova 设置为使用 ephemeral-vms Ceph pool。以下示例使用 cephx 身份验证,并需要为 ephemeral-vms pool 存在的 cinder 帐户
nova_libvirt_images_rbd_pool: ephemeral-vms
ceph_mons:
- 172.29.244.151
- 172.29.244.152
- 172.29.244.153
如果您为 pool 拥有不同的 Ceph 用户名,请将其用作
cinder_ceph_client: <ceph-username>
Ceph 关于 OpenStack 的文档Ceph documentation for OpenStack 提供了有关这些设置的更多信息。
Config drive¶
默认情况下,OpenStack-Ansible 不配置 nova 以强制为 nova 构建的每个实例配置 config drive。元数据服务提供用于在实例内部的 cloud-init 中使用的配置信息。只有当实例未安装 cloud-init 或不支持处理元数据时,才需要 config drive。
部署者可以设置 Ansible 变量以强制为每个虚拟机部署 config drive
nova_nova_conf_overrides:
DEFAULT:
force_config_drive: True
某些格式的 config drive 可能会阻止实例在 hypervisor 之间正确迁移。如果您需要强制 config drive 并且能够迁移实例,请使用 nova_nova_conf_overrides 变量将 config drive 格式设置为 vfat
nova_nova_conf_overrides:
DEFAULT:
config_drive_format: vfat
force_config_drive: True
Libvirtd 连接性和身份验证¶
默认情况下,OpenStack-Ansible 以以下方式配置 libvirt daemon
已启用 TLS 连接
已禁用 TCP 明文连接
通过 TCP 连接的身份验证使用 SASL
您可以使用以下 Ansible 变量来自定义这些设置
# Enable libvirtd's TLS listener
nova_libvirtd_listen_tls: 1
# Disable libvirtd's plaintext TCP listener
nova_libvirtd_listen_tcp: 0
# Use SASL for authentication
nova_libvirtd_auth_tcp: sasl
Multipath¶
Nova 支持基于 iSCSI 的存储的多路径。通过配置覆盖启用 nova 中的多路径支持
nova_nova_conf_overrides:
libvirt:
iscsi_use_multipath: true
启用 Huge Pages¶
为了在您的内核中启用 Huge Pages,必须执行一系列操作
注意
建议利用 group_vars,因为通常您只需要在特定的主机集上启用 Huge Pages。例如,您可以使用 /etc/openstack_deploy/group_vars/compute_hosts.yml 文件来定义下面讨论的变量。
在变量中定义 Huge Pages 的默认大小。
custom_huge_pages_size_mb: 2
定义自定义 GRUB 记录以启用 Huge Pages
openstack_host_custom_grub_options: - key: hugepagesz value: "{{ custom_huge_pages_size_mb }}M" - key: hugepages value: "{{ (ansible_facts['memtotal_mb'] - nova_reserved_host_memory_mb) // custom_huge_pages_size_mb }}" - key: transparent_hugepage value: never
定义对默认
dev-hugepages.mount的覆盖openstack_hosts_systemd_mounts: - what: dev-hugepages mount_overrides_only: true type: hugetlbfs escape_name: false config_overrides: Mount: Options: "pagesize={{ custom_huge_pages_size_mb }}M"
将更改推广到主机
# openstack-ansible openstack.osa.openstack_hosts_setup --limit compute_hosts定义具有 Huge Pages 支持的 flavor
openstack_user_compute: flavors: - specs: - name: m1.small vcpus: 2 ram: 4096 disk: 0 - name: m1.large vcpus: 8 ram: 16384 disk: 0 extra_specs: hw:mem_page_size: large hw:cpu_policy: dedicated
在区域中创建定义的 flavor
# openstack-ansible openstack.osa.openstack_resources
启用实时迁移的 post-copy¶
确保高负载实例成功迁移的一种方法是使用 Libvirt/QEMU 的 post-copy 功能。当启用此方法时,如果实例在提供的超时时间内未能迁移,则迁移将被强制完成,而剩余的(未传输的内存)将从原始 hypervisor 在发生实例访问尝试时传输。
为了使 post-copy 正常工作,需要满足多个条件
Nova 配置为在请求迁移时将 post-copy 发送到 Libvirt:*
live_migration_timeout_action应设置为force_complete而不是默认的abort* 应启用live_migration_permit_post_copy* 建议调整live_migration_completion_timeout,因为默认的 800 秒可能需要太长时间才能决定必须启动 post-copy。请注意,超时值乘以实例的 RAM 和磁盘量。因此,具有 16Gb RAM 和 50Gb 磁盘的实例可能需要超过 14 小时才能强制执行 post-copy 机制。hypervisor 需要启用
vm.unprivileged_userfaultfd才能允许 post-copy 发生确保 Open vSwitch 不使用
mlockall进行启动
以下是 OpenStack-Ansible 启用实例的 post-copy 迁移的示例配置。为此,将以下内容放入 /etc/openstack_deploy/group_vars/nova_compute.yml
nova_nova_conf_overrides:
libvirt:
live_migration_permit_post_copy: true
live_migration_timeout_action: force_complete
live_migration_completion_timeout: 30
openstack_user_kernel_options:
- key: vm.unprivileged_userfaultfd
value: 1
配置到位后,您需要运行以下 playbook 以应用更改
# openstack-ansible openstack.osa.openstack_hosts_setup --tags openstack_hosts-install --limit nova_compute
# openstack-ansible openstack.osa.nova --tags post-install --limit nova_compute