Тема
Требования к обновлению
- Доступ до harbor.bootsman.host для обновления или выгрузки образов в ваш локальный регистри
- Наличие активной лицензии
- Наличие дистрибутивов:
bootsmanctl 2.5.0
- Наличие списка образов для выгрузки.
- Наличие в управляющем кластере 3 мастеров и 3 воркеров.
- Для baremetal обеспечьте как минимум одну свободную ноду.
- Все кластеры должны иметь версию Kubernetes 1.27.6+.
Внимание
Обновление подчиненного кластера проводим только путем правки Yaml-манифестов
Подготовка
Загрузка образов
Используя полученный список и скрипт, выгрузите из harbor.bootsman.host указанные образы и разместите их в вашем хранилище образов.
Для загрузки требуемых образов узнайте версию установленного кластера с помощью команды:
bash
kubectl get deployment -n default -o wide | grep museum | awk '{print $7}' | awk -F":" '{print $2}'С дистрибутивом есть файл с именем вида "${bootsman_version}.yaml".
В списке содержатся необходимые образы для конкретной версии bootsman.
Скачивание выполните командой:
bash
./mirror.sh v2.5.0.yamlПодготовка конфигурации
Начиная с версии v2.5.0, Bootsman начинает работать с структурированным файлом конфигурации в YAML-формате.
Для облегчения перехода вы можете использовать инструмент миграции для конвертации конфигурации v2.4.1 в v2.5.0 Конвертация:
bash
source config_2.4.1
./bootsmanctl mgmt config migrate -i {++${PROVIDER}++}Обновление управляющего кластера
Для обновления перенесите новый дистрибутив на АРМ администратора в директорию, содержащую данные об установке.
Запустите обновление.
bash
./bootsmanctl management update {++${cluster-name}++} -c bootsmanctl.config.yamlГде: - ${cluster-name} - имя кластера, данное ему при установке.
Обновление будет продолжительным (около 30 минут), время может варьироваться в зависимости от выделенных ресурсов.
Обновление подчинённого кластера
Обновление подчинённого кластера происходит с помощью kubectl.
Используя kubeconfig управляющего кластера, выполните команды:
Запрос списка всех подчинённых кластеров и воркерпулов:
bash
kubectl get cluster.provisioning.bootsman.tech -A
kubectl get workerpool.provisioning.bootsman.tech -AИз полученного списка получите имя подчинённого кластера(<mark>${cluster_name}</mark>) и его неймспейс (<mark>${namespace}</mark>)
Обновление:
bash
kubectl patch cluster.provisioning.bootsman.tech {++${cluster_name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"bootsmanVersion\": \"v2.5.0\"}}"Дождитесь завершения обновления подчиненного кластера
bash
kubectl get cluster.provisioning.bootsman.tech {++${cluster_name}++} -n {++${namespace}++} -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
TrueДополнительные правки для подчиненного кластера VK Cloud
Если ваш подчиненный кластер запущен не в VK Cloud пропустите эту главу.
По завершению обновления подчиненного кластера VK Cloud требуется внести правки в Yaml-манифесты
bash
export WORKERPOOL_ZONE=$(kubectl get workerpool.provisioning.bootsman.tech {++${workerpool_name}++} -n {++${namespace}++}-wk -n default -o jsonpath='{.spec.infrastructure.vkProviderConfig.availabilityZone}')
export CLUSTER_ZONE=$(kubectl get cluster.provisioning.bootsman.tech {++${cluster_name}++} -n {++${namespace}++} -n default -o jsonpath='{.spec.capiConfig.infrastructure.vkProviderConfig.template.availabilityZone}')
kubectl patch workerpool.provisioning.bootsman.tech {++${workerpool_name}++} -n {++${namespace}++}-wk -n default --type=merge -p "{\"spec\": {\"infrastructure\": {\"vkProviderConfig\": {\"availabilityZones\": [\"${WORKERPOOL_ZONE}\"]}}}}"
kubectl patch workerpool.provisioning.bootsman.tech {++${workerpool_name}++} -n {++${namespace}++}-wk -n default --type=json -p '[{"op": "remove", "path": "/spec/infrastructure/vkProviderConfig/availabilityZone"}]'
kubectl patch cluster.provisioning.bootsman.tech {++${cluster_name}++} -n {++${namespace}++} -n default --type=merge -p "{\"spec\": {\"capiConfig\": {\"infrastructure\": {\"vkProviderConfig\": {\"template\": {\"availabilityZones\": [\"${CLUSTER_ZONE}\"]}}}}}}"
kubectl patch cluster.provisioning.bootsman.tech {++${cluster_name}++} -n {++${namespace}++} -n default --type=json -p '[{"op": "remove", "path": "/spec/capiConfig/infrastructure/vkProviderConfig/template/availabilityZone"}]'Обновление Longhorn Volume Engine
При обновлении модуля Longhorn потребуется дополнительно обновить старые тома на новую версию
Для начала потребуется выключить модули, использующие longhorn.
Заметка
Можно произвести выключение с помощью UI для этого ознакомьтесь с статьей Работа с модулями
bash
kubectl patch logging.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": true}}"
kubectl patch BillingPluginServer.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": true}}"
kubectl patch MonitoringFiles.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": true}}"
kubectl patch RancherMonitoring.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": true}}"
kubectl patch RancherUIBillingAPI.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": true}}"После выключения зайдите через Web-интерфейс в панель управления Longhorn Для этого авторизируйтесь на сайте и зайдите в кластер ${name} -n ${namespace}
Откройте панель управления longhorn 
Зайдите в управление Volume 
Обновите Volume 
Выберите доступный Engine image 
Повторите обновление для всех Volume отмеченных зеленой стрелкой
После обновления последнего из Volumes нужно удалить старый Engine image Для получения списка всех Engine image переходим в Settings > Engine Image 
Удалите Engine image предыдущей версии 
По завершению удаления, можно снова запустить модули
bash
kubectl patch logging.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": false}}"
kubectl patch BillingPluginServer.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": false}}"
kubectl patch MonitoringFiles.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": false}}"
kubectl patch RancherMonitoring.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": false}}"
kubectl patch RancherUIBillingAPI.configuration.bootsman.tech {++${name}++} -n {++${namespace}++} --type=merge --patch="{\"spec\": {\"disabled\": false}}"Заметка
Данную процедуру потребуется провести с каждый кластером