Обновление пакетов
Проверьте, что новое ядро 6.1.52-1.el7.3 совместимо с используемыми серверами:
-
Выберите один сервер (кроме гипервизора с High-IOPS дисками).
-
Если требуется, переведите его в режим обслуживания согласно разделам Руководства администратора VK Private Cloud:
- Администрирование Платформы → Управление инфраструктурой, на которой развернута Платформа → Управление вычислительными узлами (гипервизорами).
- Администрирование Платформы → Управление инфраструктурой, на которой развернута Платформа → Операции с управляющими узлами.
-
Установите новую версию ядра.
-
Загрузите ОС с новым ядром.
Если тестовое обновление ядра прошло успешно, переходите к следующим шагам. На остальных серверах ядро будет обновлено на шагах, описанных в разделе Обновление системных пакетов.
Если в Платформе используются серверы разных производителей или серверы, сильно отличающиеся по конфигурации, выполните такую проверку на каждом типе серверов, используемых в Платформе:
$ uname -r6.1.38-2.el7.3.x86_64
Обновление содержит следующие файлы:
-
list-packages-pre-update.yaml— список пакетов, которые обновляются до общего обновления. -
list-packages-auto-cve.yaml— список пакетов с CVE уязвимостями. -
list-packages-kernels.yaml— список пакетов с обновлениями ядра. -
update_os.yaml— Ansible-плейбук, который:- Переподключает rpm-репозитории на новую версию Nexus.
- Заходит на хосты из Inventory.
- Получает список установленных пакетов.
- Обновляет пакеты, которые стоят и есть в списках на обновление.
-
Распакуйте входящий в состав дистрибутива архив
repos_mcs_distr_box-${NEW_RELEASE_NAME}.tar.gz:$ cd $NEW_DISTRIB_DIR$ tar xvf repos_mcs_distr_box-${NEW_RELEASE_NAME}.tar.gz -
Перейдите в директорию
repos_mcs_distr_box-${NEW_RELEASE_NAME}/upgrade/os/ansible/$ cd repos_mcs_distr_box-${NEW_RELEASE_NAME}/upgrade/os/ansible/ -
Сформируйте Inventory-файл, в котором будут перечислены все серверы, требующие обновления пакетов, например
inventory.yaml:---# Примерall:hosts:deploy:ansible_connection: localcpn001: {}cpn002: {}cpn003: {}kcn001: {}kcn00X: {}csn001: {}csn00X: {}lm001: {} -
Проверьте список серверов, на которых произойдет обновление:
$ ansible-playbook -i inventory.yaml \-f 20 \-e env=vkcloud \-e ansible_python_interpreter=/usr/bin/python3 \-e @list-packages-auto-cve.yaml \-e @list-packages-pre-update.yaml \-e @list-packages-kernels.yaml \--skip-tag repos_update \update_os.yaml \--list-hosts -
Запустите плейбук обновления пакетов:
$ ansible-playbook -i inventory.yaml \-f 20 \-e env=vkcloud \-e ansible_python_interpreter=/usr/bin/python3 \-e @list-packages-auto-cve.yaml \-e @list-packages-pre-update.yaml \-e @list-packages-kernels.yaml \--skip-tag repos_update \update_os.yaml -
Добавьте правило
udev, обновивDISK_NAME_PREFIXв соответствии с названием дисков в системе (например,KERNEL=="sd[b-z]"):$ ssh <CEPH_SERVER_NAME>$ cat <<EOF | sudo tee /etc/udev/rules.d/65-disk-owner.rulesKERNEL=="<DISK_NAME_PREFIX>[b-z]*", OWNER="ceph"EOFЗдесь
<CEPH_SERVER_NAME>— имя сервера Ceph. -
Проверьте наличие роутеров на управляющих (Control Plane) или сетевых узлах (Network Node). Если роутеры есть, выполните их миграцию:
-
Получите список всех L3 агентов:
# openstack network agent list --agent-type l3Пример ожидаемого результата+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| fbce1819-9e94-4550-b694-da14e00cf6f3 | L3 agent | cpn001 | nova | :-) | UP | neutron-l3-agent || 7604e0c3-9ca9-484e-82a8-94930252f82e | L3 agent | cpn002 | nova | :-) | UP | neutron-l3-agent || ed72b979-bc2d-490f-b059-60cd753346ef | L3 agent | cpn003 | nova | :-) | UP | neutron-l3-agent || eb3577de-736a-42c5-adc5-f02b33429f07 | L3 agent | kcn001 | nova | :-) | UP | neutron-l3-agent || 5a26f82b-967a-4b08-a1d1-e6c07d489127 | L3 agent | kcn002 | nova | :-) | UP | neutron-l3-agent |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+ -
Проверьте, что узлы, с которого и на который выполняется миграция, имеют режим
agent_mode=dvr_snat:# openstack network agent show <SRC_l3_ID># openstack network agent show <DST_l3_ID>Здесь:
-
<SRC_l3_ID>— идентификатор L3 агента, с которого выполняется миграция. -
<DST_l3_ID>— идентификатор L3 агента, на который выполняется миграция.Пример команды и ожидаемого результата# openstack network agent show ed72b979-bc2d-490f-b059-60cd753346ef+-------------------+-----------------------------------------------------------------------------+| Field | Value |+-------------------+-----------------------------------------------------------------------------+| admin_state_up | UP || agent_type | L3 agent || alive | :-) || availability_zone | nova || binary | neutron-l3-agent || configuration | {'agent_mode': 'dvr_snat', 'handle_internal_only_routers': True, || |'external_network_bridge': '', 'gateway_external_network_id': '', || |'interface_driver':'neutron.agent.linux.interface.OVSInterfaceDriver', || |'log_agent_heartbeats': False, 'routers': 1,'ex_gw_ports': 1,'interfaces': 1,|| |'floating_ips': 0} || created_at | 2024-07-26 16:01:42 || description | None || ha_state | None || host | cpn003 || id | ed72b979-bc2d-490f-b059-60cd753346ef || last_heartbeat_at | 2024-07-29 11:23:25 || name | None || resources_synced | None || started_at | 2024-07-26 16:01:42 || topic | l3_agent |+-------------------+-----------------------------------------------------------------------------+
-
-
Получите список роутеров на L3 агенте, с которого выполняется миграция:
# openstack router list --agent <SRC_l3_ID>Здесь
<SRC_l3_ID>— идентификатор L3 агента.Пример команды и ожидаемого результата# openstack router list --agent fbce1819-9e94-4550-b694-da14e00cf6f3+--------------------------------------+--------+--------+-------+----------------------------------+-------------+-------+| ID | Name | Status | State | Project | Distributed | HA |+--------------------------------------+--------+--------+-------+----------------------------------+-------------+-------+| f0620d62-ab42-4ff7-bbec-5e5440446517 | router | ACTIVE | UP | ec5bd160e5ea4d8fb7ed07a099118437 | True | False |+--------------------------------------+--------+--------+-------+----------------------------------+-------------+-------+ -
Проверьте, что роутер размещен на агенте, с которого будет выполнятся миграция:
# openstack network agent list --router <ROUTER_ID>Здесь
<ROUTER_ID>— идентификатор роутера.Пример команды и ожидаемого результата# openstack network agent list --router f0620d62-ab42-4ff7-bbec-5e5440446517+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| fbce1819-9e94-4550-b694-da14e00cf6f3 | L3 agent | cpn001 | nova | :-) | UP | neutron-l3-agent |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+ -
Удалите роутер с агента, на котором он расположен, и добавьте его на агент, выбранный ранее для миграции.
# openstack network agent remove router <SRC_l3_ID> <ROUTER_ID> --l3# openstack network agent add router <DST_l3_ID> <ROUTER_ID> --l3Здесь:
-
<SRC_l3_ID>— идентификатор L3 агента, с которого выполняется миграция. -
<DST_l3_ID>— идентификатор L3 агента, на который выполняется миграция. -
<ROUTER_ID>— идентификатор роутера, который нужно перенести.Пример команд# openstack network agent remove router fbce1819-9e94-4550-b694-da14e00cf6f3 f0620d62-ab42-4ff7-bbec-5e5440446517 --l3# openstack network agent add router 7604e0c3-9ca9-484e-82a8-94930252f82e f0620d62-ab42-4ff7-bbec-5e5440446517 --l3
-
-
Проверьте, что роутер запустился на агенте после миграции:
# openstack network agent list --router <ROUTER_ID>Здесь
<ROUTER_ID>— идентификатор роутера.Пример команды и ожидаемого результата# openstack network agent list --router f0620d62-ab42-4ff7-bbec-5e5440446517+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+| 7604e0c3-9ca9-484e-82a8-94930252f82e | L3 agent | cpn002 | nova | :-) | UP | neutron-l3-agent |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+ -
Проверьте доступность роутера с помощью команды
ping. -
Проверьте, что пространство имен (namespace) роутера есть на узле, на который он был перенесен:
# ip netns | grep <ROUTER_ID>Здесь
<ROUTER_ID>— идентификатор роутера.Пример команды и ожидаемого результата# ip netns | grep f0620d62-ab42-4ff7-bbec-5e5440446517snat-f0620d62-ab42-4ff7-bbec-5e5440446517 (id: 123)qrouter-f0620d62-ab42-4ff7-bbec-5e5440446517 (id: 122)
-
-
Последовательно перезагрузите серверы, кроме гипервизоров с High-IOPS дисками (хосты из группы
vkcloud_scst_iscsi), предварительно убедившись в запуске всех сервисов и отсутствии ошибок в работе Платформы после перезагрузки каждого сервера:-
Зайдите на обновленный сервер и перезагрузите его:
$ ssh <SERVER_NAME>$ sudo shutdown -r nowЗдесь
<SERVER_NAME>— имя обновленного сервера из файлаinventory.yaml, созданного на предыдущих шагах. -
Убедитесь, что операционная система загрузилась без ошибок:
$ systemctl status | head -n 5● <Server_name>State: runningJobs: 0 queuedFailed: 0 unitsSince: <date>; 16min ago$ systemctl list-units --failedUNIT LOAD ACTIVE SUB DESCRIPTION0 loaded units listed.$ uname -r6.1.52-1.el7.3.x86_64 -
После перезапуска всех управляющих узлов проверьте, что все поды в Kubernetes запущены:
# Kubernetes Master$ sudo kubectl get pods -A | grep -v -e Running -e Compl
-