Ручное обновление компонентов системы

В данном разделе приведены инструкции по ручному обновлению инфраструктурных компонентов системы: СУБД ClickHouse и PostgreSQL и брокера сообщений NATS.

Если версии компонентов значительно устарели, при запуске обновления системы отобразится сообщение с ключевыми словами Please perform a manual update. Пример для PostgreSQL:

Please perform a manual update postgresql to required version >= 15.0.0.

Содержание раздела:

Обновление ClickHouse

Порядок ручного обновления ClickHouse различается в зависимости от расположения инсталляции ClickHouse.

  • Вынесенная инсталляция ClickHouse

  • ClickHouse в кластере Kubernetes

Действия выполняются на каждом узле кластера ClickHouse.

Чтобы обновить ClickHouse в выделенном кластере:

  1. Скачайте RPM-пакеты clickhouse-client, clickhouse-common-static и clickhouse-server нужной версии из официального репозитория ClickHouse.

  2. Запустите обновление:

    dnf install clickhouse-client-<package_version>.rpm clickhouse-common-static-<package_version>.rpm clickhouse-server-<package_version>.rpm

    Здесь:

    • <package_version> — версия скачанных пакетов, например, 25.8.1.5101.

  3. Перезапустите сервис ClickHouse:

    systemctl restart clickhouse-server

После обновления кластера ClickHouse системным пользователям owner, writer и reader необходимо заново выдать требуемые права с помощью скрипта, приведенного ниже. Выполните скрипт на любом узле кластера ClickHouse:

-- Выдать необходимые права пользователю owner.
GRANT ON CLUSTER '{cluster}' ALL on default.* TO 'owner';
GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'owner';
GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts_columns TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.tables TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.clusters TO 'owner';
GRANT ON CLUSTER '{cluster}' SELECT ON system.asynchronous_metrics TO 'owner';

-- Выдать необходимые права пользователю writer.
GRANT ON CLUSTER '{cluster}' SELECT ON default.* TO 'writer';
GRANT ON CLUSTER '{cluster}' INSERT ON default.* TO 'writer';
GRANT ON CLUSTER '{cluster}' ALTER UPDATE ON default.* TO 'writer';
GRANT ON CLUSTER '{cluster}' ALTER DELETE ON default.* TO 'writer';
GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'writer';
GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts_columns TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.tables TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.clusters TO 'writer';
GRANT ON CLUSTER '{cluster}' SELECT ON system.asynchronous_metrics TO 'writer';

-- Выдать необходимые права пользователю reader.
GRANT ON CLUSTER '{cluster}' SELECT ON default.* TO 'reader';
GRANT ON CLUSTER '{cluster}' REMOTE on *.* TO 'reader';
GRANT ON CLUSTER '{cluster}' CLUSTER on *.* TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.disks TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.storage_policies TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.query_log TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.columns TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.parts_columns TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.tables TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.clusters TO 'reader';
GRANT ON CLUSTER '{cluster}' SELECT ON system.asynchronous_metrics TO 'reader';

Чтобы обновить ClickHouse в кластере Kubernetes:

  1. Скачайте архив установщика новой версии системы, если еще не сделали этого.

  2. Загрузите образ новой версии ClickHouse на узлы кластера, выполнив следующую команду на узле, где находится установщик:

    evoctl instance upload -m evo.infra -g Clickhouse
  3. Перейдите в каталог с helm-чартом ClickHouse, выполнив следующую команду:

    cd /opt/r-vision/infra/helm/clickhouse
  4. Получите параметры текущей установленной версии ClickHouse, выполнив следующие команды:

    NS=<namespace>
    ADMIN_PASSWORD=$(kubectl get secret -n "$NS" clickhouse -o jsonpath="{.data.admin-password}" | base64 -d)
    SYNC_PASSWORD=$(helm get values -n "$NS" clickhouse -o json | jq -r '.clusterSettings.password // ""')
    PVC_SIZE=$(helm get values -n "$NS" clickhouse -o json | jq -r '.persistence.size // ""')
    REPLICAS=$(helm get values -n "$NS" clickhouse -o json | jq -r '.replicaCount // ""')
    SHARDS=$(helm get values -n "$NS" clickhouse -o json | jq -r '.shards // ""')

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

      Вы можете получить название пространства имен, в котором установлена система, с помощью утилиты evoctl.
  5. Проверьте возможность запуска обновления с помощью опции --dry-run.

    Команда ниже только проверяет возможность запуска обновления, но не выполняет само обновление.
    helm upgrade -n "$NS" clickhouse ./ -f ./custom_values.yaml \
        --set auth.password="${ADMIN_PASSWORD:?}" \
        --set shards="${SHARDS:?}" \
        --set replicaCount="${REPLICAS:?}" \
        --set persistence.size="${PVC_SIZE:?}" \
        --set clusterSettings.password="${SYNC_PASSWORD:?}" \
        --set resources.requests.cpu=<resources_requests_cpu> \
        --set resources.requests.memory=<resources_requests_memory> \
        --set resources.limits.cpu=<resources_limits_cpu> \
        --set resources.limits.memory=<resources_limits_memory> \
        --dry-run

    Здесь и далее:

    • <resources_requests_cpu> — минимальные требуемые ресурсы процессора. По умолчанию 300m (30% времени одного ядра).

    • <resources_requests_memory> — минимальный требуемый объем ОЗУ. По умолчанию 1200Mi (1200 МиБ).

    • <resources_limits_cpu> — максимальное допустимое потребление ресурсов процессора. По умолчанию 300m (30% времени одного ядра).

    • <resources_limits_memory> — максимальное допустимое потребление ОЗУ. По умолчанию 1200Mi (1200 МиБ).

    На следующий шаг можно переходить, только если при выполнении команды выше не возникло ошибок.

    Могут возникнуть ошибки следующего вида:

    bash: <env_name>: parameter null or not set

    Здесь:

    • <env_name> — имя переменной окружения, значение которой получить не удалось: например, ADMIN_PASSWORD.

    Если ошибка возникла, выполните следующие действия для каждой из переменных с ошибкой. Ниже приведен пример действий для переменной ADMIN_PASSWORD:

    1. Выполните команду для получения значения переменной вручную:

      kubectl get secret -n "$NS" clickhouse -o jsonpath="{.data.admin-password}" | base64 -d
    2. Присвойте переменной результат выполнения предыдущей команды:

      ADMIN_PASSWORD=<admin_password>

      Здесь:

      • <admin_password> — пароль администратора ClickHouse, полученный на предыдущем шаге.

    3. Получив значения всех переменных, повторите команду проверки возможности обновления:

      helm upgrade -n "$NS" clickhouse ./ -f ./custom_values.yaml \
          --set auth.password="${ADMIN_PASSWORD:?}" \
          --set shards="${SHARDS:?}" \
          --set replicaCount="${REPLICAS:?}" \
          --set persistence.size="${PVC_SIZE:?}" \
          --set clusterSettings.password="${SYNC_PASSWORD:?}" \
          --set resources.requests.cpu=<resources_requests_cpu> \
          --set resources.requests.memory=<resources_requests_memory> \
          --set resources.limits.cpu=<resources_limits_cpu> \
          --set resources.limits.memory=<resources_limits_memory> \
          --dry-run
    4. Если повторная проверка возможности обновления не выявила ошибок, переходите к следующему шагу. В противном случае обратитесь в службу поддержки по адресу support@rvision.ru.

  6. Запустите обновление ClickHouse:

    helm upgrade -n "$NS" clickhouse ./ -f ./custom_values.yaml \
        --set auth.password="${ADMIN_PASSWORD:?}" \
        --set shards="${SHARDS:?}" \
        --set replicaCount="${REPLICAS:?}" \
        --set persistence.size="${PVC_SIZE:?}" \
        --set clusterSettings.password="${SYNC_PASSWORD:?}" \
        --set resources.requests.cpu=<resources_requests_cpu> \
        --set resources.requests.memory=<resources_requests_memory> \
        --set resources.limits.cpu=<resources_limits_cpu> \
        --set resources.limits.memory=<resources_limits_memory>
  7. Убедитесь, что обновление выполнилось успешно. Для этого запустите мониторинг подов ClickHouse, выполнив следующую команду:

    kubectl get pod -n "$NS" -l app.kubernetes.io/instance=clickhouse --watch

    После выполнения команды состояние каждого пода начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите на сочетание клавиш CTRL+C.

Обновление PostgreSQL

Порядок ручного обновления PostgreSQL различается в зависимости от расположения инсталляции PostgreSQL.

  • PostgreSQL в кластере Kubernetes

  • Вынесенная инсталляция PostgreSQL

При обновлении PostgreSQL до новой мажорной версии (например, с 14 до 15) требуется перенос данных между версиями: создание полного дампа всех баз данных в предыдущей версии PostgreSQL и восстановление из него в новой версии.

Следуйте приведенным ниже инструкциям очень внимательно, поскольку ошибочные действия могут привести к потере данных.

  1. Выведите подробный список всех баз данных, выполнив следующие команды:

    NS=<namespace>
    kubectl exec -n "$NS" sts/postgresql -- psql -U postgres -c '\l+'

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

      Вы можете получить название пространства имен, в котором установлена система, с помощью утилиты evoctl.
  2. Сохраните отобразившийся список. Он потребуется вам для контроля восстановления из дампа в конце процедуры обновления.

  3. Оцените суммарный объем дискового пространства, занимаемый всеми базами данных PostgreSQL, выполнив следующую команду:

    kubectl exec -n "$NS" sts/postgresql -- psql -U postgres -c 'SELECT pg_size_pretty(SUM(pg_database_size(pg_database.datname))) AS "TotalSize" FROM pg_database;'
  4. Создайте каталог для дампа на диске, на котором свободного пространства не меньше, чем размер баз данных, оцененный на предыдущем шаге:

    DUMP_DIR=<path_to_dump_dir>
    mkdir -pv "$DUMP_DIR"

    Здесь:

    • <path_to_dump_dir> — путь к каталогу для дампа.

  5. Создайте дамп, выполнив следующую команду:

    kubectl exec -n "$NS" sts/postgresql -- pg_dumpall -U postgres --clean --if-exists --load-via-partition-root --quote-all-identifiers --no-password > "$DUMP_DIR"/fulldump.pgdump
  6. Выполните базовую проверку корректности дампа.

    Если хотя бы одна из нижеследующих проверок не будет пройдена, это значит, что дамп некорректен. Убедитесь, что в каталоге для дампа достаточно свободного места, и создайте дамп заново.

    Критерием полной корректности дампа является только успешное восстановление из него.

    1. Убедитесь, что размер резервной копии составляет не менее 200 КБ, выполнив следующую команду:

      du -hs "$DUMP_DIR"/fulldump.pgdump
    2. Проверьте заголовок файла дампа, выполнив следующую команду:

      head "$DUMP_DIR"/fulldump.pgdump

      Заголовок файла дампа должен содержать следующую строку:

      PostgreSQL database cluster dump
    3. Проверьте конец файла дампа, выполнив следующую команду:

      tail "$DUMP_DIR"/fulldump.pgdump

      Конец файла дампа должен содержать следующие строки:

      PostgreSQL database dump complete
      PostgreSQL database cluster dump complete
  7. Скачайте архив установщика новой версии системы, если еще не сделали этого.

  8. Загрузите образ новой версии PostgreSQL на узлы кластера, выполнив следующую команду на узле, где находится установщик:

    evoctl instance upload -m evo.infra -g PostgreSQL
  9. Перейдите в каталог с helm-чартом PostgreSQL, выполнив следующую команду:

    cd /opt/r-vision/infra/helm/postgresql
  10. Получите параметры текущей установленной версии PostgreSQL, выполнив следующие команды:

    POSTGRES_USER=$(helm get values -n "$NS" postgresql -o json | jq -r '.global.postgresql.auth.username // ""')
    POSTGRES_PASSWORD=$(helm get values -n "$NS" postgresql -o json | jq -r '.global.postgresql.auth.password // ""')
    
    # Имя базы данных может быть определено либо в Helm Values, либо в секрете Kubernetes.
    # Если оно не определено ни в одном из этих элементов конфигурации, используется имя базы данных по умолчанию "evo".
    POSTGRES_DBNAME=$(helm get values -n "$NS" postgresql -o json | jq -r '.global.postgresql.auth.database // ""')
    [ "$POSTGRES_DBNAME" ] || POSTGRES_DBNAME=$(kubectl get secret -n "$NS" evo.infra.global -o jsonpath="{.data.POSTGRES_DBNAME}" | base64 -d)
    [ "$POSTGRES_DBNAME" ] || POSTGRES_DBNAME=evo
    
    # Проверяется минимальный размер PVC для PostgreSQL. Если он составлял менее 8 ГиБ, при обновлении он устанавливается в 8 ГиБ.
    PVC_SIZE=$(kubectl get pvc -n "$NS" -l app.kubernetes.io/instance=postgresql -o jsonpath='{.items[0].spec.resources.requests.storage}')
    [ "${PVC_SIZE%Gi}" -ge 8 ] || PVC_SIZE="8Gi"
  11. Проверьте возможность запуска обновления с помощью опции --dry-run.

    Команда ниже только проверяет возможность запуска обновления, но не выполняет само обновление.
    helm upgrade -i -n "$NS" postgresql ./ -f ./custom_values.yaml \
      --set primary.persistence.size="${PVC_SIZE:?}" \
      --set global.postgresql.auth.username="${POSTGRES_USER:?}" \
      --set global.postgresql.auth.database="${POSTGRES_DBNAME:?}" \
      --set-literal global.postgresql.auth.password="${POSTGRES_PASSWORD:?}" \
      --set-literal global.postgresql.auth.postgresPassword="${POSTGRES_PASSWORD:?}" \
      --set primary.resources.requests.cpu=<primary_resources_requests_cpu> \
      --set primary.resources.requests.memory=<primary_resources_requests_memory> \
      --set primary.resources.limits.cpu=<primary_resources_limits_cpu> \
      --set primary.resources.limits.memory=<primary_resources_limits_memory> \
      --dry-run

    Здесь и далее:

    • <primary_resources_requests_cpu> — минимальные требуемые ресурсы процессора. По умолчанию 100m (10% времени одного ядра).

    • <primary_resources_requests_memory> — минимальный требуемый объем ОЗУ. По умолчанию 128Mi (128 МиБ).

    • <primary_resources_limits_cpu> — максимальное допустимое потребление ресурсов процессора. По умолчанию 1 (100% времени одного ядра).

    • <primary_resources_limits_memory> — максимальное допустимое потребление ОЗУ. По умолчанию 1024Mi (1024 МиБ).

    На следующий шаг можно переходить, только если при выполнении команды выше не возникло ошибок.

    Могут возникнуть ошибки следующего вида:

    bash: <env_name>: parameter null or not set

    Здесь:

    • <env_name> — имя переменной окружения, значение которой получить не удалось: например, POSTGRES_USER.

    Если ошибка возникла, выполните следующие действия для каждой из переменных с ошибкой. Ниже приведен пример действий для переменной POSTGRES_USER:

    1. Выполните команду для получения значения переменной вручную:

      helm get values -n "$NS" postgresql -o json | jq -r '.global.postgresql.auth.username // ""'
    2. Присвойте переменной результат выполнения предыдущей команды:

      POSTGRES_USER=<postgres_user>

      Здесь:

      • <postgres_user> — имя системного пользователя PostgreSQL, полученное на предыдущем шаге.

    3. Получив значения всех переменных, повторите команду проверки возможности обновления:

      helm upgrade -i -n "$NS" postgresql ./ -f ./custom_values.yaml \
        --set primary.persistence.size="${PVC_SIZE:?}" \
        --set global.postgresql.auth.username="${POSTGRES_USER:?}" \
        --set global.postgresql.auth.database="${POSTGRES_DBNAME:?}" \
        --set-literal global.postgresql.auth.password="${POSTGRES_PASSWORD:?}" \
        --set-literal global.postgresql.auth.postgresPassword="${POSTGRES_PASSWORD:?}" \
        --set primary.resources.requests.cpu=<primary_resources_requests_cpu> \
        --set primary.resources.requests.memory=<primary_resources_requests_memory> \
        --set primary.resources.limits.cpu=<primary_resources_limits_cpu> \
        --set primary.resources.limits.memory=<primary_resources_limits_memory> \
        --dry-run
    4. Если повторная проверка возможности обновления не выявила ошибок, переходите к следующему шагу. В противном случае обратитесь в службу поддержки по адресу support@rvision.ru.

  12. Удалите предыдущий установленный релиз PostgreSQL и его ресурсы PVC:

    helm uninstall -n "$NS" postgresql --wait --debug
    kubectl delete pvc -n "$NS" -l app.kubernetes.io/instance=postgresql --wait
  13. Установите новую версию PostgreSQL:

    helm upgrade -i -n "$NS" postgresql ./ -f ./custom_values.yaml \
      --set primary.persistence.size="${PVC_SIZE:?}" \
      --set global.postgresql.auth.username="${POSTGRES_USER:?}" \
      --set global.postgresql.auth.database="${POSTGRES_DBNAME:?}" \
      --set-literal global.postgresql.auth.password="${POSTGRES_PASSWORD:?}" \
      --set-literal global.postgresql.auth.postgresPassword="${POSTGRES_PASSWORD:?}" \
      --set primary.resources.requests.cpu=<primary_resources_requests_cpu> \
      --set primary.resources.requests.memory=<primary_resources_requests_memory> \
      --set primary.resources.limits.cpu=<primary_resources_limits_cpu> \
      --set primary.resources.limits.memory=<primary_resources_limits_memory>
  14. Убедитесь, что обновление выполнилось успешно. Для этого запустите мониторинг подов PostgreSQL, выполнив следующую команду:

    kubectl get pod -n "$NS" -l app.kubernetes.io/instance=postgresql --watch

    После выполнения команды состояние каждого пода начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите на сочетание клавиш CTRL+C.

  15. Восстановите данные из дампа, выполнив следующую команду:

    kubectl exec -n "$NS" -i sts/postgresql -- psql -U postgres -f - < "$DUMP_DIR"/fulldump.pgdump
  16. Выведите подробный список всех баз данных, выполнив следующую команду:

    kubectl exec -n "$NS" sts/postgresql -- psql -U postgres -c '\l+'

    Убедитесь, что список соответствует списку баз данных до обновления, полученному на шагах 1—​2.

Для обновления вынесенной инсталляции PostgreSQL воспользуйтесь руководством в официальной документации PostgreSQL.

Обновление NATS

В системе установлены несколько экземпляров NATS, с каждым из которых связан отдельный helm-чарт:

  • nats-bridge;

  • nats-main;

  • nats-space.

Каждый из этих чартов необходимо обновить отдельно.

Чтобы обновить брокер сообщений NATS, выполните следующие действия:

  1. Скачайте архив установщика новой версии системы, если еще не сделали этого.

  2. Загрузите образ новой версии NATS на узлы кластера, выполнив следующую команду на узле, где находится установщик:

    evoctl instance upload -m evo.infra -g Nats
  3. Создайте переменную для названия пространства имен, в котором установлена система, если ранее не сделали этого:

    NS=<namespace>

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

  4. Обновите чарты экземпляров NATS, для которых это требуется:

Обновление чарта nats-bridge

Чтобы обновить чарт nats-bridge, выполните следующие действия:

  1. Перейдите в каталог с чартом nats-bridge, выполнив следующую команду:

    cd /opt/r-vision/infra/helm/nats-bridge
  2. Проверьте возможность запуска обновления с помощью опции --dry-run.

    Команда ниже только проверяет возможность запуска обновления, но не выполняет само обновление.
    helm upgrade -i -n "$NS" nats-bridge ./ -f ./custom_values.yaml \
      --set container.merge.resources.requests.cpu=<bridge_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<bridge_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<bridge_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<bridge_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<bridge_gomemlimit> \
      --dry-run

    Здесь и далее:

    • <bridge_resources_requests_cpu> — минимальные требуемые ресурсы процессора для nats-bridge. По умолчанию 250m (25% времени одного ядра).

    • <bridge_resources_requests_memory> — минимальный требуемый объем ОЗУ для nats-bridge. По умолчанию 128Mi (128 МиБ).

    • <bridge_resources_limits_cpu> — максимальное допустимое потребление ресурсов процессора для nats-bridge. По умолчанию 4 (100% времени 4 ядер).

    • <bridge_resources_limits_memory> — максимальное допустимое потребление ОЗУ для nats-bridge. По умолчанию 8192Mi (8192 МиБ).

    • <bridge_gomemlimit> — переменная окружения Go, задающая лимит памяти для nats-bridge. По умолчанию 6144MiB (6144 МиБ).

    На следующий шаг можно переходить, только если при выполнении команды выше не возникло ошибок. В противном случае обратитесь в службу поддержки по адресу support@rvision.ru.
  3. Установите новую версию NATS для nats-bridge:

    helm upgrade -i -n "$NS" nats-bridge ./ -f ./custom_values.yaml \
      --set container.merge.resources.requests.cpu=<bridge_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<bridge_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<bridge_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<bridge_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<bridge_gomemlimit>

    Если при обновлении произойдет ошибка, связанная с изменением структуры чарта, удалите предыдущий релиз чарта:

    helm uninstall <namespace> nats-bridge

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

    Затем запустите установку новой версии NATS повторно.

  4. Убедитесь, что обновление выполнилось успешно. Для этого запустите мониторинг подов nats-bridge, выполнив следующую команду:

    kubectl get pod -n "$NS" -l app.kubernetes.io/instance=nats-bridge --watch

    После выполнения команды состояние каждого пода начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите на сочетание клавиш CTRL+C.

Обновление чарта nats-main

Чтобы обновить чарт nats-main, выполните следующие действия:

  1. Перейдите в каталог с чартом nats-main, выполнив следующую команду:

    cd /opt/r-vision/infra/helm/nats-main
  2. Проверьте, что размер PVC для nats-main составляет не менее 60 ГиБ, выполнив следующие команды:

    PVC_SIZE_OLD=$(helm get values -n "$NS" nats-main -o json | jq -r '.config.jetstream.fileStore.pvc.size // ""')
    
    PVC_SIZE=$(kubectl get pvc -n "$NS" -l app.kubernetes.io/instance=nats-main -o jsonpath='{.items[0].spec.resources.requests.storage}')
    
    [ "${PVC_SIZE%Gi}" -ge 60 ] || PVC_SIZE="60Gi"
    
    echo "PVC_SIZE_OLD $PVC_SIZE_OLD"
    echo "PVC_SIZE     $PVC_SIZE"
  3. Если значения переменных PVC_SIZE_OLD и PVC_SIZE различаются, это означает, что размер PVC для nats-main — менее 60 ГиБ и его необходимо увеличить для корректной работы системы. Для этого выполните следующие команды:

    [ "${PVC_SIZE_OLD:?}" = "${PVC_SIZE:?}" ] || {
      for _pvc in $(kubectl get pvc -n "$NS"  -l app.kubernetes.io/instance=nats-main -o name); do
        kubectl patch -n "$NS" "$_pvc" -p "{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"$PVC_SIZE\"}}}}"
      done
      kubectl patch secret -n "$NS" evo.infra.global -p="{\"stringData\":{\"NATS_STORAGE_SIZE\":\"$PVC_SIZE\"}}"
      helm uninstall -n "$NS" nats-main
    }
  4. Проверьте возможность запуска обновления с помощью опции --dry-run.

    Команда ниже только проверяет возможность запуска обновления, но не выполняет само обновление.
    helm upgrade -i -n "$NS" nats-main ./ -f ./custom_values.yaml \
      --set container.merge.resources.requests.cpu=<main_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<main_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<main_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<main_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<main_gomemlimit> \
      --dry-run

    Здесь и далее:

    • <main_resources_requests_cpu> — минимально требуемые ресурсы процессора для nats-main. По умолчанию 500m (50% времени одного ядра).

    • <main_resources_requests_memory> — минимально требуемый объем ОЗУ для nats-main. По умолчанию 1024Mi (1024 МиБ).

    • <main_resources_limits_cpu> — максимально допустимое потребление ресурсов процессора для nats-main. По умолчанию 4 (100% времени 4 ядер).

    • <main_resources_limits_memory> — максимально допустимое потребление ОЗУ для nats-main. По умолчанию 8192Mi (8192 МиБ).

    • <main_gomemlimit> — переменная окружения Go, задающая лимит памяти для nats-main. По умолчанию 6144MiB (6144 МиБ).

    На следующий шаг можно переходить, только если при выполнении команды выше не возникло ошибок. В противном случае обратитесь в службу поддержки по адресу support@rvision.ru.
  5. Установите новую версию NATS для nats-main:

    helm upgrade -i -n "$NS" nats-main ./ -f ./custom_values.yaml \
      --set container.merge.resources.requests.cpu=<main_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<main_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<main_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<main_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<main_gomemlimit>

    Если при обновлении произойдет ошибка, связанная с изменением структуры чарта, удалите предыдущий релиз чарта:

    helm uninstall <namespace> nats-main

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

    Затем запустите установку новой версии NATS повторно.

  6. Убедитесь, что обновление выполнилось успешно. Для этого запустите мониторинг подов nats-main, выполнив следующую команду:

    kubectl get pod -n "$NS" -l app.kubernetes.io/instance=nats-main --watch

    После выполнения команды состояние каждого пода начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите на сочетание клавиш CTRL+C.

Обновление чарта nats-space

Чтобы обновить чарт nats-space, выполните следующие действия:

  1. Перейдите в каталог с чартом nats-space, выполнив следующую команду:

    cd /opt/r-vision/infra/helm/nats-space
  2. Создайте переменную, хранящую размер PVC для nats-space:

    PVC_SIZE=$(helm get values -n "$NS" nats-space -o json | jq -r '.config.jetstream.fileStore.pvc.size // ""')
  3. Создайте переменную, хранящую идентификатор пространства NATS:

    SPACE_ID=$(kubectl get cm -n "$NS" space-controller-extravars -o jsonpath='{.data.SPACE_ID}')
  4. Проверьте возможность запуска обновления с помощью опции --dry-run.

    Команда ниже только проверяет возможность запуска обновления, но не выполняет само обновление.
    helm upgrade -i -n "$NS" nats-space ./ -f ./custom_values.yaml \
      --set config.jetstream.fileStore.pvc.size="${PVC_SIZE:?}" \
      --set config.jetstream.merge.domain="${SPACE_ID:?}" \
      --set container.merge.resources.requests.cpu=<space_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<space_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<space_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<space_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<space_gomemlimit> \
      --dry-run

    Здесь и далее:

    • <space_resources_requests_cpu> — минимальные требуемые ресурсы процессора для nats-space. По умолчанию 250m (25% времени одного ядра).

    • <space_resources_requests_memory> — минимальный требуемый объем ОЗУ для nats-space. По умолчанию 1024Mi (1024 МиБ).

    • <space_resources_limits_cpu> — максимальное допустимое потребление ресурсов процессора для nats-space. По умолчанию 4 (100% времени 4 ядер).

    • <space_resources_limits_memory> — максимальное допустимое потребление ОЗУ для nats-space. По умолчанию 8192Mi (8192 МиБ).

    • <space_gomemlimit> — переменная окружения Go, задающая лимит памяти для nats-space. По умолчанию 6144MiB (6144 МиБ).

    На следующий шаг можно переходить, только если при выполнении команды выше не возникло ошибок. В противном случае обратитесь в службу поддержки по адресу support@rvision.ru.
  5. Установите новую версию NATS для nats-space:

    helm upgrade -i -n "$NS" nats-space ./ -f ./custom_values.yaml \
      --set config.jetstream.fileStore.pvc.size="${PVC_SIZE:?}" \
      --set config.jetstream.merge.domain="${SPACE_ID:?}" \
      --set container.merge.resources.requests.cpu=<space_resources_requests_cpu> \
      --set container.merge.resources.requests.memory=<space_resources_requests_memory> \
      --set container.merge.resources.limits.cpu=<space_resources_limits_cpu> \
      --set container.merge.resources.limits.memory=<space_resources_limits_memory> \
      --set container.env.GOMEMLIMIT=<space_gomemlimit>

    Если при обновлении произойдет ошибка, связанная с изменением структуры чарта, удалите предыдущий релиз чарта:

    helm uninstall <namespace> nats-space

    Здесь:

    • <namespace> — название пространства имен, в котором установлена система.

    Затем запустите установку новой версии NATS повторно.

  6. Убедитесь, что обновление выполнилось успешно. Для этого запустите мониторинг подов nats-space, выполнив следующую команду:

    kubectl get pod -n "$NS" -l app.kubernetes.io/instance=nats-space --watch

    После выполнения команды состояние каждого пода начнет выводиться в консоль в реальном времени. При успешном обновлении все поды будут иметь статус Running.

    Чтобы прекратить наблюдение за состоянием подов, нажмите на сочетание клавиш CTRL+C.

Была ли полезна эта страница?

Обратная связь