Обновление SPYT
В этой статье описано, как обновить SPYT с помощью оператора Kubernetes.
Что важно знать перед обновлением
При обновлении SPYT кластер YTsaurus продолжает работать в обычном режиме, все операции с данными доступны.
Во время обновления SPYT происходят следующие изменения:
- Кластер YTsaurus работает в штатном режиме;
- Серверные компоненты YTsaurus не перезапускаются;
- Доступ к данным через YTsaurus API сохранён;
- Новая версия устанавливается отдельным ресурсом рядом с текущей и не заменяет её, поэтому на кластере одновременно доступны несколько версий SPYT.
Перед обновлением проверьте совместимость версий SPYT, Spark, Java, Scala и Python в таблице совместимости.
Доступные версии SPYT и изменения в них описаны в релизах SPYT.
Подготовка к обновлению
1. Проверьте текущую версию SPYT
Проверьте текущую версию SPYT в спецификации:
kubectl get spyt -n <namespace> -o yaml | grep image
Пример вывода:
image: ghcr.io/ytsaurus/spyt:2.8.0
2. Проверьте состояние SPYT
Проверьте, что SPYT находится в состоянии Finished:
kubectl get spyt -n <namespace>
Пример вывода:
NAME RELEASESTATUS
<spyt-name> Finished
Если SPYT не находится в состоянии Finished, дождитесь завершения текущих операций.
3. Сохраните резервную копию спецификации SPYT
Сохраните текущую спецификацию SPYT:
kubectl get spyt -n <namespace> -o yaml > spyt-backup.yaml
Обновление SPYT
Оператор не обновляет уже созданный ресурс SPYT при повторном kubectl apply. Поэтому новую версию SPYT добавляют как отдельный ресурс с собственным именем, не трогая существующий. Обе версии сосуществуют на кластере, их артефакты хранятся в Кипарисе рядом, а старую версию можно удалить позже.
1. Подготовьте спецификацию новой версии SPYT
За основу удобно взять текущую спецификацию SPYT:
kubectl get spyt <spyt-name> -n <namespace> -o yaml
Создайте файл spyt-<new-version>.yaml с новым именем ресурса в поле metadata.name и новой версией образа в поле image:
apiVersion: cluster.ytsaurus.tech/v1
kind: Spyt
metadata:
name: <new-spyt-name> # Имя, отличное от существующего ресурса
namespace: <namespace>
spec:
image: ghcr.io/ytsaurus/spyt:<new-version>
ytsaurus:
name: <ytsaurus-name>
Пример спецификации для версии 2.9.0
apiVersion: cluster.ytsaurus.tech/v1
kind: Spyt
metadata:
name: spyt-2-9-0
namespace: <namespace>
spec:
image: ghcr.io/ytsaurus/spyt:2.9.0
ytsaurus:
name: <ytsaurus-name>
2. Примените спецификацию
Примените спецификацию новой версии:
kubectl apply -f spyt-<new-version>.yaml -n <namespace>
Оператор создаст новый ресурс SPYT и загрузит артефакты новой версии в Кипарис. Существующий ресурс и его артефакты остаются на месте.
3. Следите за обновлением
Следите за состоянием SPYT во время обновления:
kubectl get spyt -n <namespace> -w
SPYT проходит через следующие состояния обновления:
|
Статус |
Описание |
|
|
Оператор создаёт пользователя в Кипарисе |
|
|
Оператор загружает файлы в Кипарис |
|
|
Система завершила обновление |
4. Проверьте результат
Убедитесь, что новый ресурс SPYT создан и достиг статуса Finished. Существующий ресурс при этом сохраняется:
kubectl get spyt -n <namespace>
Пример вывода:
NAME RELEASESTATUS
<spyt-name> Finished
<new-spyt-name> Finished
Проверьте версию образа:
kubectl get spyt -n <namespace> -o yaml | grep image
Пример вывода:
image: ghcr.io/ytsaurus/spyt:2.9.0
Несколько версий SPYT на одном кластере
Описанный выше процесс добавляет новую версию SPYT как отдельный ресурс, не затрагивая существующий. Так на одном кластере YTsaurus сосуществуют несколько версий SPYT — это позволяет разным командам использовать разные версии одновременно.
Артефакты SPYT и Spark находятся в Кипарисе по пути //home/spark/. Оператор не удаляет старые артефакты, поэтому версии не мешают друг другу.
Удаление старой версии SPYT
Когда старая версия SPYT больше не нужна, удалите её ресурс и при необходимости, освободите место в Кипарисе.
-
Удалите ресурс SPYT:
kubectl delete spyt <old-spyt-name> -n <namespace> -
Удалите артефакты старой версии из Кипариса через веб-интерфейс YTsaurus. Для каждой версии SPYT артефакты хранятся в двух узлах — с дистрибутивом и с конфигурацией. Откройте каталоги
//home/spark/spyt/releasesи//home/spark/conf/releases, найдите узлы с номером ненужной версии и удалите их из контекстного меню.