[ English | русский | Deutsch | Indonesia | English (United Kingdom) ]
Управление сетями¶
Эксплуатационные соображения, такие как гибкость, могут привести к необходимости управления сетями. Например, добавление новых сетей провайдера в управляемое облако OpenStack-Ansible. В следующих разделах приведены наиболее распространенные административные задачи, изложенные для выполнения этих задач.
Более общую информацию об устранении неполадок в сети см. в главе «Устранение неполадок в сети» <https://wiki.openstack.org/wiki/OpsGuide/Network_Troubleshooting> в Руководстве по эксплуатации.
Более подробную информацию о работе в сети см. в `Руководстве по работе в сети<https://docs.openstack.org/neutron/latest/admin/>`_.
Добавьте мосты провайдера, используя новые сетевые интерфейсы¶
Добавьте каждую сеть провайдера в свое облако, чтобы она стала известна OpenStack-Ansible и операционной системе, прежде чем вы сможете выполнить необходимые плейбуки для завершения настройки.
Конфигурация OpenStack-Ansible¶
Все сети провайдера необходимо добавить в конфигурацию OpenStack-Ansible.
Отредактируйте файл /etc/openstack_deploy/openstack_user_config.yml
и добавьте новый блок под разделом provider_networks
:
Параметр container_bridge
определяет физический сетевой мост, используемый для соединения пары veth от физического хоста к контейнеру. Внутри контейнера параметр container_interface
определяет имя, по которому будет доступна физическая сеть. Параметр container_interface
не требуется, когда агенты Neutron развертываются на «голом» железе. Убедитесь, что оба параметра определены уникально в сетях их провайдеров и что сетевой интерфейс правильно настроен в вашей операционной системе. group_binds
определяет, к чему должна быть подключена эта сеть, к контейнерам или физическим хостам, и в конечном итоге зависит от используемого сетевого стека. Например, Linuxbridge или OVS. Конфигурация range
определяет ID физической сегментации Neutron, которые автоматически используются пользователями при создании сетей в основном через Horizon и API Neutron. То же самое справедливо и для конфигурации net_name
, которая определяет адресуемое имя внутри конфигурации Neutron. Эта конфигурация также должна быть уникальной в сетях других провайдеров.
Для получения дополнительной информации см. Конфигурация развертывания в Руководстве по развертыванию OpenStack-Ansible.
Обновление узла с новой конфигурацией¶
Запустите соответствующие сценарии в зависимости от раздела group_binds
.
Например, если вы обновляете сети, требующие изменения всех узлов с помощью агента Linux bridge, предполагая, что у вас есть инфраструктурные (control) узлы с именами infra01, infra02 и infra03, выполните:
# openstack-ansible containers-deploy.yml --limit localhost,infra01,infra01-host_containers
# openstack-ansible containers-deploy.yml --limit localhost,infra02,infra02-host_containers
# openstack-ansible containers-deploy.yml --limit localhost,infra03,infra03-host_containers
Затем обновите конфигурацию neutron.
# openstack-ansible os-neutron-install.yml --limit localhost,infra01,infra01-host_containers
# openstack-ansible os-neutron-install.yml --limit localhost,infra02,infra02-host_containers
# openstack-ansible os-neutron-install.yml --limit localhost,infra03,infra03-host_containers
Затем при необходимости обновите вычислительные узлы.
Удалить мосты провайдера из OpenStack¶
Подобно добавлению сети провайдера, процесс удаления использует ту же процедуру, но в обратном порядке. Порты Neutron необходимо будет удалить перед удалением конфигурации OpenStack-Ansible.
Отменить назначение всех плавающих IP-адресов Neutron:
Примечание
Экспортируйте сеть Neutron, которая будет удалена, как один UUID.
export NETWORK_UUID=<uuid> for p in $( neutron port-list -c id --device_owner compute:nova --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do floatid=$( neutron floatingip-list -c id --port_id=$p | awk '/([A-Fa-z0-9]+-){3}/ { print $2 }' ) if [ -n "$floatid" ]; then echo "Disassociating floating IP $floatid from port $p" neutron floatingip-disassociate $floatid fi done
Удалить все порты Neutron из инстансов:
export NETWORK_UUID=<uuid> for p in $( neutron port-list -c id -c device_id --device_owner compute:nova --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do echo "Removing Neutron compute port $p" neutron port-delete $p done
Удалить порты маршрутизатора Neutron и DHCP-агенты:
export NETWORK_UUID=<uuid> for line in $( neutron port-list -c id -c device_id --device_owner network:router_interface --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2 "+" $4}' ); do p=$( echo "$line"| cut -d'+' -f1 ); r=$( echo "$line"| cut -d'+' -f2 ) echo "Removing Neutron router port $p from $r" neutron router-interface-delete $r port=$p done for agent in $( neutron agent-list -c id --agent_type='DHCP Agent' --network_id=${NETWORK_UUID}| awk '/([A-Fa-f0-9]+-){3}/ {print $2}' ); do echo "Remove network $NETWORK_UUID from Neutron DHCP Agent $agent" neutron dhcp-agent-network-remove "${agent}" $NETWORK_UUID done
Удалить сеть Neutron:
export NETWORK_UUID=<uuid> neutron net-delete $NETWORK_UUID
Удалите сеть провайдера из конфигурации
provider_networks
конфигурации OpenStack-Ansible/etc/openstack_deploy/openstack_user_config.yml
и повторно запустите следующие плейбуки:# openstack-ansible lxc-containers-create.yml --limit infra01:infra01-host_containers # openstack-ansible lxc-containers-create.yml --limit infra02:infra02-host_containers # openstack-ansible lxc-containers-create.yml --limit infra03:infra03-host_containers # openstack-ansible os-neutron-install.yml --tags neutron-config
Перезапустите контейнер сетевого агента¶
При некоторых обстоятельствах, проблемах с конфигурацией или временных проблемах может потребоваться перезапуск одного или всех контейнеров с агентами neutron.
Это можно сделать с помощью нескольких команд:
Пример перезагрузки все еще доступных контейнеров.
В этом примере будет выполнена перезагрузка контейнера с именем
neutron_agents_container_hostname_name
изнутри:# ansible -m shell neutron_agents_container_hostname_name -a 'reboot'
Пример перезагрузки одного контейнера за раз с интервалом в 60 секунд:
# ansible -m shell neutron_agents_container -a 'sleep 60; reboot' --forks 1
Если контейнер не отвечает, его можно перезапустить с физического сетевого хоста:
# ansible -m shell network_hosts -a 'for c in $(lxc-ls -1 |grep neutron_agents_container); do lxc-stop -n $c && lxc-start -d -n $c; done' --forks 1