Мы переименовали модуль: раньше он назывался deckhouse-commander
, а теперь просто commander
. Все обновления будут приходить в модуль под новым именем. Для пользователя ничего не меняется: интерфейс будет доступен на том же адресе, и база данных будет использоваться та же. Но технически нужно выключить старый модуль и включить новый.
Заменить старый модуль на новый можно без потери данных, но для этого нужно соблюсти три условия, если используете PostgreSQL из поставки модуля. Отдельно рассмотрим конфигурацию с внешней базой: с ней все просто.
Если используете внешнюю базу данных PostgreSQL
Если используете свою инсталляцию PostgreSQL, то нужно сделать несколько шагов:
-
Сделать резервную копию данных базы данных (рекомендуется)
-
Включить модуль
commander
. -
Перейти на новые зависимости в существующих кластерах
Убедитесь, что используется внешняя база данных
В конфигурации модуля в разделе postgres
должен быть выбран режим работы External
kubectl get mc deckhouse-commander -oyaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: deckhouse-commander
...
spec:
enabled: true
settings:
postgres:
...
mode: External # <------- режим работы с БД
version: 1
Шаг 1: создайте резервную копию базы данных (рекомендуется)
Смотрите официальную документацию.
Шаг 2: включите модуль commander
Включите модуль commander
.
Миграция выполнится автоматически. Настройки модуля сами перенесутся из старого ModuleConfig/deckhouse-commander
. По завершении миграции модуль deckhouse-commander
выключится. Новый модуль будет доступен по тому же адресу и развернут в том же неймспейсе d8-commander
, что и старый.
cat <<EOF | kubectl create -f -
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander
spec:
enabled: true
EOF
Шаг 3: переключитесь на новые зависимости в существующих кластерах
В результате будут заменены два модуля:
deckhouse-commander-agent
→commander-agent
deckhouse-admin
→console
Для этого достаточно включить модуль commander-agent
. Что произойдет в результате:
- Модуль
commander-agent
автоматически выключит модулиdeckhouse-commander-agent
иdeckhouse-admin
, и включитconsole
. - Администрирование в Коммандере снова заработает
Это можно сделать вручную или через шаблон.
Вариант 1: через шаблон
В используемые шаблоны во вкладку Ресурсы добавьте манифест commander-agent
и обновите все кластеры на этот шаблон.
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander-agent
labels:
heritage: deckhouse-commander
spec:
enabled: true
version: 1
settings:
commanderUrl: "https://{{ .dc_domain }}/agent_api/{{ .dc_clusterUUID }}"
Вариант 2: вручную
В прикладных кластерах включить модуль commander-agent
. В него нужно перенести настройки из deckhouse-commander-agent
без изменений. Разница с предыдущим вариантом лишь в том, что нужно вручную обойти все кластеры.
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander-agent
labels:
heritage: deckhouse-commander
spec:
enabled: true
version: 1
settings:
commanderUrl: "https://....из deckhouse-commander-agent ...."
Восстановление в случае потери данных
Если в ходе миграции по какой-то причине была повреждена база данных, ее можно восстановить в новый модуль commander
без отката на старый модуль.
Чтобы восстановить данные, используйте резервную копию из шага 1.
Если используете внутреннюю базу данных PostgreSQL
Если используете базу данных из модуля operator-postgres
, то нужно сделать несколько шагов:
-
Обновить модуль
deckhouse-commander
как минимум до версии1.4.3
-
Сделать резервную копию данных базы данных
-
Включить модуль
commander
-
Перейти на новые зависимости в существующих кластерах
Убедитесь, что используется внутренняя база данных
В конфигурации модуля в разделе postgres
должен быть выбран режим работы Internal
.
kubectl get mc deckhouse-commander -oyaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: deckhouse-commander
...
spec:
enabled: true
settings:
postgres:
...
mode: Internal # <------- режим работы с БД
version: 1
Шаг 1: обновите модуль
Обновите модуль deckhouse-commander
до версии не ниже 1.4.3
. В этой версии была добавлена аннотация helm.sh/resource-policy: keep
на ресурсы PostgreSQL.
Если обновление модулей проводится в ручном режиме, нужно использовать команду:
kubectl annotate modulerelease deckhouse-commander-v1.4.8 modules.deckhouse.io/approved=true
Шаг 2: создайте резервную копию базы данных
Для резервного копирования внутренней базы данных используйте команду:
kubectl -n d8-commander exec -t commander-postgres-0 -- su - postgres -c "pg_dump -v -Fc -b -d commander" > commander.dump
Шаг 3: включите модуль commander
Включите модуль commander
.
Миграция выполнится автоматически. Настройки модуля сами перенесутся из старого ModuleConfig/deckhouse-commander
. По завершении миграции модуль deckhouse-commander
выключится. Новый модуль будет доступен по тому же адресу и развернут в том же неймспейсе d8-commander
, что и старый.
cat <<EOF | kubectl create -f -
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander
spec:
enabled: true
EOF
Шаг 4: переключитесь на новые зависимости в существующих кластерах
В результате будут заменены два модуля:
deckhouse-commander-agent
→commander-agent
deckhouse-admin
→console
Для этого достаточно включить модуль commander-agent
. Что произойдет в результате:
- Модуль
commander-agent
автоматически выключит модулиdeckhouse-commander-agent
иdeckhouse-admin
, и включитconsole
. - Администрирование в Коммандере снова заработает
Это можно сделать вручную или через шаблон.
Вариант 1: через шаблон
В используемые шаблоны во вкладку Ресурсы добавьте манифест commander-agent
и обновите все кластеры на этот шаблон.
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander-agent
labels:
heritage: deckhouse-commander
spec:
enabled: true
version: 1
settings:
commanderUrl: "https://{{ .dc_domain }}/agent_api/{{ .dc_clusterUUID }}"
Вариант 2: вручную
В прикладных кластерах включить модуль commander-agent
. В него нужно перенести настройки из deckhouse-commander-agent
без изменений. Разница с предыдущим вариантом лишь в том, что нужно вручную обойти все кластеры.
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: commander-agent
labels:
heritage: deckhouse-commander
spec:
enabled: true
version: 1
settings:
commanderUrl: "https://....из deckhouse-commander-agent ...."
Восстановление в случае потери данных
Если в ходе миграции по какой-то причине была повреждена или удалена база данных, ее можно восстановить в новый модуль commander
без отката на старый модуль.
Чтобы восстановить данные, используйте команду и резервную копию из шага 2.
kubectl -n d8-commander exec -it commander-postgres-0 -- su - postgres -c "pg_restore -v -c --if-exists -Fc -d commander" < commander.dump