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

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

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

  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-чарта, описанное в данном разделе, актуально для последней версии базовых сервисов (см. Релизы базовых сервисов). Чтобы изучить параметры для более ранних версий, откройте values.yaml в GitHub и в списке тегов слева выберите тег Core-<версия>.

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=VERSION --atomic --values ./values-license.yaml license 2gis-on-premise/license

    В параметре --version укажите нужную версию базовых сервисов. Список версий см. в разделе Релизы базовых сервисов.

    Примечание:

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

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:3 \
    license --config=/dgctl-config.yaml

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

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

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

    В параметре --version укажите ту же версию базовых сервисов, что и при прошлом выполнении команды.

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

При использовании двух хостов вам необходимо копировать файлы из 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:3 \
      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:3 \
        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:3 \
      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:3 \
      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:3 \
      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:3 \
      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=VERSION --atomic --values ./values-license.yaml license 2gis-on-premise/license

    В параметре --version укажите ту же версию базовых сервисов, что и при прошлом выполнении команды.

Что дальше?