В этом разделе описаны зависимости, которые могут быть установлены для модуля.

Зависимости — это набор условий (требований), которые должны выполняться, чтобы Deckhouse Kubernetes Platform (DKP) могла запустить модуль.

DKP поддерживает следующие зависимости для модуля:

Зависимость от версии Deckhouse Kubernetes Platform

Эта зависимость определяет минимальную или максимальную версию DKP, с которой совместим модуль.

Пример настройки зависимости модуля от версии DKP 1.61 и выше в файле module.yaml:

name: test
weight: 901
requirements:
    deckhouse: ">= 1.61"

Для тестирования можно задать переменную окружения TEST_EXTENDER_DECKHOUSE_VERSION, чтобы симулировать желаемую версию DKP.

Зависимость проверяется в следующих случаях:

  1. При установке или обновлении модуля.
    Если версия DKP не соответствует требованиям, указанным в зависимостях модуля релиза, его установка или обновление не будут выполнены.

    Пример ресурса ModuleRelease, когда версия DKP не соответствует требованиям модуля:

    root@dev-master-0:~# kubectl get mr
    NAME                     PHASE        UPDATE POLICY   TRANSITIONTIME   MESSAGE
    test-v0.8.3              Pending      test-alpha      2m30s            requirements are not satisfied: current deckhouse version is not suitable: 1.0.0 is less than or equal to v1.64.0 
    
  2. При обновлении DKP.
    Проверяется, соответствует ли новая версия DKP зависимостям установленных и активных модулей. Если хотя бы один модуль несовместим с новой версией, обновление DKP не выполнится.

    Пример ресурса DeckhouseRelease, когда версия DKP не соответствует требованиям модуля:

    root@dev-master-0:~# kubectl get deckhousereleases.deckhouse.io
    NAME                     PHASE         TRANSITIONTIME   MESSAGE
    v1.73.3                  Skipped       74m
    v1.73.4                  Pending       2m13s            requirements of test are not satisfied: v1.73.4 deckhouse version is not suitable: v1.73.4 is greater than or equal to v1.73.4
    
  3. При первичном анализе модулей.
    Проверяются текущая версия DKP и зависимости уже установленных модулей. Если обнаружено несоответствие, модуль будет отключён.

Зависимость от версии Kubernetes

Эта зависимость определяет минимальную или максимальную версию Kubernetes, с которой совместим модуль.

Пример настройки зависимости в файле module.yaml:

name: test
weight: 901
requirements:
    kubernetes: ">= 1.27"

Для тестирования можно задать переменную окружения TEST_EXTENDER_KUBERNETES_VERSION, чтобы симулировать желаемую версию Kubernetes.

Зависимость проверяется в следующих случаях:

  1. При установке или обновлении модуля.
    Если версия Kubernetes не соответствует требованиям, указанным в зависимостях модуля релиза, установка или обновление не будут выполнены.

    Пример ресурса ModuleRelease, когда версия Kubernetes не соответствует требованиям модуля:

    root@dev-master-0:~# kubectl get modulereleases.deckhouse.io
    NAME                          PHASE        UPDATE POLICY   TRANSITIONTIME   MESSAGE
    test-v0.8.2                   Pending      test-alpha      24m              requirements are not satisfied: current kubernetes version is not suitable: 1.29.6 is less than or equal to 1.29
    virtualization-v.0.0.0-dev4   Deployed      deckhouse      142d
    
  2. При обновлении версии Kubernetes.
    Проверяются зависимости активных модулей, и если хотя бы один модуль несовместим с новой версией Kubernetes, изменение версии не будет принято.

    Пример вывода при несовместимости модуля с новой версией Kubernetes:

    root@dev-master-0:~# kubectl -n d8-system exec -it deployment/deckhouse -c deckhouse -- deckhouse-controller edit cluster-configuration
    Save cluster-configuration back to the Kubernetes cluster
    Update cluster-configuration secret
    Attempt 1 of 5 |
            Update cluster-configuration secret failed, next attempt will be in 5s"
            Error: admission webhook "kubernetes-version.deckhouse-webhook.deckhouse.io" denied the request: requirements of test are not satisfied: 1.27 kubernetes version is not suitable: 1.27.0 is less than or equal to 1.28
    
  3. При первичном анализе модулей.
    Если версия Kubernetes не соответствует зависимостям уже установленных модулей, DKP отключит такие модули.

  4. При обновлении DKP.
    Проверяется значение версии Kubernetes, установленной по умолчанию для DKP, если оно несовместимо с активными модулями, обновление DKP не будет выполнено.

    Пример ресурса DeckhouseRelease, когда версия Kubernetes не соответствует требованиям модуля:

    root@dev-master-0:~# kubectl get deckhousereleases.deckhouse.io
    NAME                     PHASE         TRANSITIONTIME   MESSAGE
    v1.73.3                  Pending       7s              requirements of test are not satisfied: 1.27 kubernetes version is not suitable: 1.27.0 is less than or equal to 1.28            
    

Зависимость от статуса установки кластера

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

Пример настройки зависимости в файле module.yaml:

name: ingress-nginx
weight: 402
description: |
    Ingress controller for nginx
    https://kubernetes.github.io/ingress-nginx
requirements:
    bootstrapped: true

Проверка выполняется только один раз — при первичном анализе модулей. Если установка и настройка кластера не завершены, модуль не будет включён.