Deckhouse Kubernetes Platform в существующем кластере

Выберите редакцию Deckhouse Kubernetes Platform

Ниже сгенерированы рекомендованные настройки для установки Deckhouse Kubernetes Platform Community Edition:

  • config.yml — файл первичной конфигурации кластера. Содержит параметры инсталлятора и начальные параметры кластера.

Обратите внимание:

  • Так выделены параметры, обязательные для самостоятельного заполнения.
  • Так выделены параметры, которые вы возможно захотите изменить.
  • Если вы запускаете инсталлятор под Windows, то убедитесь, что кодировка создаваемых YAML-файлов конфигурации UTF-8 (либо удалите примечания на русском языке).
  • Ознакомьтесь с разделом Если что-то пошло не так, возможно там описан случай для вашего провайдера. Обращайтесь к нему, если испытываете какие-то проблемы в процессе установки.

Создайте файл config.yml.

# Настройки модуля deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    bundle: Minimal
    # Канал обновлений Deckhouse. Канал Early Access достаточно стабилен, его можно использовать в продуктивных окружениях.
    # Если планируется использовать несколько кластеров, то рекомендуется установить на них разные каналы обновлений.
    # Подробнее: https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-release-channels.html
    releaseChannel: EarlyAccess
    logLevel: Info
---
# Настройки первичной инициализации кластера Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration
apiVersion: deckhouse.io/v1
kind: InitConfiguration
deckhouse:
  imagesRepo: registry.deckhouse.ru/deckhouse/ce
  registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2lzdHJ5LmRlY2tob3VzZS5ydSI6IHt9fX0K
---
# Глобальные настройки Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  version: 1
  settings:
    modules:
      # Шаблон, который будет использоваться для составления адресов системных приложений в кластере.
      # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'.
      # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration.
      # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки.
      publicDomainTemplate: "%s.example.com"
      # If necessary, specify in the customTolerationKeys array
      # all the tains to which Deckhouse should have toleration.
      # The following is an example for the case if you need Deckhouse and its components to be able
      # to run on nodes that have taint SystemLoad.
      # При необходимости, укажите в массиве customTolerationKeys все taint'ы
      # к которым Deckhouse должен иметь toleration.
      # Далее приведен пример для случая, если нужно чтобы Deckhouse и его компоненты смогли запускаться
      # на узлах, имеющих taint SystemLoad
      # Возможно, захотите изменить.
      placement:
        customTolerationKeys:
        - SystemLoad
---
# Настройки модуля user-authn.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/101-cert-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cert-manager
spec:
  version: 1
  enabled: true
---
# Настройки модуля documentation.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/810-documentation/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: documentation
spec:
  version: 1
  enabled: true
# Настройки модуля deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: bundle: Minimal # Канал обновлений Deckhouse. Канал Early Access достаточно стабилен, его можно использовать в продуктивных окружениях. # Если планируется использовать несколько кластеров, то рекомендуется установить на них разные каналы обновлений. # Подробнее: https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-release-channels.html releaseChannel: EarlyAccess logLevel: Info --- # Настройки первичной инициализации кластера Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration apiVersion: deckhouse.io/v1 kind: InitConfiguration deckhouse: imagesRepo: registry.deckhouse.ru/deckhouse/ce registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2lzdHJ5LmRlY2tob3VzZS5ydSI6IHt9fX0K --- # Глобальные настройки Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: global spec: version: 1 settings: modules: # Шаблон, который будет использоваться для составления адресов системных приложений в кластере. # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'. # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration. # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки. publicDomainTemplate: "%s.example.com" # If necessary, specify in the customTolerationKeys array # all the tains to which Deckhouse should have toleration. # The following is an example for the case if you need Deckhouse and its components to be able # to run on nodes that have taint SystemLoad. # При необходимости, укажите в массиве customTolerationKeys все taint'ы # к которым Deckhouse должен иметь toleration. # Далее приведен пример для случая, если нужно чтобы Deckhouse и его компоненты смогли запускаться # на узлах, имеющих taint SystemLoad # Возможно, захотите изменить. placement: customTolerationKeys: - SystemLoad --- # Настройки модуля user-authn. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/101-cert-manager/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: cert-manager spec: version: 1 enabled: true --- # Настройки модуля documentation. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/810-documentation/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: documentation spec: version: 1 enabled: true

Про nodeSelector, taints и tolerations...

Управлять тем, на каких узлах будет запускаться ядро Deckhouse, можно с помощью параметра spec.setting.nodeSelector в ModuleConfig deckhouse в конфигурации установки.

Пример указания nodeSelector для модуля deckhouse для работы остальных компонентов Deckhouse (не копируйте этот пример без изменения в вашу конфигурацию, т.к. у вас будут другие значения):

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
  spec:
    version: 1
    enabled: true
  settings:
    nodeSelector:
      node-role.kubernetes.io/master: master

Также, вы можете перечислить необходимые taint’ы узлов кластера в ModuleConfig global в массиве spec.modules.placement.customTolerationKeys, чтобы Deckhouse автоматически указывал соответствующие toleration своим компонентам.

Пример указания customTolerationKeys для модуля deckhouse и списка tolerations в массиве customTolerationKeys для работы остальных компонентов Deckhouse (не копируйте этот пример без изменения в вашу конфигурацию, т.к. у вас будут другие значения):

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  settings:
    modules:
      placement:
        customTolerationKeys:
        - Systemload
        - kubernetes.io/instance

Введите лицензионный ключ

Ввести

Ниже сгенерированы рекомендованные настройки для установки Deckhouse Kubernetes Platform Enterprise Edition:

  • config.yml — файл первичной конфигурации кластера. Содержит параметры инсталлятора и начальные параметры кластера.

Обратите внимание:

  • Так выделены параметры, обязательные для самостоятельного заполнения.
  • Так выделены параметры, которые вы возможно захотите изменить.
  • Если вы запускаете инсталлятор под Windows, то убедитесь, что кодировка создаваемых YAML-файлов конфигурации UTF-8 (либо удалите примечания на русском языке).
  • Ознакомьтесь с разделом Если что-то пошло не так, возможно там описан случай для вашего провайдера. Обращайтесь к нему, если испытываете какие-то проблемы в процессе установки.

Создайте файл config.yml.

# Настройки первичной инициализации кластера Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration
apiVersion: deckhouse.io/v1
kind: InitConfiguration
deckhouse:
  # Адрес Docker registry с образами Deckhouse.
  imagesRepo: registry.deckhouse.ru/deckhouse/ee
  # Строка с ключом для доступа к Docker registry (сгенерировано автоматически для вашего токена доступа).
  registryDockerCfg: <YOUR_ACCESS_STRING_IS_HERE>
---
# Настройки модуля deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    bundle: Minimal
    releaseChannel: Stable
    logLevel: Info
---
# Глобальные настройки Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  version: 1
  settings:
    modules:
      # Шаблон, который будет использоваться для составления адресов системных приложений в кластере.
      # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'.
      # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration.
      # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки.
      publicDomainTemplate: "%s.example.com"
      # If necessary, specify in the customTolerationKeys array
      # all the tains to which Deckhouse should have toleration.
      # The following is an example for the case if you need Deckhouse and its components to be able
      # to run on nodes that have taint SystemLoad.
      # При необходимости, укажите в массиве customTolerationKeys все taint'ы
      # к которым Deckhouse должен иметь toleration.
      # Далее приведен пример для случая, если нужно чтобы Deckhouse и его компоненты смогли запускаться
      # на узлах, имеющих taint SystemLoad
      # Возможно, захотите изменить.
      placement:
        customTolerationKeys:
        - SystemLoad
---
# Настройки модуля user-authn.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/101-cert-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cert-manager
spec:
  version: 1
  enabled: true
---
# Настройки модуля documentation.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/810-documentation/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: documentation
spec:
  version: 1
  enabled: true
# Настройки первичной инициализации кластера Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration apiVersion: deckhouse.io/v1 kind: InitConfiguration deckhouse: # Адрес Docker registry с образами Deckhouse. imagesRepo: registry.deckhouse.ru/deckhouse/ee # Строка с ключом для доступа к Docker registry (сгенерировано автоматически для вашего токена доступа). registryDockerCfg: <YOUR_ACCESS_STRING_IS_HERE> --- # Настройки модуля deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: bundle: Minimal releaseChannel: Stable logLevel: Info --- # Глобальные настройки Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: global spec: version: 1 settings: modules: # Шаблон, который будет использоваться для составления адресов системных приложений в кластере. # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'. # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration. # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки. publicDomainTemplate: "%s.example.com" # If necessary, specify in the customTolerationKeys array # all the tains to which Deckhouse should have toleration. # The following is an example for the case if you need Deckhouse and its components to be able # to run on nodes that have taint SystemLoad. # При необходимости, укажите в массиве customTolerationKeys все taint'ы # к которым Deckhouse должен иметь toleration. # Далее приведен пример для случая, если нужно чтобы Deckhouse и его компоненты смогли запускаться # на узлах, имеющих taint SystemLoad # Возможно, захотите изменить. placement: customTolerationKeys: - SystemLoad --- # Настройки модуля user-authn. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/101-cert-manager/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: cert-manager spec: version: 1 enabled: true --- # Настройки модуля documentation. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/810-documentation/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: documentation spec: version: 1 enabled: true

Про nodeSelector, taints и tolerations...

Управлять тем, на каких узлах будет запускаться ядро Deckhouse, можно с помощью параметра spec.setting.nodeSelector в ModuleConfig deckhouse в конфигурации установки.

Пример указания nodeSelector для модуля deckhouse для работы остальных компонентов Deckhouse (не копируйте этот пример без изменения в вашу конфигурацию, т.к. у вас будут другие значения):

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
  spec:
    version: 1
    enabled: true
  settings:
    nodeSelector:
      node-role.kubernetes.io/master: master

Также, вы можете перечислить необходимые taint’ы узлов кластера в ModuleConfig global в массиве spec.modules.placement.customTolerationKeys, чтобы Deckhouse автоматически указывал соответствующие toleration своим компонентам.

Пример указания customTolerationKeys для модуля deckhouse и списка tolerations в массиве customTolerationKeys для работы остальных компонентов Deckhouse (не копируйте этот пример без изменения в вашу конфигурацию, т.к. у вас будут другие значения):

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  settings:
    modules:
      placement:
        customTolerationKeys:
        - Systemload
        - kubernetes.io/instance

Для установки Deckhouse Kubernetes Platform используется Docker-образ, в который необходимо передать конфигурационные файлы.

Запустите установщик на персональном компьютере.

Linux / macOS Windows

docker run --pull=always -it -v "$PWD/config.yml:/config.yml" \
  -v "$HOME/.kube/config:/kubeconfig" registry.deckhouse.ru/deckhouse/ce/install:stable bash
docker run --pull=always -it -v "$PWD/config.yml:/config.yml" \ -v "$HOME/.kube/config:/kubeconfig" registry.deckhouse.ru/deckhouse/ce/install:stable bash
docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.kube\config:/kubeconfig"  registry.deckhouse.ru/deckhouse/ce/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"
docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.kube\config:/kubeconfig" registry.deckhouse.ru/deckhouse/ce/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"

Примечание:

  • В файл /kubeconfig контейнера необходимо смонтировать файл конфигурации kubectl с доступом к Kubernetes API. В руководстве предполагается, что он находится в файле .kube/config домашнего каталога пользователя.

Внутри контейнера выполните команду:

dhctl bootstrap-phase install-deckhouse --kubeconfig=/kubeconfig --config=/config.yml
dhctl bootstrap-phase install-deckhouse --kubeconfig=/kubeconfig --config=/config.yml

Процесс установки может занять от 5 до 30 минут, в зависимости от качества соединения.

По окончании установки инсталлятор выведет IP-адрес master-узла (он вам потребуется далее). Пример вывода:

...
┌ 🎈 ~ Common: Kubernetes Master Node addresses for SSH
│ cloud-demo-master-0 | ssh ubuntu@1.2.3.4
└ 🎈 ~ Common: Kubernetes Master Node addresses for SSH (0.00 seconds)

Почти все готово для полноценной работы Deckhouse Kubernetes Platform!

Если что-то пошло не так

Кластеры некоторых провайдеров могут требовать дополнительных действий до или после установки Deckhouse.

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

Ошибки установки на этапе 'Waiting for Deckhouse to become Ready'

  • Ошибка вида:
    │ │ ┌ Waiting for Deckhouse to become Ready
    │ │ │ Deckhouse pod found: deckhouse-64649df6f9-mf6dt (Pending)
    │ │ │ Deckhouse pod found: deckhouse-64649df6f9-mf6dt (Pending)
    

    Возможная причина — в кластере нет узла с label node-role.kubernetes.io/control-plane: "", который первоначально используется в nodeSelector манифеста deployment deckhouse.

    Варианты решения:

    • Отредактировать deployment deckhouse и указать нужный nodeSelector:
      kubectl -n d8-system edit deployment/deckhouse
      
    • Удалить nodeSelector у deployment deckhouse:
      kubectl patch -n d8-system deployment deckhouse --type json -p '[{"op": "remove", "path": "/spec/template/spec/nodeSelector"}]'
      
  • Ошибка вида:
    Waiting for Deckhouse to become Ready
    │ │ Deckhouse pod found: deckhouse-7cc8b6f4bd-9l99t (Running)
    │ │ Running pod found! Checking logs...
    │ │ Request failed. Probably pod was restarted during installation.
    │ │ No Deckhouse pod found.
    

    А так же в модуле deckhouse появляется ошибка со статусом:

    Status:   ModuleError: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "system-ns.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicy" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "label-objects.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicy" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "system-ns.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicyBinding" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "heritage-label-objects.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicyBinding" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first]
    

    Скорее всего в статичном манифесте kube-apiserver.yaml не указан runtime-config.

    Добавьте в /etc/kubernetes/manifests/kube-apiserver.yaml в параметр spec.containers.command значение - --runtime-config=admissionregistration.k8s.io/v1beta1=true,admissionregistration.k8s.io/v1alpha1=true.

    Внимание. kube-apiserver может некоторое время не отвечать на запросы.

Ошибка в случае установки Deckhouse после прерывания

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

  ┌ ⛵ ~ Bootstrap: Install Deckhouse
  └ ⛵ ~ Bootstrap: Install Deckhouse (43.50 seconds) FAILED

  Timeout while "Check prevent break another bootstrapped": last error: Cluster UUID's not equal in the cluster                              ↵
  (7489d07a-5fbb-4269-ba0d-e0340ce4f118) and in the cache ().
  Probably you are trying bootstrap cluster on node with previous created cluster.
  Please check hostname.

Чтобы заново установить Deckhouse на кластер, необходимо удалить следующие ConfigMap-ы в namespace kube-system:

  d8-cluster-is-bootstraped
  d8-cluster-uuid

и далее начать установку заново.

В кластере нет Ingress-контроллера...

Для работы модуля documentation (deckhouse-web в Deckhouse версии 1.45 и старее), предоставляющего веб-интерфейс к документации кластера, необходимо наличие в кластере Ingress-контроллера. Если в вашем кластере нет Ingress-контролллера, вы можете использовать модуль ingress-nginx следующим способом:

  • Включите модуль ingress-nginx, выполнив следующую команду:

    kubectl create -f - <<EOF
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: ingress-nginx
    spec:
      enabled: true
    EOF
    
    kubectl create -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: ingress-nginx spec: enabled: true EOF
  • Создайте файл ingress-nginx-controller.yml следующего содержания:

    # Секция, описывающая параметры NGINX Ingress controller.
    # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html
    apiVersion: deckhouse.io/v1
    kind: IngressNginxController
    metadata:
      name: nginx
    spec:
      ingressClass: nginx
      # Способ поступления трафика из внешнего мира.
      inlet: HostPort
      hostPort:
        httpPort: 80
        httpsPort: 443
      # Описывает, на каких узлах будет находиться компонент.
      # Возможно, захотите изменить.
      nodeSelector:
        node-role.kubernetes.io/control-plane: ""
      tolerations:
      - operator: Exists
    
    # Секция, описывающая параметры NGINX Ingress controller. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: nginx spec: ingressClass: nginx # Способ поступления трафика из внешнего мира. inlet: HostPort hostPort: httpPort: 80 httpsPort: 443 # Описывает, на каких узлах будет находиться компонент. # Возможно, захотите изменить. nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - operator: Exists
  • Примените его, после установки Deckhouse, выполнив следующую команду:

    kubectl create -f ingress-nginx-controller.yml
    
    kubectl create -f ingress-nginx-controller.yml

Кластер в VK Cloud Solutions (MailRu Cloud Solutions)

  • В конфигурации инсталляции Deckhouse в массиве customTolerationKeys укажите taint CriticalAddonsOnly.

    Пример:

    deckhouse:
      releaseChannel: Stable
      bundle: Minimal
      configOverrides:
        global:
          modules:
            placement:
              customTolerationKeys:
              - CriticalAddonsOnly
            publicDomainTemplate: "%s.example.com"
    
  • В кластерах версии 1.21+ VK Cloud Solutions установлен Gatekeeper (OPA), который требует выставления requests и limits Pod'ам. Pod deckhouse не имеет requests/limits, остальные компоненты и модули Deckhouse получают вычисляемые параметры requests/limits в процессе работы Deckhouse.

    При просмотре событий Deployment deckhouse вы можете увидеть следующую ошибку:

    admission webhook "validation.gatekeeper.sh" denied the request: [container-must-have-limits] container <...> has no resource limits...

    Чтобы Deckhouse смог запуститься, необходимо перед установкой Deckhouse в таких кластерах добавить исключение GateKeeper (OPA) для namespace'ов компонентов Deckhouse (d8*-).

    Выполните в кластере:

    kubectl patch constraints container-must-have-limits --type json -p '[{"op": "replace", "path": "/spec/match/excludedNamespaces", "value": ["d8-*"]}]'
    
    kubectl patch constraints container-must-have-limits --type json -p '[{"op": "replace", "path": "/spec/match/excludedNamespaces", "value": ["d8-*"]}]'

Для установки Deckhouse Kubernetes Platform используется Docker-образ, в который необходимо передать конфигурационные файлы.

Запустите установщик на персональном компьютере.

Linux / macOS Windows

 echo <LICENSE_TOKEN> | docker login -u license-token --password-stdin registry.deckhouse.ru
docker run --pull=always -it -v "$PWD/config.yml:/config.yml" \
  -v "$HOME/.kube/config:/kubeconfig" registry.deckhouse.ru/deckhouse/ee/install:stable bash
echo <LICENSE_TOKEN> | docker login -u license-token --password-stdin registry.deckhouse.ru docker run --pull=always -it -v "$PWD/config.yml:/config.yml" \ -v "$HOME/.kube/config:/kubeconfig" registry.deckhouse.ru/deckhouse/ee/install:stable bash

Авторизуйтесь на персональном компьютере в container image registry, введя лицензионный ключ на запрос пароля:

docker login -u license-token registry.deckhouse.ru
docker login -u license-token registry.deckhouse.ru

Запустите контейнер с установщиком:

docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.kube\config:/kubeconfig" registry.deckhouse.ru/deckhouse/ee/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"
docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.kube\config:/kubeconfig" registry.deckhouse.ru/deckhouse/ee/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"

Примечание:

  • В файл /kubeconfig контейнера необходимо смонтировать файл конфигурации kubectl с доступом к Kubernetes API. В руководстве предполагается, что он находится в файле .kube/config домашнего каталога пользователя.

Внутри контейнера выполните команду:

dhctl bootstrap-phase install-deckhouse --kubeconfig=/kubeconfig --config=/config.yml
dhctl bootstrap-phase install-deckhouse --kubeconfig=/kubeconfig --config=/config.yml

Процесс установки может занять от 5 до 30 минут, в зависимости от качества соединения.

По окончании установки инсталлятор выведет IP-адрес master-узла (он вам потребуется далее). Пример вывода:

...
┌ 🎈 ~ Common: Kubernetes Master Node addresses for SSH
│ cloud-demo-master-0 | ssh ubuntu@1.2.3.4
└ 🎈 ~ Common: Kubernetes Master Node addresses for SSH (0.00 seconds)

Почти все готово для полноценной работы Deckhouse Kubernetes Platform!

Если что-то пошло не так

Кластеры некоторых провайдеров могут требовать дополнительных действий до или после установки Deckhouse.

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

Ошибки установки на этапе 'Waiting for Deckhouse to become Ready'

  • Ошибка вида:
    │ │ ┌ Waiting for Deckhouse to become Ready
    │ │ │ Deckhouse pod found: deckhouse-64649df6f9-mf6dt (Pending)
    │ │ │ Deckhouse pod found: deckhouse-64649df6f9-mf6dt (Pending)
    

    Возможная причина — в кластере нет узла с label node-role.kubernetes.io/control-plane: "", который первоначально используется в nodeSelector манифеста deployment deckhouse.

    Варианты решения:

    • Отредактировать deployment deckhouse и указать нужный nodeSelector:
      kubectl -n d8-system edit deployment/deckhouse
      
    • Удалить nodeSelector у deployment deckhouse:
      kubectl patch -n d8-system deployment deckhouse --type json -p '[{"op": "remove", "path": "/spec/template/spec/nodeSelector"}]'
      
  • Ошибка вида:
    Waiting for Deckhouse to become Ready
    │ │ Deckhouse pod found: deckhouse-7cc8b6f4bd-9l99t (Running)
    │ │ Running pod found! Checking logs...
    │ │ Request failed. Probably pod was restarted during installation.
    │ │ No Deckhouse pod found.
    

    А так же в модуле deckhouse появляется ошибка со статусом:

    Status:   ModuleError: unable to build kubernetes objects from release manifest: [resource mapping not found for name: "system-ns.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicy" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "label-objects.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicy" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "system-ns.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicyBinding" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first, resource mapping not found for name: "heritage-label-objects.deckhouse.io" namespace: "" from "": no matches for kind "ValidatingAdmissionPolicyBinding" in version "admissionregistration.k8s.io/v1beta1" ensure CRDs are installed first]
    

    Скорее всего в статичном манифесте kube-apiserver.yaml не указан runtime-config.

    Добавьте в /etc/kubernetes/manifests/kube-apiserver.yaml в параметр spec.containers.command значение - --runtime-config=admissionregistration.k8s.io/v1beta1=true,admissionregistration.k8s.io/v1alpha1=true.

    Внимание. kube-apiserver может некоторое время не отвечать на запросы.

Ошибка в случае установки Deckhouse после прерывания

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

  ┌ ⛵ ~ Bootstrap: Install Deckhouse
  └ ⛵ ~ Bootstrap: Install Deckhouse (43.50 seconds) FAILED

  Timeout while "Check prevent break another bootstrapped": last error: Cluster UUID's not equal in the cluster                              ↵
  (7489d07a-5fbb-4269-ba0d-e0340ce4f118) and in the cache ().
  Probably you are trying bootstrap cluster on node with previous created cluster.
  Please check hostname.

Чтобы заново установить Deckhouse на кластер, необходимо удалить следующие ConfigMap-ы в namespace kube-system:

  d8-cluster-is-bootstraped
  d8-cluster-uuid

и далее начать установку заново.

В кластере нет Ingress-контроллера...

Для работы модуля documentation (deckhouse-web в Deckhouse версии 1.45 и старее), предоставляющего веб-интерфейс к документации кластера, необходимо наличие в кластере Ingress-контроллера. Если в вашем кластере нет Ingress-контролллера, вы можете использовать модуль ingress-nginx следующим способом:

  • Включите модуль ingress-nginx, выполнив следующую команду:

    kubectl create -f - <<EOF
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: ingress-nginx
    spec:
      enabled: true
    EOF
    
    kubectl create -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: ingress-nginx spec: enabled: true EOF
  • Создайте файл ingress-nginx-controller.yml следующего содержания:

    # Секция, описывающая параметры NGINX Ingress controller.
    # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html
    apiVersion: deckhouse.io/v1
    kind: IngressNginxController
    metadata:
      name: nginx
    spec:
      ingressClass: nginx
      # Способ поступления трафика из внешнего мира.
      inlet: HostPort
      hostPort:
        httpPort: 80
        httpsPort: 443
      # Описывает, на каких узлах будет находиться компонент.
      # Возможно, захотите изменить.
      nodeSelector:
        node-role.kubernetes.io/control-plane: ""
      tolerations:
      - operator: Exists
    
    # Секция, описывающая параметры NGINX Ingress controller. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: nginx spec: ingressClass: nginx # Способ поступления трафика из внешнего мира. inlet: HostPort hostPort: httpPort: 80 httpsPort: 443 # Описывает, на каких узлах будет находиться компонент. # Возможно, захотите изменить. nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - operator: Exists
  • Примените его, после установки Deckhouse, выполнив следующую команду:

    kubectl create -f ingress-nginx-controller.yml
    
    kubectl create -f ingress-nginx-controller.yml

Кластер в VK Cloud Solutions (MailRu Cloud Solutions)

  • В конфигурации инсталляции Deckhouse в массиве customTolerationKeys укажите taint CriticalAddonsOnly.

    Пример:

    deckhouse:
      releaseChannel: Stable
      bundle: Minimal
      configOverrides:
        global:
          modules:
            placement:
              customTolerationKeys:
              - CriticalAddonsOnly
            publicDomainTemplate: "%s.example.com"
    
  • В кластерах версии 1.21+ VK Cloud Solutions установлен Gatekeeper (OPA), который требует выставления requests и limits Pod'ам. Pod deckhouse не имеет requests/limits, остальные компоненты и модули Deckhouse получают вычисляемые параметры requests/limits в процессе работы Deckhouse.

    При просмотре событий Deployment deckhouse вы можете увидеть следующую ошибку:

    admission webhook "validation.gatekeeper.sh" denied the request: [container-must-have-limits] container <...> has no resource limits...

    Чтобы Deckhouse смог запуститься, необходимо перед установкой Deckhouse в таких кластерах добавить исключение GateKeeper (OPA) для namespace'ов компонентов Deckhouse (d8*-).

    Выполните в кластере:

    kubectl patch constraints container-must-have-limits --type json -p '[{"op": "replace", "path": "/spec/match/excludedNamespaces", "value": ["d8-*"]}]'
    
    kubectl patch constraints container-must-have-limits --type json -p '[{"op": "replace", "path": "/spec/match/excludedNamespaces", "value": ["d8-*"]}]'