Octavia¶
Octavia 提供负载均衡即服务。本指南涵盖两种提供程序
Amphora
OVN
启用 Octavia¶
在 globals.yml 中启用 octavia 服务
enable_octavia: "yes"
Amphora 提供程序¶
本节涵盖 Octavia 配置,用于 Amphora 驱动程序。有关完整详细信息,请参阅 Octavia 文档。 安装指南 是一个有用的参考。
证书¶
Octavia 需要各种 TLS 证书才能运行。从 Victoria 版本开始,Kolla Ansible 支持自动生成这些证书。
选项 1:自动生成证书¶
Kolla Ansible 为证书颁发者和所有者字段提供默认值。可以通过 globals.yml 自定义这些值,例如
octavia_certs_country: US
octavia_certs_state: Oregon
octavia_certs_organization: OpenStack
octavia_certs_organizational_unit: Octavia
生成 octavia 证书
kolla-ansible octavia-certificates
证书和密钥将在 /etc/kolla/config/octavia 下生成。
选项 2:手动生成证书¶
按照 octavia 文档 生成 Amphorae 的证书。这些证书应按如下方式复制到 Kolla Ansible 配置中
cp client_ca/certs/ca.cert.pem /etc/kolla/config/octavia/client_ca.cert.pem
cp server_ca/certs/ca.cert.pem /etc/kolla/config/octavia/server_ca.cert.pem
cp server_ca/private/ca.key.pem /etc/kolla/config/octavia/server_ca.key.pem
cp client_ca/private/client.cert-and-key.pem /etc/kolla/config/octavia/client.cert-and-key.pem
以下选项应在 passwords.yml 中设置,与用于加密 CA 密钥的密码匹配
octavia_ca_password: <CA key password>
监控证书到期¶
可以使用以下命令检查任何证书是否会在给定天数内到期
kolla-ansible octavia-certificates --check-expiry <days>
网络¶
Octavia worker 和 health manager 节点必须能够访问 Octavia 管理网络,以便与 Amphorae 通信。
如果使用 VLAN 作为 Octavia 管理网络,请启用 Neutron 提供程序网络
enable_neutron_provider_networks: yes
配置控制器上用于访问 Octavia 管理网络的网络接口的名称。如果使用 VLAN 提供程序网络,请确保流量也桥接到 Open vSwitch 上。
octavia_network_interface: <network interface on controllers>
该接口应具有 Octavia 管理子网上的 IP 地址。
注册 OpenStack 资源¶
从 Victoria 版本开始,有两种配置 Octavia 的方法。
Kolla Ansible 在部署期间会自动为 Octavia 注册资源
Operator 在部署后为 Octavia 注册资源
第一种方法更简单,建议新用户使用。第二种方法提供了更大的灵活性,但代价是 operator 的复杂性。
选项 1:自动资源注册(默认,推荐)¶
对于自动资源注册,Kolla Ansible 将注册以下资源
Nova flavor
Nova SSH keypair
Neutron network 和 subnet
Neutron security groups
可以在部署之前自定义这些资源的配置。
请注意,要使此操作有效,需要访问 Nova 和 Neutron API。这对于 kolla-ansible genconfig 命令以及使用 Ansible check 模式时也成立。
自定义 Amphora flavor¶
默认 amphora flavor 命名为 amphora,具有 1 个 VCPU、1GB RAM 和 5GB 磁盘。可以通过更改 globals.yml 中的 octavia_amp_flavor 自定义此 flavor。
有关详细信息,请参阅 os_nova_flavor Ansible 模块。支持的参数包括
diskephemeral(可选)extra_specs(可选)flavorid(可选)is_public(可选)nameramswap(可选)vcpus
将使用以下默认值
octavia_amp_flavor:
name: "amphora"
is_public: no
vcpus: 1
ram: 1024
disk: 5
自定义网络和子网¶
使用 globals.yml 中的 octavia_amp_network 配置 Octavia 管理网络和子网。这必须是一个 可从控制器访问的网络。通常使用 VLAN 提供程序网络。
有关详细信息,请参阅 os_network 和 os_subnet Ansible 模块。支持的参数
网络参数支持以下参数
external(可选)mtu(可选)nameprovider_network_type(可选)provider_physical_network(可选)provider_segmentation_id(可选)shared(可选)subnet
子网参数支持以下参数
allocation_pool_start(可选)allocation_pool_end(可选)cidrenable_dhcp(可选)gateway_ip(可选)nameno_gateway_ip(可选)ip_version(可选)ipv6_address_mode(可选)ipv6_ra_mode(可选)
例如
octavia_amp_network:
name: lb-mgmt-net
provider_network_type: vlan
provider_segmentation_id: 1000
provider_physical_network: physnet1
external: false
shared: false
subnet:
name: lb-mgmt-subnet
cidr: "10.1.2.0/24"
allocation_pool_start: "10.1.2.100"
allocation_pool_end: "10.1.2.200"
gateway_ip: "10.1.2.1"
enable_dhcp: yes
使用 Kolla Ansible 部署 Octavia
kolla-ansible deploy -i <inventory> --tags common,horizon,octavia
完成安装后,需要 在 glance 中注册 amphora 镜像。
选项 2:手动资源注册¶
在这种情况下,Kolla Ansible 不会为 Octavia 注册资源。在 globals.yml 中将 octavia_auto_configure 设置为 no
octavia_auto_configure: no
所有资源应在 service 项目中注册。可以按如下方式完成
. /etc/kolla/octavia-openrc.sh
注意
确保已执行 kolla-ansible post-deploy 并将 enable_octavia 设置为 yes 在 global.yml 中
注意
在 Train 及更早版本中,资源应在 admin 项目中注册。这通过 octavia_service_auth_project 配置,并且可以设置为 service 以避免升级到 Ussuri 时的破坏性更改。更改现有系统上的项目至少需要在新项目中注册一个新的安全组。理想情况下,flavor 和网络应在新项目中重新创建,尽管这会影响现有的 Amphorae。
Amphora flavor¶
在 Nova 中注册 flavor
openstack flavor create --vcpus 1 --ram 1024 --disk 2 "amphora" --private
记下 flavor 的 ID,或通过 --id 指定一个。
Keypair¶
在 Nova 中注册 keypair
openstack keypair create --public-key <path to octavia public key> octavia_ssh_key
网络和子网¶
在 Neutron 中注册管理网络和子网。这必须是一个 可从控制器访问的网络。通常使用 VLAN 提供程序网络。
OCTAVIA_MGMT_SUBNET=192.168.43.0/24
OCTAVIA_MGMT_SUBNET_START=192.168.43.10
OCTAVIA_MGMT_SUBNET_END=192.168.43.254
openstack network create lb-mgmt-net --provider-network-type vlan --provider-segment 107 --provider-physical-network physnet1
openstack subnet create --subnet-range $OCTAVIA_MGMT_SUBNET --allocation-pool \
start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END \
--network lb-mgmt-net lb-mgmt-subnet
记下网络的 ID。
安全组¶
在 Neutron 中注册安全组。
openstack security group create lb-mgmt-sec-grp
openstack security group rule create --protocol icmp lb-mgmt-sec-grp
openstack security group rule create --protocol tcp --dst-port 22 lb-mgmt-sec-grp
openstack security group rule create --protocol tcp --dst-port 9443 lb-mgmt-sec-grp
记下安全组的 ID。
Kolla Ansible 配置¶
以下选项应添加到 globals.yml 中。
设置先前注册的资源的 ID
octavia_amp_boot_network_list: <ID of lb-mgmt-net>
octavia_amp_secgroup_list: <ID of lb-mgmt-sec-grp>
octavia_amp_flavor_id: <ID of amphora flavor>
现在部署 Octavia
kolla-ansible deploy -i <inventory> --tags common,horizon,octavia
Amphora 镜像¶
有必要构建一个 Amphora 镜像。在 CentOS / Rocky 10 上
sudo dnf -y install epel-release
sudo dnf install -y debootstrap qemu-img git e2fsprogs policycoreutils-python-utils
在 Ubuntu 上
sudo apt -y install debootstrap qemu-utils git kpartx
获取 Octavia 源代码
git clone https://opendev.org/openstack/octavia -b <branch>
安装 diskimage-builder,最好在虚拟环境中
python3 -m venv dib-venv
source dib-venv/bin/activate
pip install diskimage-builder
创建 Amphora 镜像
cd octavia/diskimage-create
./diskimage-create.sh
获取 octavia 用户 openrc
. /etc/kolla/octavia-openrc.sh
注意
确保已执行 kolla-ansible post-deploy
在 Glance 中注册镜像
openstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file amphora-x64-haproxy.qcow2 --property hw_architecture='x86_64' --property hw_rng_model=virtio
注意
标签应与 /etc/kolla/globals.yml 中的 octavia_amp_image_tag 匹配,默认情况下,标签为“amphora”,octavia 使用标签来确定要使用的镜像。
调试¶
SSH 到 amphora¶
登录到 octavia-worker 节点之一,并 ssh 到 amphora。
ssh -i /etc/kolla/octavia-worker/octavia_ssh_key ubuntu@<amphora_ip>
注意
amphora 私钥位于所有 octavia-worker 节点上的 /etc/kolla/octavia-worker/octavia_ssh_key 上。
升级¶
如果您从 Ussuri 版本升级,则必须在 globals.yml 中禁用 octavia_auto_configure 并保留以前的 octavia 配置。
开发或测试¶
Kolla Ansible 提供了一种简单的设置 Octavia 网络的方法,用于开发或测试,在使用 Neutron Open vSwitch ML2 机制驱动程序时。在这种情况下,Kolla Ansible 将创建一个租户网络并将 Octavia 控制服务配置为访问它。请勿在生产中使用此选项,网络可能不够可靠。
将 octavia_network_type 添加到 globals.yml 并将值设置为 tenant
octavia_network_type: "tenant"
接下来,按照正常的部署说明进行操作。
故障处理¶
在大型部署中,其中 neutron-openvswitch-agent 同步可能需要 5 分钟以上,您可能会在 octavia-interface.service systemd 单元上收到错误,因为它无法等待 o-hm0 接口是否已附加到 br-int,或者 Octavia 管理 VxLAN 是否已在该主机上配置。在这种情况下,您必须将 octavia_interface_wait_timeout 添加到 globals.yml 并将值设置为新的超时时间(秒)
octavia_interface_wait_timeout: 1800
在每个网络节点上最多有 2500 个网络端口的部署中,同步过程可能需要长达 30 分钟。但是,您必须根据部署大小考虑此值。
OVN 提供程序¶
本节涵盖 Octavia 配置,用于 OVN 驱动程序。有关完整详细信息,请参阅 Octavia 文档 和 OVN Octavia 提供程序文档。
要启用 OVN 提供程序,请在 globals.yml 中设置以下选项
octavia_provider_drivers: "ovn:OVN provider"
octavia_provider_agents: "ovn"