Подготовка к обновлению#
На этой стадии подготовьте установочный узел и установочный пакет, сохраните состояние платформы и создайте резервную копию баз данных.
Требования#
Все команды инструкции следует выполнять на установочном узле, на котором установлены и настроены следующие утилиты, сервис и привилегии:
утилита
kubectlс доступом к API кластера от имени администратора;утилита Ansible Navigator, а также пакет
ansible-coreверсии 2.14 или новее с коллекциейansible.posix;сервис
rsync;доступ по SSH с ключом ко всем узлам кластера от имени пользователя с правом
sudo.
Предупреждение
Сервис rsync должен быть установлен также на всех узлах кластера в процессе размещения образов.
Примечание
Требование к сервису rsync, а также место под архивы образов на установочном узле и во временном каталоге /tmp/images на узлах кластера относятся к сценарию без доступа в интернет.
При обновлении кластера с доступом в интернет стадия размещения образов пропускается, однако свободное место под распакованные образы новой версии в хранилище containerd (~45 ГБ на каждом рабочем узле) необходимо в обоих сценариях.
Установочный пакет#
Загрузите из Личного кабинета установочный пакет для кластера без доступа в интернет aa-kubernetes-bundle-<version>-offline.tar.gz и доставьте его на установочный узел.
Состав пакета описан в инструкции по планированию.
По сравнению с пакетом версии 2.0-upd2 в каталоге images/ добавлены образы automation-dashboard и dashboard-operator, а в каталоге operators/ – манифест dashboard-operator-deploy.yaml.
Примечание
Для кластера с доступом в интернет используйте установочный пакет aa-kubernetes-bundle-<version>.tar.gz с учетом особенностей онлайн-обновления.
Распакуйте установочный пакет:
mkdir -p ~/aa-bundle
tar -xzf aa-kubernetes-bundle-<version>-offline.tar.gz -C ~/aa-bundle
Здесь <version> – номер новой версии платформы.
Дисковое пространство#
Убедитесь, что на узлах достаточно свободного места:
Узел |
Свободное место |
Назначение |
|---|---|---|
Установочный узел |
Не менее 35 ГБ |
Архив установочного пакета (~8 ГБ) и распакованный пакет (~25 ГБ, из них ~24 ГБ – каталог |
Каждый рабочий узел кластера |
Около 70 ГБ дополнительно к текущему потреблению |
Временная копия архивов образов в каталоге |
Сценарий размещения образов перед копированием проверяет свободное место: прогнозируемая занятость диска каждого узла не должна превысить 80% после размещения этих образов.
При заполнении диска на 85% служба kubelet начинает вытеснять образы, и еще не запущенные поды переходят в состояние ImagePullBackOff.
Рекомендуется размер диска рабочего узла от 200 ГБ.
Примечание
Во время обновления на узлах кластера одновременно находятся образы обеих версий: работающие поды созданы из образов версии 2.0-upd2, а образы новой версии должны быть загружены и доступны.
Место, занятое образами предыдущей версии, освобождается на стадии очистки.
Если после первичного развертывания на узлах остались каталоги /tmp/images с архивами образов предыдущей версии, удалите их до начала обновления.
Сохранение состояния#
Сохраните текущее состояние ресурсов платформы, так как оно понадобится для контроля обновления и для отката:
mkdir -p ~/preupgrade-exports
kubectl get aas,acs,pahs,edas -n astra-automation -o yaml > ~/preupgrade-exports/custom-resources.yaml
kubectl get deploy,sts,svc,ingress -n astra-automation -o yaml > ~/preupgrade-exports/workloads.yaml
kubectl get pods -n astra-automation > ~/preupgrade-exports/pods.txt
Сохраните определения собственных ресурсов (CRD) и объекты Deployment операторов исходной версии, поскольку откат, если потребуется, невозможен без манифестов операторов:
kubectl get crd -o name | grep astra-automation.ru | xargs kubectl get -o yaml > ~/preupgrade-exports/crds.yaml
kubectl get deploy aa-operator-aa-manager ac-operator-ac-manager pah-operator-pah-manager eda-operator-eda-manager \
-n astra-automation -o yaml > ~/preupgrade-exports/operators.yaml
Совет
Если сохранился установочный пакет версии 2.0-upd2, манифесты операторов исходной версии можно при откате взять из каталога operators/ этого пакета.
Проверка работоспособности#
Убедитесь, что платформа находится в состоянии Successful и отвечает по API:
kubectl get aas aa-demo -n astra-automation -o jsonpath='{.status.conditions}' | jq .
curl -sk https://<hostname>/api/gateway/v1/ping/
Здесь <hostname> – доменное имя платформы, заданное в поле public_base_url манифеста приложения.
Ожидаемый результат: условие "type": "Successful" с сообщением "Last reconciliation succeeded" и ответ проверки доступности:
{"version":"2.5","pong":"...","status":"good","db_connected":true,"proxy_connected":true}
Примечание
В версии 2.0-upd2 поле version ответа содержит значение 2.5 – номер версии базовой платформы автоматизации.
После обновления поле содержит номер версии Astra Automation.
Убедитесь, что установлена именно версия 2.0-upd2, и получите список образов всех компонентов:
kubectl get deploy,sts -n astra-automation \
-o jsonpath='{range .items[*].spec.template.spec.containers[*]}{.image}{"\n"}{end}' | sort -u
Ожидаемый результат: все образы имеют тег 2.0-upd2.
Если в списке есть образы с тегами 2.0 или 2.0-upd1, то платформа не соответствует требованиям по исходной версии.
В этом случае сначала обновите платформу до версии 2.0-upd2.
Обновлять неработоспособную платформу нельзя.
Резервное копирование#
Предупреждение
Сохраненные манифесты – не резервная копия данных. Миграции схемы базы данных, выполняемые при обновлении, необратимы, так что после успешных миграций вернуться на версию 2.0-upd2 можно только восстановлением баз данных из резервной копии.
Перед обновлением:
создайте дамп всех баз данных компонентов штатными средствами СУБД PostgreSQL, например утилитой
pg_dump. Для СУБД, развернутой в кластере, выполните дамп через подStatefulSetСУБД с помощью командыkubectl exec;сохраните секреты шифрования:
kubectl get secret -n astra-automation -o name | grep encryption-secret \ | xargs kubectl get -n astra-automation -o yaml > ~/preupgrade-exports/encryption-secrets.yaml
Без секретов шифрования восстановить данные из резервной копии нельзя. Храните дампы и файл с секретами в надежном месте.