Перейти к основному содержимому

Установка сервиса лицензий

1. Перед установкой

  1. Ознакомьтесь с основной информацией:

  2. Убедитесь, что выполнены необходимые предварительные шаги:

    1. Подготовка к установке
    2. Получение артефактов установки
  3. Соберите необходимые данные, заданные или полученные на предыдущих шагах:

    ОбъектЗначениеКак получить значение
    Ключ лицензии на программный комплекс 2ГИСDEMO-KEY-DGCTL-AAAAAA-BBBBBBСм. Подготовка к установке
    Endpoint S3-совместимого хранилища артефактов установкиartifacts.storage.localСм. Получение артефактов установки
    Имя бакета для хранения артефактовonpremise-artifactsСм. Получение артефактов установки
    Идентификатор ключа для доступа к артефактам установкиAKIAIOSFODNN7EXAMPLEСм. Получение артефактов установки
    Секрет ключа для доступа к артефактам установкиwJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEYСм. Получение артефактов установки
    Реестр Docker для хранения образов сервисовdocker.registry.local:5000См. Получение артефактов установки
    Имя пользователя для реестра DockerregistryСм. Получение артефактов установки
    Пароль для реестра DockerDOCKERregistryP@ssW0rdСм. Получение артефактов установки
  4. Убедитесь, что удовлетворены требования к ресурсам, приведенные в Helm-чарте. Подробнее о том, как это сделать, смотрите в документе Системные требования.

Примечание

Содержание Helm-чарта, описанное в данном разделе, актуально для последней версии On-Premise (см. Релизы). Чтобы изучить параметры для более ранних версий, откройте values.yaml в GitHub и введите номер нужной версии комплекса (например, 1.18.0) в переключателе тегов слева.

2. Установите сервис лицензий

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь. Пример файла уже заполнен всеми необходимыми данными, собранными на предыдущих этапах.

    values-license.yaml
    dgctlDockerRegistry: ''

    imagePullSecrets: [onpremise-registry-creds]

    dgctlStorage:
    host: artifacts.example.com
    secure: false
    region: ''
    bucket: onpremise-artifacts
    accessKey: AKIAIOSFODNN7EXAMPLE
    secretKey: wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY

    license:
    type: ''
    retryPeriod: 30s
    softBlockPeriod: 2w

    persistence:
    host: artifacts.example.com
    secure: false
    region: ''
    bucket: onpremise-artifacts
    root: 'license_state'
    accessKey: AKIAIOSFODNN7EXAMPLE
    secretKey: wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY

    tpm:
    mountTPMDevice: false
    pvcBind:
    enable: false
    storageClassName: ''

    customCAs:
    bundle: ''
    # bundle: |
    # -----BEGIN CERTIFICATE-----
    # ...
    # -----END CERTIFICATE-----
    certsPath: ''

    resources:
    limits:
    DOMAIN/tpmrm: 1

    affinity: {}

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС. Пример: HOST:PORT.

    • imagePullSecrets: Kubernetes Secrets для доступа к реестру Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • dgctlStorage: настройки хранилища артефактов установки.

      • Укажите общие настройки для доступа к хранилищу: endpoint, имя бакета и реквизиты для доступа.
      • secure: использовать ли HTTPS для работы с S3-совместимым хранилищем. Значение по умолчанию: false.
      • region: регион S3-хранилища.
    • license: настройки сервиса лицензий.

      • type: тип лицензии (не версия). Скопируйте цифровое значение из файла values/general.yaml, который генерируется автоматически на этапе загрузки артефактов установки. Не изменяйте это значение вручную.
      • retryPeriod: через какой период времени повторить проверку лицензии, если предыдущая проверка не удалась.
      • softBlockPeriod: за какой период времени появляется уведомление об истечении срока лицензии. Поддерживаются дополнительные единицы измерения времени: d для дней и w для недель.
    • persistence: настройки хранилища для состояний сервиса лицензий.

      • host: адрес endpoint в формате host:port.

      • secure: использовать ли HTTPS для работы с S3-совместимым хранилищем. Значение по умолчанию: false.

      • region: регион S3-хранилища.

      • bucket: имя S3-бакета.

      • root: корневая директория S3-бакета, в которой будут храниться файлы состояния.

      • accessKey: ключ доступа к S3-бакету.

      • secretKey: секретный ключ доступа к S3-бакету.

      Важно:

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

    • tpm: настройки для доступа к Trusted Platform Module (TPM). Только для типа лицензии 2 (license.type: 2).

      • mountTPMDevice: способ предоставления доступа к TPM:

        • true: монтировать TPM внутрь пода Kubernetes. Включается привилегированный доступ к основному контейнеру.

        • false: использовать плагин для автоматического монтирования TPM-устройства внутрь пода Kubernetes. Вы можете использовать готовый плагин от 2ГИС или собрать и установить свой плагин в кластере Kubernetes.

      • pvcBind: создать Persistent Volume Claim (PVC), чтобы привязать под сервиса лицензий к узлу кластера.

        • enable: использовать ли PVC. Значение по умолчанию: false.
        • storageClassName: имя класса хранения (StorageClass) в Kubernetes.
    • customCAs: настройки пользовательских сертификатов.

      • bundle: текстовое представление сертификата в формате X.509 PEM public-key.
      • certsPath: директория для монтирования сертификата внутри контейнера.
    • resources: ограничения используемых ресурсов кластера. Добавьте этот блок настроек, если используете плагин для монтирования TPM-устройства.

      • limits.DOMAIN/tpmrm: 1: замените переменную DOMAIN на имя домена ресурсов, сконфигурированное в настройках плагина.
    • affinity: настройки affinity-правил для привязки подов сервиса лицензий к конкретным узлам кластера.

      Примеры настройки affinity-правил:
      • Расположить поды сервиса лицензий на разных узлах кластера (важно для всех типов лицензий, кроме 1):

        affinity:
        podAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - topologyKey: kubernetes.io/hostname
        labelSelector:
        matchExpressions:
        - key: app.kubernetes.io/name
        operator: In
        values:
        - '' # конкретное значение этого параметра зависит от настроек вашего окружения
      • Ограничить набор узлов кластера, к которым получает доступ сервис лицензий (полезно для типа лицензии 2):

        affinity:
        nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
        - key: kubernetes.io/hostname
        operator: In
        values:
        - node-1 # название узла кластера
        - node-2 # название узла кластера

      Подробное описание параметров affinity вы можете найти в документации Kubernetes.

  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-license.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-license.yaml license 2gis-on-premise/license

    Примечание:

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

3. Получите лицензию

Важно

Ниже описан стандартный способ получения лицензии. Если вам необходимо получить лицензию после обновления сертификата сервера Kubernetes API, смены ключа, типа лицензирования или в других частных случаях, см. Продвинутые способы получения лицензии.

Для операций с лицензиями используется конфигурационный файл утилиты 2GIS CLI. Подробнее о том, как именно проходит процесс получения лицензии см. в описании режима утилиты license.

Процесс может быть запущен как на одном хосте с доступом к S3 и интернету, так и на двух отдельных хостах с разными доступами. Выполните следующие действия в зависимости от выбранной конфигурации хостов.

Использование одного хоста с доступом в S3 и интернет

  1. Запросите лицензию:

    docker run --rm \
    -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
    --user $(id -u):$(id -g) \
    2gis/dgctl:latest \
    license --config=/dgctl-config.yaml

    Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

  2. Снова установите сервис с помощью Helm:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-license.yaml license 2gis-on-premise/license

Использование двух хостов с разными доступами

При использовании двух хостов вам необходимо копировать файлы из S3-совместимого хранилища и в него. Для этого вы можете использовать утилиту 2GIS CLI (рекомендуется) или другой клиент для работы с S3.

  1. На обоих хостах создайте директорию COPY_DIR для переноса файлов.

  2. Сформируйте файлы для запроса лицензии на хосте с доступом к S3:

    1. Проверьте наличие всех необходимых файлов для запроса лицензии (если используете утилиту 2GIS CLI):

      docker run --rm \
      -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
      --user $(id -u):$(id -g) \
      2gis/dgctl:latest \
      license --config=/dgctl-config.yaml --dry-run

      Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

    2. Скопируйте файлы для запроса лицензии из S3 в COPY_DIR.

      • Если вы используете утилиту dgctl, выполните следующую команду:

        docker run --rm \
        -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
        -v $COPY_DIR:/data \
        --user $(id -u):$(id -g) \
        2gis/dgctl:latest \
        save --config=/dgctl-config.yaml --to-dir /data --only-license

        Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

      • Если вы используете сторонний клиент S3, скопируйте всё содержимое директории license-dir из S3 в COPY_DIR.

  3. Скопируйте содержимое директории COPY_DIR с хоста с доступом к S3 на хост с доступом к интернету.

  4. Запросите лицензию на хосте с доступом к интернету:

    1. Скопируйте файлы для запроса лицензии из COPY_DIR в S3:

      docker run --rm \
      -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
      -v $COPY_DIR:/data \
      --user $(id -u):$(id -g) \
      2gis/dgctl:latest \
      restore --config=/dgctl-config.yaml --from-dir /data --only-license

      Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

    2. Отправьте запрос:

      docker run --rm \
      -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
      --user $(id -u):$(id -g) \
      2gis/dgctl:latest \
      license --config=/dgctl-config.yaml

      Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

    3. Скопируйте файл с лицензией из S3 в COPY_DIR:

      docker run --rm \
      -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
      -v $COPY_DIR:/data \
      --user $(id -u):$(id -g) \
      2gis/dgctl:latest \
      save --config=/dgctl-config.yaml --to-dir /data --only-license

      Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

  5. Скопируйте содержимое директории COPY_DIR с хоста с доступом к интернету на хост с доступом к S3.

  6. Скопируйте файл с лицензией из COPY_DIR в S3:

    • Если вы используете утилиту 2GIS CLI, выполните следующую команду:

      docker run --rm \
      -v $(pwd)/dgctl-config.yaml:/dgctl-config.yaml \
      -v $COPY_DIR:/data \
      --user $(id -u):$(id -g) \
      2gis/dgctl:latest \
      restore --config=/dgctl-config.yaml --from-dir /data --only-license

      Если вы используете On-Premise версии 1.16.0 и ниже, добавьте аргумент --with-license-v1 в конец команды.

    • Если вы используете сторонний клиент S3, скопируйте всё содержимое директории license-dir из COPY_DIR в S3.

  7. Снова установите сервис с помощью Helm:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-license.yaml license 2gis-on-premise/license

Что дальше?