Обновление#

В данном разделе описан сценарий обновления DropApp с помощью утилиты Dactl.

Порядок обновления:

Предварительные условия#

Предварительные условия для обновления DropApp с помощью утилиты Dactl:

  1. Существующий кластер DropApp.

  2. Подготовленный реестр образов Harbor, например, созданный в разделе Установка реестра образов.

  3. Подготовленный RPM-репозиторий, например, созданный в разделе Создание RPM-репозитория.

Порядок подготовки к обновлению:

  1. Загрузить дистрибутивы K8S-k8sc-<version>-<distrib_number>-distrib.zip и k8s-mgmt-<version>-<distrib_number>-distrib.zip и сохранить их на машину администратора.

  2. Распаковать дистрибутивы и извлечь артефакты DropApp.

  3. Подготовить артефакты DropApp:

    • загрузить образы DropApp в реестр образов Harbor;

    • загрузить RPM-пакеты в RPM-репозиторий.

Загрузка дистрибутивов из личного кабинета#

Загрузите дистрибутив продукта и дистрибутив с управляющим слоем из Личного Кабинета клиента:

  • Архив продукта: K8S-k8sc-<version>-<distrib_number>-distrib.zip;

  • Архив управляющего слоя: k8s-mgmt-<version>-<distrib_number>-distrib.zip.

Распаковка дистрибутивов#

Примечание

В данном примере дистрибутивы находятся в каталоге /root

Архив имеет большой размер - более 10 Гб, рекомендуется перед разархивацией установить переменную окружения UNZIP_DISABLE_ZIPBOMB_DETECTION=TRUE используя команду:

export UNZIP_DISABLE_ZIPBOMB_DETECTION=TRUE

Для получения вложенных архивов и файлов разархивируйте дистрибутив:

  1. Разархивируйте из архива K8S-<version>-<distrib_number>-distrib.zip вложенные архивы:

    • K8S-k8sc-<version>-<distrib_number>-distrib.zip;

    • K8S-k8so-<version>-<distrib_number>-distrib.zip;

    • K8S-k8si-<version>-<distrib_number>-distrib.zip.

  2. Разархивируйте из архива K8S-k8sc-<version>-<distrib_number>-distrib.zip вложенные архивы с образами и RPM-пакетами дистрибутива:

    unzip ./K8S-k8sc-<version>-<distrib_number>-distrib.zip
    

    Примечание

    Выполните шаг 2 для архивов программных компонентов K8SO и K8SI.

  3. Разархивируйте архивы с образами и RPM-пакетами:

    K8SC:

    unzip ./k8sc-images-<version>-<distrib_number>-distrib.zip -d ./images_k8sc
    unzip ./k8sc-packages-<version>-<distrib_number>-distrib.zip -d ./rpms
    unzip ./rpms/k8s-k8sc-packages-<version>-<distrib_number>-SBEL9-distrib.zip -d packages/packages-sbel9
    unzip ./rpms/k8s-k8sc-packages-<version>-<distrib_number>-SBEL8-distrib.zip -d packages/packages-sbel8
    

    K8SO:

    unzip ./k8so-images-<version>-<distrib_number>-distrib.zip -d ./images_k8so
    

    K8SI:

    unzip ./k8si-images-<version>-<distrib_number>-distrib.zip -d ./images_k8si
    
  4. Разархивируйте архив с утилитой Dactl:

    unzip ./K8S-mgmt-<version>-<distrib_number>-distrib.zip -d ./mgmt
    
  5. Разархивируйте образы и бинарный файл dactl:

    unzip ./mgmt/mgmt-binaries-<version>-<distrib_number>-distrib.zip -d ./dactl
    unzip ./dactl/package/bh/dactl-<version>.zip -d ./dactl/
    unzip ./mgmt/mgmt-images-<version>-<distrib_number>-distrib.zip -d ./images-mgmt
    
  6. Проверьте версию Dactl:

    ./dactl/dactl version
    

    Вывод будет следующим:

    Platform V DropApp version: <version>
    

Подготовка артефактов DropApp#

Загрузка образов DropApp в реестр#

Dactl при загрузке образов использует утилиту skopeo.

Установите skopeo из дистрибутива SberLinux:

dnf install skopeo

Образы MGMT#

Загрузите образы из каталога images_mgmt в созданный реестр, используя Dactl:

./dactl/dactl copy images --src ./images-mgmt --dest registry.da-cluster.domain.ru/dapp

Образы K8SC#

Загрузите образы из каталога images_k8sc в созданный реестр, используя Dactl:

./dactl/dactl copy images --src ./images_k8sc --dest registry.da-cluster.domain.ru/dapp

Образы K8SO#

Загрузите образы из каталога images_k8so в созданный реестр, используя Dactl:

./dactl/dactl copy images --src ./images_k8so --dest registry.da-cluster.domain.ru/dapp

Образы K8SI#

Загрузите образы из каталога images_k8si в созданный реестр, используя Dactl:

./dactl/dactl copy images --src ./images_k8si --dest registry.da-cluster.domain.ru/dapp

Загрузка RPM-пакетов в репозиторий#

Скопируйте файлы из каталога rpms/rpms-sbel9 и/или rpms/rpms-sbel8 в существующий RPM-репозиторий.

Формирование конфигурационного файла DropAppUpgradeConfiguration#

Перед формированием конфигурационного файла DropAppUpgradeConfiguration для Dactl, убедитесь в наличии:

  • реестра с образами контейнеров новой версии DropApp;

  • репозиторий с RPM-пакетами новой версии DropApp.

  1. Создайте конфигурационный файл da-upgrade.yaml:

    da-upgrade.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: DropAppUpgradeConfiguration
    metadata:
      name: "da-cluster"
    spec:
      artifacts:
        # Реестр образов, куда были загружены образы в разделе "Подготовка артефактов DropApp"
        imageRegistry:
          host: registry.da-cluster.domain.ru
          path: dapp
          # Если реестр без аутентификации - поле можно удалить
          credentials: <credentials> # Токен аутентификации в base64 для Harbor, в приведенном примере это echo -n 'admin:Harbor12345' | base64 | base64
          certificate: <certificate> # Сертификат реестра. Если реестр имеет доверенный сертификат - поле можно удалить
     
        # Репозиторий, куда были загружены rpm пакеты в разделе "Подготовка артефактов DropApp"
        rpmRepository:
          - name: "dapp-<version>"
            baseUrl: http://my-rpm-repo.com/dapp-<version>
            gpgCheck: 1
            enabled: 1
            gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
    
  2. Для заполнения поля credentials в блоке imageRegistry необходимо использовать токен аутентификации для Harbor, для этого на машине администратора выполните следующую команду:

    echo -n "admin:<harbor-admin-password>" | base64 | base64
    

    Пример вывода:

    <credentials>==
    
  3. Для заполнения поля certificate в блоке imageRegistry необходимо использовать сертификат для Harbor, для этого на машине администратора выполните следующую команду:

    ~~bash cat ./harbor/certs/harbor.crt | base64 -w0 ~~

    Пример вывода:

    <certificate>
    

Запуск обновления кластера#

Важно

Перед обновлением кластера рекомендуется проверить наличие pod без явного владельца (ресурсов, не управляемых вышестоящими контроллерами, такими как Deployment, StatefulSet или CronJob). Наличие таких pod может привести к конфликтам состояний или непредвиденному поведению во время обновления.

  1. Выполните проверку наличия таких ресурсов с помощью команды:

    kubectl get pods -A -o json | jq -r '.items[] | select((.metadata.ownerReferences // []) | length == 0) | "\(.metadata.namespace)/\(.metadata.name)"'
    
  2. Если команда вернула список ресурсов, выполните следующие действия:

    • Оценка и сохранение данных: проанализируйте назначение каждого найденного pod. Если он содержит важные несохраненные данные, результаты выполнения или логи, извлеките и сохраните их.

    • Ручное удаление: после резервного копирования необходимых данных удалите эти pod вручную до начала процедуры обновления кластера:

      kubectl delete pod <pod_name> -n <namespace>
      

Такой подход гарантирует чистоту состояния кластера и минимизирует операционные риски при проведении плановых обновлений.

Для обновления кластера выполните команду:

./dactl/dactl upgrade cluster --config ./da-upgrade.yaml

Примечание

Если конфигурационный файл DropAppUpgradeConfiguration от кластера располагается не в каталоге по умолчанию (~/.kube/config), передайте флаг --kubeconfig

В конце установки появится сообщение:

======================================

Done! Platform V DropApp is upgraded to the version '4.1.0'
We've upgraded kubernetes, cilium, dapp-operator and mandatory components, check 'kubectl get tools -o wide' and 'kubectl get components -o wide
 
Next steps are:
  - use 'dactl upgrade component <component_name>' to upgrade other components
  - use 'dactl upgrade tool <tool_name>' to upgrade tools if it was installed without Component

Описание обновленного кластера#

Команда dactl upgrade cluster обновляет:

  • пакеты Kubernetes (Kubeadm, Kubelet) на всех узлах кластера, которыми управляет DropApp (все узлы для которых в кластере есть ресурс dropappnode);

  • Cri-o на всех узлах кластера, которыми управляет DropApp (все узлы для которых в кластере есть ресурс dropappnode);

  • Cilium до актуальной версии из текущего релиза DropApp;

  • Dapp-operator до актуальной версии из текущего релиза DropApp;

  • компоненты:

    • UI (и его инструмент Console) до актуальной версии из текущего релиза DropApp;

    • Load-balancer (и его инструмент Metallb) до актуальной версии из текущего релиза DropApp

    • Cert-management (и его инструмент Cert-manager) до актуальной версии из текущего релиза DropApp

    • Ingress-controller (и его инструмент Ingress-nginx) до актуальной версии из текущего релиза DropApp

    • Auth (и его инструмент Dex) до актуальной версии из текущего релиза DropApp

Важно

Команда dactl upgrade cluster не обновляет узлы, которые были добавлены в кластер вручную, не через ресурс DropAppNode, если такие узлы есть в кластере, то появится предупреждающее сообщение.

Команда dactl upgrade cluster идемпотентна, то есть, если в процессе обновления что-то пошло не так, то ее можно перезапустить и Dactl дообновит оставшиеся узлы кластера.

Обновление компонентов и инструментов#

Команда dactl upgrade cluster по умолчанию не обновляет остальные компоненты и инструменты, автоматическое обновление инструмента происходит только если его версия несовместима с версией Kubernetes из текущего релиза DropApp.

Вручную обновить компоненты и инструменты можно командами:

  • dactl upgrade component <имя_компонента> – используйте эту команду, чтобы обновить все инструменты в компоненте;

  • dactl upgrade tool <имя_инструмента> – используйте эту команду чтобы обновить отдельный инструмент, если он был установлен не через компонент.

Проверить корректность обновления можно в соответствии с инструкцией Чек-лист проверки корректности работы