[ English | русский | Indonesia ]
Управление сетями¶
Эксплуатационные соображения, такие как гибкость, могут привести к необходимости управления сетями. Например, добавление новых сетей провайдера в управляемое облако OpenStack-Ansible. В следующих разделах приведены наиболее распространенные административные задачи, изложенные для выполнения этих задач.
Более общую информацию об устранении неполадок в сети см. в главе Устранение неполадок в сети в Руководстве по эксплуатации.
Более подробную информацию о работе в сети см. в Руководстве по работе в сети.
Добавление мостов провайдера, используя новые сетевые интерфейсы¶
Добавьте каждую сеть провайдера в свое облако, чтобы она стала известна 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 
