Обновление#

В данном разделе описан сценарий обновления 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-k8sc-<version>-<distrib_number>-distrib.zip вложенные архивы с образами и RPM-пакетами дистрибутива:

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

    unzip k8sc-images-<version>-<distrib_number>-distrib.zip -d images
    unzip k8sc-packages-<version>-<distrib_number>-distrib.zip -d rpms
    unzip packages/k8s-k8sc-packages-<version>-<distrib_number>-SBEL9-distrib.zip -d packages/packages-sbel9
    unzip packages/k8s-k8sc-packages-<version>-<distrib_number>-SBEL8-distrib.zip -d packages/packages-sbel8
    
  3. Разархивируйте архив с утилитой Dactl:

    unzip k8s-mgmt-<version>-<distrib_number>-distrib.zip -d mgmt
    
  4. Разархивируйте образы и бинарный файл 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
    
  5. Проверьте версию 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_mgmt в созданный реестр, используя Dactl:

./dactl/dactl copy images --src ./images --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>
    

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

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

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

Примечание

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

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

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

Done! Platform V DropApp is upgraded to the version '4.0.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 <имя_инструмента> – используйте эту команду чтобы обновить отдельный инструмент, если он был установлен не через компонент.

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