VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Обновление пакетов

Проверка совместимости новой версии ядра

Проверьте, что новое ядро 6.1.52-1.el7.3 совместимо с используемыми серверами:

  1. Выберите один сервер (кроме гипервизора с High-IOPS дисками).

  2. Если требуется, переведите его в режим обслуживания согласно разделам Руководства администратора VK Private Cloud:

    • Администрирование ПлатформыУправление инфраструктурой, на которой развёрнута ПлатформаУправление вычислительными узлами (гипервизорами).
    • Администрирование ПлатформыУправление инфраструктурой, на которой развёрнута ПлатформаОперации с управляющими узлами.
  3. Установите новую версию ядра.

  4. Загрузите ОС с новым ядром.

Если тестовое обновление ядра прошло успешно, переходите к следующим шагам. На остальных серверах ядро будет обновлено на шагах, описанных в разделе Обновление системных пакетов.

Если в Платформе используются серверы разных производителей или серверы, сильно отличающиеся по конфигурации, выполните такую проверку на каждом типе серверов, используемых в Платформе:

Пример команды проверки текущей версии ядра
$ uname -r6.1.38-2.el7.3.x86_64

Обновление системных пакетов

Описание

Пакеты обновления описаны в файлах:

  • packages-auto-cve.yaml — переменные для Ansible, содержащие последние версии пакетов устранения уязвимостей.

  • list-packages-pre-update.yaml — список пакетов, которые обновляются до общего обновления.

  • list-packages-auto-cve.yaml — список пакетов с cve-уязвимостями. Создается запуском скрипта create_packages_list.py с использованием информации из var_pre_update.yaml.

  • list-packages-kernels.yaml — список пакетов с обновлениями ядра.

  • update_os.yaml — Ansible-плейбук, который:

    • Переподключает rpm-репозитории на новую версию Nexus.
    • Заходит на хосты из Inventory.
    • Получает список установленных пакетов.
    • Обновляет пакеты, которые стоят и есть в списках на обновление.

Обновление

  1. Распакуйте входящий в состав дистрибутива архив repos_mcs_distr_box-${NEW_RELEASE_NAME}.tar.gz:

    $ cd $NEW_DISTRIB_DIR$ tar xvf repos_mcs_distr_box-${NEW_RELEASE_NAME}.tar.gz
  2. Перейдите в директорию repos_mcs_distr_box-${NEW_RELEASE_NAME}/upgrade/os/ansible/

    $ cd repos_mcs_distr_box-${NEW_RELEASE_NAME}/upgrade/os/ansible/
  3. Сформируйте Inventory-файл, в котором будут перечислены все серверы, требующие обновления пакетов, например inventory.yaml:

    ---# Примерall:  hosts:    deploy:      ansible_connection: local    cpn001: {}    cpn002: {}    cpn003: {}    kcn001: {}    kcn00X: {}    csn001: {}    csn00X: {}    lm001: {}
  4. Проверьте список серверов, на которых произойдет обновление:

    $ 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 \  -e nexus_host='<DEPLOY_NODE_FQDN>:8081' \  update_os.yaml \  --list-hosts

    Здесь <DEPLOY_NODE_FQDN> — значение переменной deploy_node_fqdn из файла minimal.yml.

  5. Запустите плейбук обновления пакетов:

    $ 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 \  -e nexus_host='<DEPLOY_NODE_FQDN>:8081' \  update_os.yaml
  6. Добавьте правило 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.

  7. Проверьте наличие роутеров на управляющих (Control Plane) или сетевых узлах (Network Node). Если роутеры есть, выполните их миграцию:

    1. Получите список всех 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 |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+
    2. Проверьте, что узлы, с которого и на который выполняется миграция, имеют режим 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                                                                    |+-------------------+-----------------------------------------------------------------------------+
    3. Получите список роутеров на 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 |+--------------------------------------+--------+--------+-------+----------------------------------+-------------+-------+
    4. Проверьте, что роутер размещён на агенте, с которого будет выполнятся миграция:

      # 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 |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+
    5. Удалите роутер с агента, на котором он расположен, и добавьте его на агент, выбранный ранее для миграции.

      # 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
    6. Проверьте, что роутер запустился на агенте после миграции:

      # 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 |+--------------------------------------+------------+--------+-------------------+-------+-------+------------------+
    7. Проверьте доступность роутера с помощью команды ping.

    8. Проверьте, что пространство имён (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)
  8. Последовательно перезагрузите серверы, кроме гипервизоров с High-IOPS дисками (хосты из группы vkcloud_scst_iscsi), предварительно убедившись в запуске всех сервисов и отсутствии ошибок в работе Платформы после перезагрузки каждого сервера:

    1. Зайдите на обновлённый сервер и перезагрузите его:

      $ ssh <SERVER_NAME>$ sudo shutdown -r now

      Здесь <SERVER_NAME> — имя обновлённого сервера из файла inventory.yaml, созданного на предыдущих шагах.

    2. Убедитесь, что операционная система загрузилась без ошибок:

      $ systemctl status | head -n 5● <Server_name>    State: running     Jobs: 0 queued   Failed: 0 units    Since: <date>; 16min ago$ systemctl list-units --failed  UNIT LOAD ACTIVE SUB DESCRIPTION0 loaded units listed.$ uname -r6.1.52-1.el7.3.x86_64
    3. После перезапуска всех управляющих узлов проверьте, что все поды в Kubernetes запущены:

      # Kubernetes Master$ sudo kubectl get pods -A | grep -v -e Running -e Compl