Модуль устарел.

Мы переименовали модуль: раньше он назывался deckhouse-commander, а теперь просто commander. Все обновления будут приходить в модуль под новым именем. Для пользователя ничего не меняется: интерфейс будет доступен на том же адресе, и база данных будет использоваться та же. Но технически нужно выключить старый модуль и включить новый.

Заменить старый модуль на новый можно без потери данных, но для этого нужно соблюсти три условия, если используете PostgreSQL из поставки модуля. Отдельно рассмотрим конфигурацию с внешней базой: с ней все просто.

Если используете внешнюю базу данных PostgreSQL

Если используете свою инсталляцию PostgreSQL, то нужно сделать несколько шагов:

  1. Сделать резервную копию данных базы данных (рекомендуется)

  2. Включить модуль commander

  3. Перейти на новые зависимости в существующих кластерах

Убедитесь, что используется внешняя база данных

В конфигурации модуля в разделе 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-agentcommander-agent
  • deckhouse-adminconsole

Для этого достаточно включить модуль 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, то нужно сделать несколько шагов:

  1. Обновить модуль deckhouse-commander как минимум до версии 1.4.3

  2. Сделать резервную копию данных базы данных

  3. Включить модуль commander

  4. Перейти на новые зависимости в существующих кластерах

Убедитесь, что используется внутренняя база данных

В конфигурации модуля в разделе 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-agentcommander-agent
  • deckhouse-adminconsole

Для этого достаточно включить модуль 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