В разделе Быстрый старт доступны пошаговые инструкции по установке Deckhouse Platform.

Попробуйте также графический установщик Deckhouse Platform.

На этой странице представлена обзорная информация по установке Deckhouse Platform.

Администрирование платформы подробно разобрано в курсе «Администрирование Deckhouse Platform» в Deckhouse Академии.

Способы установки

Установить Deckhouse Platform можно следующими способами:

Далее рассмотрен процесс установки с помощью CLI-установщика.

Варианты установки

Установить Deckhouse Platform можно в следующих вариантах:

  • В поддерживаемом облаке. Установщик автоматически создает и настраивает все необходимые ресурсы (включая виртуальные машины, сетевые объекты и т.д.), разворачивает кластер Kubernetes и устанавливает Deckhouse Platform. Полный список поддерживаемых облачных провайдеров доступен в разделе «Интеграция с IaaS».

  • На серверах bare metal (в том числе гибридные кластеры) или в неподдерживаемых облаках. Установщик настраивает указанные в конфигурации серверы или виртуальные машины, разворачивает кластер Kubernetes и устанавливает Deckhouse Platform. Пошаговые инструкции по развертыванию на bare metal можно найти в разделе «Быстрый старт» → «Deckhouse Platform на bare metal».

  • В существующем кластере Kubernetes. Установщик разворачивает Deckhouse Platform и интегрирует его с текущей инфраструктурой. Пошаговые инструкции по развертыванию в существующем кластере можно найти в разделе «Быстрый старт» → «Deckhouse Platform в существующем кластере».

Требования к установке

Перед началом установки ознакомьтесь со сценариями развертывания Deckhouse Platform и требованиями к установке в разделе «Системные требования».

Подготовка конфигурации

Перед началом установки необходимо подготовить файл конфигурации установки, а также, при необходимости, post-bootstrap-скрипт.

Файл конфигурации установки

Файл конфигурации установки состоит из YAML-секций (документов) и содержит настройки Deckhouse Platform, а также описание (манифесты) объектов и ресурсов кластера, которые будут созданы после установки. Файл конфигурации установки используется в CLI-установщике и передается с помощью параметра --config (см. далее).

Список обязательных и опциональных объектов и ресурсов кластера, которые могут понадобиться в файле конфигурации установки:

  1. InitConfiguration (обязательный) — начальные параметры конфигурации, необходимые для запуска Deckhouse Platform.

    Начиная с версии Deckhouse Platform 1.75, используйте ModuleConfig deckhouse для настройки доступа к хранилищу образов Deckhouse Platform. Настройка доступа с помощью InitConfiguration (параметры imagesRepo, registryDockerCfg, registryScheme, registryCA) считается устаревшим способом.

  2. ClusterConfiguration — общие параметры кластера, такие как версия Kubernetes (компонентов control plane кластера), сетевые настройки, параметры CRI и т. д. Является обязательным, кроме случая, когда Deckhouse Platform устанавливается в уже существующий кластер Kubernetes.

  3. StaticClusterConfiguration — параметры кластера, развертываемого на серверах bare-metal (в том числе гибридного кластера) или виртуальных машинах в неподдерживаемых облаках. Является обязательным, кроме случая, когда Deckhouse Platform устанавливается в уже существующий кластер Kubernetes.

    Для добавления группы узлов (объект NodeGroup) под рабочую нагрузку в кластер могут понадобиться также объекты StaticInstance и SSHCredentials.

  4. <PROVIDER>ClusterConfiguration — параметры интеграции с облачным провайдером. Является обязательным при интеграции Deckhouse Platform с поддерживаемой облачной инфраструктурой.

    Ресурсы DVPClusterConfiguration, YandexClusterConfiguration и ZvirtClusterConfiguration устарели. Параметры интеграции со встроенной виртуализацией, Yandex Cloud и zVirt задаются в ModuleConfig модулей cloud-provider-dvp, cloud-provider-yandex и cloud-provider-zvirt и в связанных с ними ресурсах. Эти ресурсы описаны в разделах «Схемы размещения и настройка встроенной виртуализации», «Схемы размещения и настройка Yandex Cloud» и «Схемы размещения и настройка zVirt».

    Примеры ресурсов, настраивающих интеграцию Deckhouse Platform с облачным провайдером:

    Для добавления облачных узлов в кластер также понадобятся объекты <PROVIDER>InstanceClass (например YandexInstanceClass для Yandex Cloud), которые описывают конфигурацию виртуальных машин в группе узлов (объект NodeGroup).

  5. Конфигурации модулей Deckhouse Platform.

    Каждый модуль настраивается (а также может быть включен или отключен) с помощью собственного объекта ModuleConfig с именем модуля (например, ModuleConfig user-authn для модуля user-authn). Допустимые параметры, которые можно указывать в объекте ModuleConfig, можно найти в документации соответствующего модуля в разделе «Настройки» (например, настройки модуля user-authn).

    Список всех модулей Deckhouse Platform доступен в разделе «Модули» документации.

    Некоторые модули могут быть включены и предварительно настроены автоматически, в зависимости от выбранного варианта установки и конфигурации кластера (например, модули, обеспечивающие работу control plane кластера и сети).

    Модули, часто настраиваемые при установке:

    Если кластер изначально создается с узлами, выделенными для определенных типов нагрузки (например, системные узлы или узлы для мониторинга), рекомендуется в конфигурации модулей, использующих тома постоянного хранилища, явно задавать параметр nodeSelector (например, в параметре nodeSelector ModuleConfig prometheus для модуля prometheus).

  6. IngressNginxController — параметры создаваемого балансировщика HTTP/HTTPS-трафика (Ingress-контроллера).

  7. NodeGroup — параметры группы узлов. Необходим для добавления узлов под рабочую нагрузку в кластер.

  8. Объекты для настройки аутентификации и авторизации, такие как ClusterAuthorizationRule, AuthorizationRule, User, Group, DexProvider.

    Читайте подробнее в документации о настройке аутентификации и авторизации.

Пример файла конфигурации установки...

  • Конфигурация, применимая с версии 1.75 Deckhouse Platform
  • Устаревший вариант конфигурации

В этом примере доступ к хранилищу образов Deckhouse Platform настраивается с помощью ModuleConfig deckhouse.

apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Cloud
cloud:
  provider: Azure
  prefix: cloud-demo
podSubnetCIDR: 10.111.0.0/16
serviceSubnetCIDR: 10.222.0.0/16
kubernetesVersion: "Automatic"
clusterDomain: cluster.local
---
apiVersion: deckhouse.io/v1
kind: AzureClusterConfiguration
layout: Standard
sshPublicKey: <SSH_PUBLIC_KEY>
vNetCIDR: 10.241.0.0/16
subnetCIDR: 10.241.0.0/24
masterNodeGroup:
  replicas: 3
  instanceClass:
    machineSize: Standard_D4ds_v4
    urn: Canonical:UbuntuServer:18.04-LTS:18.04.202010140
    enableExternalIP: true
provider:
  subscriptionId: <SUBSCRIPTION_ID>
  clientId: <CLIENT_ID>
  clientSecret: <CLIENT_SECRET>
  tenantId: <TENANT_ID>
  location: westeurope
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  enabled: true
  settings:
    releaseChannel: Stable
    bundle: Default
    logLevel: Info
    registry:
      mode: Unmanaged
      unmanaged:
        imagesRepo: test-registry.io/some/path
        scheme: HTTPS
        username: <username>
        password: <password>
        ca: <CA>
  version: 1
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  settings:
    modules:
      publicDomainTemplate: "%s.k8s.example.com"
  version: 2
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 2
  enabled: true
  settings:
    controlPlaneConfigurator:
      dexCAMode: DoNotNeed
    publishAPI:
      enabled: true
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: ""
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: node-manager
spec:
  version: 1
  enabled: true
  settings: {}
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: prometheus
spec:
  version: 2
  enabled: true
  # Укажите в случае использования выделенных узлов для мониторинга.
  # settings:
  #   nodeSelector:
  #     node.deckhouse.io/group: monitoring
---
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: main
spec:
  ingressClass: "nginx"
  inlet: "LoadBalancer"
  nodeSelector:
    node.deckhouse.io/group: worker
---
apiVersion: deckhouse.io/v1
kind: AzureInstanceClass
metadata:
  name: worker
spec:
  machineSize: Standard_F4
---
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: worker
spec:
  cloudInstances:
    classReference:
      kind: AzureInstanceClass
      name: worker
    maxPerZone: 3
    minPerZone: 1
    zones: ["1"]
  nodeType: CloudEphemeral
---
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
  name: admin
spec:
  subjects:
  - kind: User
    name: admin@deckhouse.io
  accessLevel: SuperAdmin
  portForwarding: true
---
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: admin
spec:
  email: admin@deckhouse.io
  password: '$2a$10$isZrV6uzS6F7eGfaNB1EteLTWky7qxJZfbogRs1egWEPuT1XaOGg2'

В этом примере доступ к хранилищу образов Deckhouse Platform настраивается с помощью InitConfiguration.

apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Cloud
cloud:
  provider: Azure
  prefix: cloud-demo
podSubnetCIDR: 10.111.0.0/16
serviceSubnetCIDR: 10.222.0.0/16
kubernetesVersion: "Automatic"
clusterDomain: cluster.local
---
apiVersion: deckhouse.io/v1
kind: InitConfiguration
deckhouse:
  imagesRepo: registry.deckhouse.ru/deckhouse/ee
  registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2zzzmRlY2tob3Vxxcxxxc5ydSI6IsssfX0K
---
apiVersion: deckhouse.io/v1
kind: AzureClusterConfiguration
layout: Standard
sshPublicKey: <SSH_PUBLIC_KEY>
vNetCIDR: 10.241.0.0/16
subnetCIDR: 10.241.0.0/24
masterNodeGroup:
  replicas: 3
  instanceClass:
    machineSize: Standard_D4ds_v4
    urn: Canonical:UbuntuServer:18.04-LTS:18.04.202010140
    enableExternalIP: true
provider:
  subscriptionId: <SUBSCRIPTION_ID>
  clientId: <CLIENT_ID>
  clientSecret: <CLIENT_SECRET>
  tenantId: <TENANT_ID>
  location: westeurope
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  enabled: true
  settings:
    releaseChannel: Stable
    bundle: Default
    logLevel: Info
  version: 1
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  settings:
    modules:
      publicDomainTemplate: "%s.k8s.example.com"
  version: 2
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 2
  enabled: true
  settings:
    controlPlaneConfigurator:
      dexCAMode: DoNotNeed
    publishAPI:
      enabled: true
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: ""
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: node-manager
spec:
  version: 1
  enabled: true
  settings: {}
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: prometheus
spec:
  version: 2
  enabled: true
  # Укажите в случае использования выделенных узлов для мониторинга.
  # settings:
  #   nodeSelector:
  #     node.deckhouse.io/group: monitoring
---
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: main
spec:
  ingressClass: "nginx"
  inlet: "LoadBalancer"
  nodeSelector:
    node.deckhouse.io/group: worker
---
apiVersion: deckhouse.io/v1
kind: AzureInstanceClass
metadata:
  name: worker
spec:
  machineSize: Standard_F4
---
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: worker
spec:
  cloudInstances:
    classReference:
      kind: AzureInstanceClass
      name: worker
    maxPerZone: 3
    minPerZone: 1
    zones: ["1"]
  nodeType: CloudEphemeral
---
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
  name: admin
spec:
  subjects:
  - kind: User
    name: admin@deckhouse.io
  accessLevel: SuperAdmin
  portForwarding: true
---
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: admin
spec:
  email: admin@deckhouse.io
  password: '$2a$10$isZrV6uzS6F7eGfaNB1EteLTWky7qxJZfbogRs1egWEPuT1XaOGg2'

Post-bootstrap-скрипт

Установщик позволяет выполнить пользовательский скрипт на одном из master-узлов после завершения установки (post-bootstrap-скрипт). Такой скрипт может использоваться для:

  • дополнительной настройки кластера;
  • сбора диагностической информации;
  • интеграции с внешними системами и других задач.

Указать путь к post-bootstrap-скрипту можно с помощью параметра --post-bootstrap-script-path при запуске CLI-установщика.

Пример скрипта, выводящего IP-адрес балансировщика...

Пример скрипта, который выводит IP-адрес балансировщика после установки Deckhouse Platform:

#!/usr/bin/env bash

set -e
set -o pipefail


INGRESS_NAME="nginx"


echo_err() { echo "$@" 1>&2; }

# Объявление переменной.
lb_ip=""

# Получение IP-адреса балансировщика нагрузки.
for i in {0..100}
do
  if lb_ip="$(kubectl -n d8-ingress-nginx get svc "${INGRESS_NAME}-load-balancer" -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"; then
    if [ -n "$lb_ip" ]; then
      break
    fi
  fi

  lb_ip=""

  sleep 5
done

if [ -n "$lb_ip" ]; then
  echo_err "The load balancer external IP: $lb_ip"
else
  echo_err "Could not get the external IP of the load balancer"
  exit 1
fi

outContent="{\"frontend_ips\":[\"$lb_ip\"]}"

if [ -z "$OUTPUT" ]; then
  echo_err "The OUTPUT env is empty. The result was not saved to the output file."
else
  echo "$outContent" > "$OUTPUT"
fi

Установка

При установке коммерческой редакции Deckhouse Platform из публичного хранилища образов registry.deckhouse.ru необходимо предварительно пройти аутентификацию с использованием лицензионного ключа:

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

Команда для запуска контейнера с установщиком из публичного хранилища образов контейнеров Deckhouse:

docker run --pull=always -it [<MOUNT_OPTIONS>] registry.deckhouse.ru/deckhouse/<DECKHOUSE_REVISION>/install:<RELEASE_CHANNEL> bash

Где:

  1. <DECKHOUSE_REVISION> — редакция Deckhouse Platform. Например, ee — для Enterprise Edition, ce — для Community Edition и т. д.
  2. <MOUNT_OPTIONS> — параметры монтирования файлов в контейнер установщика, таких как:
    • SSH-ключи доступа;
    • файл конфигурации;
    • файл ресурсов и т. д.
  3. <RELEASE_CHANNEL> — канал обновлений в формате kebab-case:
    • alpha — для канала обновлений Alpha;
    • beta — для канала обновлений Beta;
    • early-access — для канала обновлений Early Access;
    • stable — для канала обновлений Stable;
    • rock-solid — для канала обновлений Rock Solid.

Пример команды для запуска контейнера с установщиком Deckhouse Platform Community Edition (Deckhouse Platform Boost) из канала обновлений Stable:

docker run -it --pull=always \
  -v "$PWD/config.yaml:/config.yaml" \
  -v "$PWD/dhctl-tmp:/tmp/dhctl" \
  -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.ru/deckhouse/ce/install:stable bash

Установка Deckhouse Platform осуществляется в контейнере установщика с помощью команды dhctl:

  • Для запуска установки Deckhouse Platform с развертыванием нового кластера (все случаи, кроме установки в существующий кластер) используйте команду dhctl bootstrap.
  • Для установки Deckhouse Platform в уже существующий кластер используйте команду dhctl bootstrap-phase install-deckhouse.

Для получения подробной справки по параметрам команды выполните dhctl bootstrap -h.

Пример запуска установки Deckhouse Platform с развертыванием кластера в облаке:

dhctl bootstrap \
  --ssh-user=<SSH_USER> --ssh-agent-private-keys=/tmp/.ssh/<SSH_PRIVATE_KEY_FILE> \
  --config=/config.yml

Где:

  • /config.yml — файл конфигурации установки;
  • <SSH_USER> — имя пользователя для подключения по SSH к серверу;
  • --ssh-agent-private-keys — файл приватного SSH-ключа для подключения по SSH.
  • <SSH_PRIVATE_KEY_FILE> — имя приватного ключа. Например, для ключа с RSA-шифрованием это может быть id_rsa, а для ключа с ED25519-шифрованием — id_ed25519.

Если сервер принимает только ключи, подписанные центром сертификации SSH, положите сертификат рядом с приватным ключом под именем <SSH_PRIVATE_KEY_FILE>-cert.pub, например id_ed25519-cert.pub. dhctl использует его автоматически.

Проверки перед началом установки

Начиная с версии 1.74, модули Deckhouse Platform устанавливаются в виде образов в формате EROFS, подключаемых только для чтения, что защищает их от изменения после установки. Этот механизм включается автоматически, если на узле, где работает контроллер Deckhouse Platform (по умолчанию — master-узел), в ядре зарегистрирована файловая система erofs. Deckhouse Platform загружает этот модуль ядра только на узлах с containerd v2, поэтому при использовании containerd v1 на master-узлах загрузку erofs нужно обеспечить средствами операционной системы. Иначе Deckhouse Platform будет устанавливать модули обычным способом, без защиты их целостности и без отдельного алерта. Подробнее — в разделе «Защита целостности модулей Deckhouse Platform».

Список проверок, выполняемых установщиком перед началом установки Deckhouse Platform:

  1. Общие проверки:
    • Значения параметров publicDomainTemplate и clusterDomain (или устаревшего ClusterConfiguration.clusterDomain) не совпадают.
    • Данные аутентификации для хранилища образов, указанные в конфигурации установки, корректны.
    • Имя хоста соответствует следующим требованиям:
      • длина не более 63 символов;
      • состоит только из строчных букв;
      • не содержит спецсимволов (допускаются символы - (дефис) и . (точка), при этом они не могут быть в начале или в конце имени).
    • На сервере (ВМ) установлен поддерживаемый container runtime (containerd).
    • Имя хоста уникально в пределах кластера.
    • На сервере установлено корректное время.
    • Адресное пространство подов (podSubnetCIDR) и сервисов (serviceSubnetCIRD) кластера не пересекаются.
  2. Проверки для установки статического и гибридного кластера:
    • Указан только один параметр --ssh-host. Для статической конфигурации кластера можно задать только один IP-адрес для настройки первого master-узла.
    • Должна быть возможность подключения по SSH с использованием указанных данных аутентификации.
    • Должна быть возможность установки SSH-туннеля до сервера (или виртуальной машины) master-узла.
    • Сервер (ВМ), выбранный для установки master-узла, соответствует минимальным ресурсам, приведённым в разделе «Требования к ресурсам». Там же приведены ресурсы узлов для каждого варианта размещения.
    • На сервере (ВМ) для master-узла должен быть доступен Python (Python 3 или Python 2). Также должны быть доступны стандартные модули Python, используемые установщиком:
      • для работы с HTTP-запросами: urllib.request (Python 3) или urllib2 (Python 2);
      • для обработки HTTP-ошибок: urllib.error (Python 3) или urllib2 (Python 2);
      • для работы с конфигурацией: configparser (Python 3) или ConfigParser (Python 2);
      • для запуска HTTP-сервера: http.server (Python 3) или SimpleHTTPServer (Python 2);
      • для работы с TCP-сервером: http.server (Python 3) или SocketServer (Python 2).
    • Хранилище образов доступно через прокси (если настройки прокси указаны в конфигурации установки).
    • На сервере (ВМ) для master-узла и на хосте, с которого запускается установщик, должен быть доступен порт 22/TCP (сетевой доступ от персонального компьютера), необходимый для процесса установки. Подробнее в разделе «Сетевое взаимодействие компонентов платформы».
    • DNS должен разрешать localhost в IP-адрес 127.0.0.1.
    • На сервере (ВМ) пользователю доступна команда sudo.
    • Открыты необходимые порты для установки:
      • между хостом запуска установщика и сервером — порт 22/TCP;
      • отсутствуют конфликты по портам, которые используются процессом установки.
    • На сервере (ВМ) установлено корректное время.
    • Адресное пространство подов (podSubnetCIDR), сервисов (serviceSubnetCIRD) и внутренней сети кластера (internalNetworkCIDRs) не пересекаются.
    • На сервере (ВМ) нет конфликтов с локальной служебной учетной записью deckhouse: пользователь и группа либо отсутствуют, либо пользователь имеет UID и основной GID 64535, группа имеет GID 64535, пользователь не имеет прав sudo, а UID/GID 64535 не заняты другими учетными записями. Подробнее — в разделе «Локальная служебная учетная запись deckhouse».
  3. Проверки для установки облачного кластера:

Список флагов пропуска проверок...

Для пропуска отдельной проверки используйте флаг --preflight-skip-check, передав в качестве аргумента имя preflight-чека. Флаг можно указывать несколько раз.

Полный список проверок, к чему каждая применяется и что утверждает, выводит команда dhctl preflight list.

  • --preflight-skip-all-checks — пропуск всех предварительных проверок.

Проверки конфигурации (фаза PreInfraPreflights):

  • --preflight-skip-check=registry-credentials — пропуск проверки учетных данных для доступа к хранилищу образов;
  • --preflight-skip-check=registry-reachable — пропуск проверки доступности хранилища образов с хоста установщика;
  • --preflight-skip-check=deckhouse-image-available — пропуск проверки наличия образа Deckhouse нужной версии в хранилище;
  • --preflight-skip-check=registry-required-images — пропуск проверки того, что в хранилище есть сами образы релиза, а не только тег;
  • --preflight-skip-check=dhctl-edition — пропуск проверки соответствия редакции установщика и редакции образа Deckhouse;
  • --preflight-skip-check=dhctl-version — пропуск проверки соответствия версии инсталлятора версии образа Deckhouse;
  • --preflight-skip-check=bastion-availability — пропуск проверки доступности bastion-хоста;
  • --preflight-skip-check=cloud-disk-name-length — пропуск проверки того, что префикс кластера не делает имена дисков слишком длинными;
  • --preflight-skip-check=cloud-master-system-requirements — пропуск проверки соответствия instance class master-узла минимальным требованиям;
  • --preflight-skip-check=instance-class-provider — пропуск проверки соответствия ресурсов InstanceClass облачному провайдеру;
  • --preflight-skip-check=cloud-node-network-cidr-intersection — пропуск проверки пересечения подсетей кластера с сетью, в которой облако создаёт узлы;
  • --preflight-skip-check=cloud-ssh-key-matches-public-key — пропуск проверки соответствия приватного ключа dhctl и sshPublicKey, который установит облако;
  • --preflight-skip-check=dynamix-storage-policy — пропуск проверки того, что версия Basis Dynamix 4.6 или новее, а каждая политика хранения из DynamixClusterConfiguration находится в статусе ENABLED и доступна аккаунту;
  • --preflight-skip-check=static-instances-ip-duplication — пропуск проверки уникальности адресов StaticInstances;
  • --preflight-skip-check=immutable-installer-images — пропуск проверки того, что образ установщика содержит запрошенный control plane Kubernetes;
  • --preflight-skip-check=immutable-kubeconfig-kept — пропуск проверки того, что admin kubeconfig сохраняется вне удаляемого dhctl каталога;
  • --preflight-skip-check=immutable-kubeconfig-out — пропуск проверки того, что для admin kubeconfig задан путь сохранения;
  • --preflight-skip-check=immutable-machines-availability — пропуск проверки доступности машин, указанных в --master-host;
  • --preflight-skip-check=immutable-post-bootstrap-script — пропуск проверки отсутствия post-bootstrap-скрипта;
  • --preflight-skip-check=immutable-signature-mode — пропуск проверки отключенного режима подписи control plane;
  • --preflight-skip-check=immutable-supported-provider — пропуск проверки поддержки платформы для immutable master-узла.

Проверки узлов (фаза PostInfraPreflights):

  • --preflight-skip-check=static-single-ssh-host — пропуск проверки количества указанных SSH-хостов;
  • --preflight-skip-check=ssh-connectivity — пропуск проверки доступности SSH-порта узла;
  • --preflight-skip-check=ssh-credential — пропуск проверки того, что SSH-пользователь может войти на узел;
  • --preflight-skip-check=static-ssh-tunnel — пропуск проверки проброса SSH;
  • --preflight-skip-check=static-instances-ssh-access — пропуск проверки SSH-доступа к StaticInstances;
  • --preflight-skip-check=sudo-installed — пропуск проверки наличия sudo на узле;
  • --preflight-skip-check=sudo-allowed — пропуск проверки прав доступа для выполнения команды sudo;
  • --preflight-skip-check=deckhouse-user — пропуск проверки пользователя и группы deckhouse: их UID/GID, конфликтов с UID/GID 64535 и отсутствия прав sudo у пользователя deckhouse;
  • --preflight-skip-check=node-system-requirements — пропуск проверки соответствия системным требованиям;
  • --preflight-skip-check=python-modules — пропуск проверки наличия Python;
  • --preflight-skip-check=ports-availability — пропуск проверки доступности необходимых портов;
  • --preflight-skip-check=resolve-localhost — пропуск проверки разрешения localhost;
  • --preflight-skip-check=time-drift — пропуск проверки отсутствия рассинхронизации времени (time drift);
  • --preflight-skip-check=node-hostname — пропуск проверки того, что имя узла соответствует требованиям Kubernetes;
  • --preflight-skip-check=node-os-supported — пропуск проверки того, что операционная система узла поддерживается;
  • --preflight-skip-check=node-xfs-ftype — пропуск проверки XFS, отформатированной без d_type;
  • --preflight-skip-check=node-resolve-hostname — пропуск проверки того, что узел разрешает собственное имя;
  • --preflight-skip-check=node-leftovers — пропуск проверки отсутствия на узле своего container runtime или Kubernetes;
  • --preflight-skip-check=node-cri-requirements — пропуск проверки требований ContainerdV2 (ядро, systemd, cgroup v2, erofs);
  • --preflight-skip-check=node-kernel-modules — пропуск проверки того, что модули ядра, которые загружает Deckhouse, могут быть загружены на узле;
  • --preflight-skip-check=node-selinux-tools — пропуск проверки наличия утилит для установки политики SELinux на узле с SELinux в режиме enforcing;
  • --preflight-skip-check=node-disk-space — пропуск проверки размера диска узла;
  • --preflight-skip-check=static-free-disk-space — пропуск проверки достаточного свободного места на диске узла;
  • --preflight-skip-check=node-internal-network — пропуск проверки наличия у узла адреса внутри internalNetworkCIDRs;
  • --preflight-skip-check=host-network-cidr-intersection — пропуск проверки пересечения CIDR кластера с сетями узла;
  • --preflight-skip-check=registry-access-through-proxy — пропуск проверки доступа к хранилищу образов через прокси-сервер;
  • --preflight-skip-check=cloud-api-accessibility — пропуск проверки доступности Cloud API;
  • --preflight-skip-check=cloud-api-from-installer — пропуск проверки того, что сам установщик дотягивается до API облачного провайдера;
  • --preflight-skip-check=network-single-source — пропуск проверки того, что сетевые параметры кластера заданы только в одном из документов: ClusterConfiguration или ModuleConfig control-plane-manager;
  • --preflight-skip-check=cloud-kube-data-device — пропуск проверки того, что диск, выделенный провайдером под данные Kubernetes, присутствует на master-узле;
  • --preflight-skip-check=registry-access-from-master — пропуск проверки доступности хранилища образов с самого master-узла;
  • --preflight-skip-check=immutable-api-reachable — пропуск проверки того, что порт API первого immutable master-узла отвечает.

Подсети кластера и publicDomainTemplate не относятся к preflight-проверкам: они читают только конфигурацию, поэтому проверяются при её загрузке — одинаково в dhctl config, в converge и при bootstrap. Пропустить их флагом нельзя.

Имена cidr-intersection, static-cidr-intersection и public-domain-template принимаются для совместимости, но не влияют на выполнение проверок.

При указании имени проверки в --preflight-skip-check пропускаются обе проверки, соответствующие этому имени: registry-credentials — и registry-reachable, dhctl-edition — и deckhouse-image-available, sudo-allowed — и sudo-installed, а ssh-credential — и ssh-connectivity.

Проверки, которые относятся к самой машине, называются node-*, а те, что относятся к доступу, — ssh-*. И те, и другие выполняются и на облачном master-узле, и на статическом узле. С префиксом static- выполняются проверки, применимые исключительно к статическому кластеру. Имена переименованных проверок принимаются флагом --preflight-skip-check.

Проверки узла — sudo-installed, sudo-allowed, python-modules, resolve-localhost, time-drift, node-hostname, node-disk-space, node-leftovers, node-cri-requirements, node-internal-network, node-system-requirements и host-network-cidr-intersection — также выполняются и на облачном master-узле, и на статическом. Имена на обоих путях одинаковые.

Еще два флага управляют выполнением проверок:

  • --preflight-fail-fast — остановиться на первой же ошибке, не выполняя остальные проверки фазы;
  • --preflight-no-cache — выполнить все проверки заново, не используя результаты, запомненные в предыдущем запуске.

Пример применения флага пропуска:

    dhctl bootstrap \
    --ssh-user=<SSH_USER> --ssh-agent-private-keys=/tmp/.ssh/<SSH_PRIVATE_KEY_FILE> \
    --config=/config.yml \
    --preflight-skip-all-checks

Замените здесь <SSH_PRIVATE_KEY_FILE> на имя вашего приватного ключа. Например, для ключа с RSA-шифрованием это может быть id_rsa, а для ключа с ED25519-шифрованием — id_ed25519.

Локальная служебная учетная запись deckhouse

Компоненты Deckhouse Platform используют UID/GID 64535 для запуска непривилегированных процессов и доступа к своим файлам на узле. Локальный пользователь и группа deckhouse закрепляют эти идентификаторы за Deckhouse Platform и позволяют ОС отображать имя deckhouse вместо числовых UID/GID в выводе ps, top и ls. Процессы, запущенные от имени пользователя deckhouse, могут отображаться в выводе ps и top — это штатная ситуация. Они принадлежат компонентам Deckhouse Platform и не являются пользовательскими сеансами.

Если учетная запись отсутствует, bashible создает ее с оболочкой /sbin/nologin, без пароля и прав sudo. В /etc/passwd для пользователя указан домашний каталог по умолчанию (обычно /home/deckhouse). Bashible создает этот каталог отдельно как базовый каталог для домашних каталогов пользователей, заданных ресурсами NodeUser; сама служебная учетная запись deckhouse не предназначена для входа и хранения пользовательских файлов. Учетная запись не должна предоставляться через AD или LDAP.

Имя deckhouse и UID/GID 64535 зарезервированы для Deckhouse Platform и не настраиваются. Не удаляйте и не переименовывайте пользователя или группу, не меняйте их UID/GID и не назначайте пользователю права sudo. Preflight-проверка допускает отсутствие пользователя и группы либо их наличие, если пользователь имеет UID и основной GID 64535, группа имеет GID 64535, а пользователь не имеет прав sudo. Установка завершается ошибкой, если имя используется с другими идентификаторами или UID/GID 64535 заняты другими учетными записями.

Флаг --preflight-skip-check=deckhouse-user отключает проверку, но не устраняет конфликт. Если пользователь или группа deckhouse существуют с другими идентификаторами, bashible не изменяет их и выводит предупреждение в журнал. Если UID/GID 64535 заняты другой учетной записью, bashible не сможет создать пользователя или группу deckhouse. Права sudo у существующего пользователя bashible не отзывает.

Если конфликт остался от предыдущей установки Deckhouse Platform на статическом узле, выполните ручную очистку статического узла. Это деструктивная операция: скрипт очистки удаляет службы, конфигурацию и локальные данные Kubernetes, containerd и etcd, а также учетные записи Deckhouse Platform, после чего перезагружает сервер. Выполняйте очистку только на узле, подготовленном к повторному развертыванию. В остальных случаях устраните конфликт вручную или пересоздайте узел.

Откат установки

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

dhctl bootstrap-phase abort

Файл конфигурации, передаваемый через параметр --config при запуске установщика, должен быть тем же, который использовался для первоначальной установки.

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

Виртуализация включается ресурсом ModuleConfig virtualization и разворачивает свои компоненты в неймспейсе d8-virtualization. Ресурс можно задать сразу в файле конфигурации установки либо применить в готовом кластере.

Включение виртуализации перезапускает kubelet, containerd и агенты сетевого модуля на всех узлах, где предполагается запуск виртуальных машин. Это необходимо для настройки связности containerd и хранилища образов DVCR.

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

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: virtualization
spec:
  enabled: true
  version: 1
  settings:
    dvcr:
      storage:
        type: PersistentVolumeClaim
        persistentVolumeClaim:
          size: 50G
    virtualMachineCIDRs:
      - 10.66.10.0/24

Остальные параметры описаны в справочнике настроек модуля.

Чтобы отследить готовность виртуализации, выполните команду:

d8 k get modules virtualization

Пример вывода:

NAME             WEIGHT   SOURCE      PHASE   ENABLED   READY
virtualization   900      deckhouse   Ready   True      True

Фаза модуля должна быть Ready.

Размещение компонентов виртуализации по узлам

Распределение компонентов по узлам зависит от конфигурации кластера. В нём могут быть только master-узлы, на которых работают и компоненты control plane, и нагрузка; master-узлы и worker-узлы; master-узлы, system-узлы и worker-узлы; либо другие сочетания. Под worker-узлами здесь понимаются узлы без ограничений (taints), мешающих запуску обычной рабочей нагрузки.

Компоненты Deckhouse Platform распределяет по приоритету, и если в кластере есть подходящий тип узлов, компонент попадёт на него. За что отвечает каждый компонент, описано в разделе «Подсистема Virtualization».

Название компонента Группа узлов Комментарий
virt-operator-* system/master  
virt-api-* master  
virt-controller-* system/worker  
virt-handler-* Узлы с KVM  
virtualization-api-* master  
virtualization-controller-* master  
dvcr-* system На узле должно быть доступно хранилище. При отсутствии system-узлов компонент размещается на worker-узле.
virtualization-audit-* master Доступен в коммерческих редакциях Deckhouse Platform.
virtualization-dra-* Отдельные узлы Доступен в коммерческих редакциях Deckhouse Platform.
vm-route-forge-* Все узлы кластера  

Компонент virt-handler-* запускается только на узлах, где Deckhouse Platform обнаружил поддержку KVM и проставил лейбл virtualization.deckhouse.io/kvm-enabled, а компонент virtualization-dra-* — только на узлах с лейблом virtualization.deckhouse.io/usbip.

Компоненты, которые создают и загружают образы и диски виртуальных машин, запускаются только на время этой работы:

Название компонента Группа узлов Комментарий
d8v-vi-importer-*, d8v-cvi-importer-* system/worker Загружает образ из внешнего источника или другого ресурса в хранилище образов.
d8v-vi-uploader-*, d8v-cvi-uploader-* system/worker Принимает файл, который вы загружаете из командной строки или веб-интерфейса.
d8v-vd-pvc-importer-*, d8v-vi-pvc-importer-* system/worker Переносит образ из хранилища образов на том диска.
d8v-pvc-pvc-source-importer-* system/worker Отдаёт данные исходного тома по сети при клонировании диска.
d8v-pvc-pvc-target-importer-* system/worker Принимает данные на целевой том при клонировании диска.
d8v-vi-bounder-* system/worker Удерживает том на нужном узле, пока образ создаётся на нём.

Кластер с taints на всех узлах

Иногда taints настроены на всех узлах кластера, и так администратор явно контролирует, на какие узлы попадает рабочая нагрузка. В такой конфигурации учитывайте следующее:

  1. При создании VirtualDisk обратите внимание на volumeBindingMode StorageClass. Если задано Immediate, PersistentVolume создаётся сразу после создания диска, ещё до планирования виртуальной машины. Убедитесь, что хранилище может создавать тома на узлах, которые разрешены для виртуальных машин через параметры размещения, включая nodeSelector, tolerations и настройки в spec виртуальной машины или VirtualMachineClass. Иначе диск может оказаться на узле, где виртуальная машина не сможет запуститься. При WaitForFirstConsumer том создаётся на узле планирования виртуальной машины, и эта проблема не возникает.

  2. Для работы VirtualImage и ClusterVirtualImage нужны временные компоненты из таблицы выше. У них есть toleration к taint dedicated.deckhouse.io=system.

  3. В кластере должна быть NodeGroup system, либо администратор сам добавляет taint dedicated.deckhouse.io=system на выбранные узлы без создания NodeGroup. Без таких узлов эти компоненты не будут запланированы, и образы не перейдут в фазу Ready.

Закрытое окружение, работа через прокси-сервер и стороннее хранилище образов контейнеров

Подробнее с установкой и обновлением Deckhouse Platform в закрытом окружении можно ознакомиться в руководствах «Установка Deckhouse Platform в закрытом окружении» и «Обновление Deckhouse Platform в закрытом окружении».

Установка из стороннего хранилища образов контейнеров

Deckhouse Platform можно установить из стороннего хранилища образов или через проксирующий сервер внутри закрытого контура.

Deckhouse Platform поддерживает аутентификацию в хранилище образов по схемам Basic и Bearer token (сначала проверяется Basic, при неуспехе — Bearer).

Если перед хранилищем стоит прокси-сервер, он должен корректно проксировать заголовок Registry API v2 Docker-Distribution-API-Version: registry/2.0, иначе проверка Basic может завершиться ошибкой, а последующая попытка Bearer сообщением с ошибкой couldn't find bearer realm parameter.

Протестирована и гарантируется работа со следующими хранилищами образов: Nexus, Harbor, Artifactory, CNCF Distribution, Quay.

При работе со сторонним хранилищем образов не используйте учетную запись администратора для доступа к нему со стороны Deckhouse Platform. Используйте отдельную учетную запись с правами только на чтение и только в пределах нужного раздела в хранилище образов. Ознакомьтесь с примером создания такой учетной записи.

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

  • начиная с версии Deckhouse Platform 1.75 — с помощью ModuleConfig deckhouse;
  • до версии Deckhouse Platform 1.75 — с помощью InitConfiguration (устаревший способ, пример приведен ниже).

Для настройки с помощью ModuleConfig deckhouse укажите параметры доступа к стороннему хранилищу образов в секции settings.registry.

Пример:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    registry:
      mode: Direct
      direct:
        imagesRepo: test-registry.io/some/path
        scheme: HTTPS
        username: <username>
        password: <password>
        ca: <CA>

Настройка работы со сторонним хранилищем образов через InitConfiguration **(устаревший способ)**

Установите следующие параметры в InitConfiguration:

  • imagesRepo: <PROXY_REGISTRY>/<DECKHOUSE_REPO_PATH>/ee — адрес образа Deckhouse Platform EE в стороннем хранилище образов. Пример: imagesRepo: registry.deckhouse.ru/deckhouse/ee;
  • registryDockerCfg: <BASE64> — права доступа к стороннему хранилищу образов, зашифрованные в Base64.

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

{"auths": { "<PROXY_REGISTRY>": {}}}

Приведенное значение должно быть закодировано в Base64.

Если для доступа к образам Deckhouse Platform в стороннем хранилище образов необходима аутентификация, registryDockerCfg должен выглядеть следующим образом:

{"auths": { "<PROXY_REGISTRY>": {"username":"<PROXY_USERNAME>","password":"<PROXY_PASSWORD>","auth":"<AUTH_BASE64>"}}}

где:

  • <PROXY_USERNAME> — имя пользователя для аутентификации на <PROXY_REGISTRY>;
  • <PROXY_PASSWORD> — пароль пользователя для аутентификации на <PROXY_REGISTRY>;
  • <PROXY_REGISTRY> — адрес стороннего хранилища образов в виде <HOSTNAME>[:PORT];
  • <AUTH_BASE64> — строка вида <PROXY_USERNAME>:<PROXY_PASSWORD>, закодированная в Base64.

Итоговое значение для registryDockerCfg должно быть также закодировано в Base64.

Вы можете использовать следующий скрипт для генерации registryDockerCfg:

declare MYUSER='<PROXY_USERNAME>'
declare MYPASSWORD='<PROXY_PASSWORD>'
declare MYREGISTRY='<PROXY_REGISTRY>'

MYAUTH=$(echo -n "$MYUSER:$MYPASSWORD" | base64 -w0)
MYRESULTSTRING=$(echo -n "{\"auths\":{\"$MYREGISTRY\":{\"username\":\"$MYUSER\",\"password\":\"$MYPASSWORD\",\"auth\":\"$MYAUTH\"}}}" | base64 -w0)

echo "$MYRESULTSTRING"

Для настройки нестандартных конфигураций сторонних хранилищ образов в InitConfiguration предусмотрены еще два параметра:

  • registryCA — корневой сертификат, которым можно проверить сертификат хранилища образов (если хранилище образов использует самоподписанные сертификаты);
  • registryScheme — протокол доступа к хранилищу образов (HTTP или HTTPS). По умолчанию — HTTPS.

Особенности настройки Nexus

При взаимодействии с репозиторием типа docker, расположенным в Nexus (например, при выполнении команд docker pull, docker push), требуется указывать адрес в формате <NEXUS_URL>:<REPOSITORY_PORT>/<PATH>.

Использование значения URL из параметров репозитория Nexus недопустимо.

При использовании менеджера репозиториев Nexus должны быть выполнены следующие требования:

  • Создан проксирующий репозиторий Docker («Administration» → «Repository» → «Repositories»):
    • установлен в 0 параметр Maximum metadata age для репозитория.
  • Настроен контроль доступа:
    • создана роль Nexus («Administration» → «Security» → «Roles») со следующими полномочиями:
      • nx-repository-view-docker-<репозиторий>-browse;
      • nx-repository-view-docker-<репозиторий>-read;
    • создан пользователь («Administration» → «Security» → «Users») с ролью Nexus.

Чтобы настроить Nexus, выполните следующие шаги:

  1. Создайте проксирующий репозиторий Docker («Administration» → «Repository» → «Repositories»), указывающий на публичное хранилище образов Deckhouse. Создание проксирующего репозитория Docker

  2. Заполните поля страницы создания репозитория следующим образом:
    • Name должно содержать имя создаваемого репозитория, например, d8-proxy.
    • Repository Connectors / HTTP или Repository Connectors / HTTPS должно содержать выделенный порт для создаваемого репозитория, например, 8123 или иной.
    • Remote storage должно иметь значение https://registry.deckhouse.ru/.
    • Auto blocking enabled и Not found cache enabled могут быть выключены для отладки; в противном случае их следует включить.
    • Maximum Metadata Age должно быть равно 0.
    • Если планируется использовать коммерческую редакцию Deckhouse Platform, флажок Authentication должен быть включен, а связанные поля должны быть заполнены следующим образом:
      • Authentication Type должно иметь значение Username.
      • Username должно иметь значение license-token.
      • Password должно содержать ключ лицензии Deckhouse Platform.

    Пример настроек репозитория 1 Пример настроек репозитория 2 Пример настроек репозитория 3

  3. Настройте контроль доступа Nexus для доступа Deckhouse Platform к созданному репозиторию:
    • Создайте роль Nexus («Administration» → «Security» → «Roles») с полномочиями nx-repository-view-docker-<репозиторий>-browse и nx-repository-view-docker-<репозиторий>-read.

      Создание роли Nexus

    • Создайте пользователя («Administration» → «Security» → «Users») с ролью, созданной выше.

      Создание пользователя Nexus

    • Включите Docker Bearer Token Realm («Administration» → «Security» → «Realms»):

      • Docker Bearer Token Realm должен быть в списке Active (справа), а не в Available (слева).
      • Если его нет в Active:
        1. Найдите в списке Available.
        2. Переместите стрелкой в Active.
        3. Нажмите Save.
        4. Перезапустите Nexus (это обязательно, для применения изменений).

      Настройка Docker Bearer Token Realm

В результате образы Deckhouse Platform будут доступны, например, по следующему адресу: https://<NEXUS_HOST>:<REPOSITORY_PORT>/deckhouse/ee:<d8s-version>.

Особенности настройки Harbor

Используйте функцию Harbor Proxy Cache.

  1. Настройте доступ к хранилищу образов:
    • в боковом меню перейдите в раздел «Administration» → «Registries» и нажмите «New Endpoint», чтобы добавить эндпоинт для хранилища образов;
    • в выпадающем списке «Provider» выберите «Docker Registry»;
    • в поле «Name» укажите имя эндпоинта на свое усмотрение;
    • в поле «Endpoint URL» укажите https://registry.deckhouse.ru;
    • в поле «Access ID» укажите license-token;
    • в поле «Access Secret» укажите свой лицензионный ключ Deckhouse Platform;
    • задайте остальные параметры по своему усмотрению;
    • нажмите «ОК», чтобы подтвердить создание эндпоинта для хранилища образов.

    Настройка доступа к хранилищу образов

  2. Создайте новый проект:
    • в боковом меню перейдите в раздел «Projects» и нажмите «New Project», чтобы добавить проект;
    • в поле «Project Name» укажите любое имя проекта на свое усмотрение (например, d8s). Указанное имя будет частью URL-адреса;
    • в поле «Access Level» выберите «Public»;
    • включите «Proxy Cache» и в выпадающем списке выберите хранилище образов, созданное ранее;
    • задайте остальные параметры по своему усмотрению;
    • нажмите «ОК», чтобы подтвердить создание проекта.

    Создание нового проекта

После настройки Harbor образы Deckhouse Platform станут доступны по адресу следующего вида: https://your-harbor.com/d8s/deckhouse/ee:{d8s-version}.

Ручная загрузка образов Deckhouse Platform и БД уязвимостей в приватное хранилище образов контейнеров

Утилита d8 mirror недоступна для использования с редакциями Community Edition (CE) и Basic Edition (BE).

О текущем статусе версий на каналах обновлений можно узнать на releases.deckhouse.ru.

  • Скачайте и установите утилиту Deckhouse CLI.

  • Скачайте образы Deckhouse Platform в выделенную директорию, используя команду d8 mirror pull.

    По умолчанию d8 mirror pull скачивает только актуальные версии Deckhouse Platform, базы данных сканера уязвимостей (если они входят в редакцию Deckhouse Platform) и официально поставляемых модулей. Например, для Deckhouse Platform 1.59 будет скачана только версия 1.59.12, т. к. этого достаточно для обновления платформы с 1.58 до 1.59.

    Выполните следующую команду (укажите код редакции и лицензионный ключ), чтобы скачать образы актуальных версий:

    d8 mirror pull \
      --source='registry.deckhouse.ru/deckhouse/<EDITION>' \
      --license='<LICENSE_KEY>' /home/user/d8-bundle
    

    где:

    • --source — адрес хранилища образов Deckhouse;
    • <EDITION> — код редакции Deckhouse Platform (например, ee, se, se-plus). По умолчанию параметр --source ссылается на редакцию Enterprise Edition (ee) и может быть опущен;
    • --license — параметр для указания лицензионного ключа Deckhouse Platform для аутентификации в официальном хранилище образов;
    • <LICENSE_KEY> — лицензионный ключ Deckhouse Platform;
    • /home/user/d8-bundle — директория, в которой будут расположены пакеты образов. Будет создана, если не существует.

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

    Пример команды для загрузки всех версий Deckhouse Platform EE, начиная с версии 1.59 (укажите лицензионный ключ):

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --since-version=1.59 /home/user/d8-bundle
    

    Пример команды для загрузки актуальных версий Deckhouse Platform SE (укажите лицензионный ключ):

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --source='registry.deckhouse.ru/deckhouse/se' \
    /home/user/d8-bundle
    

    Пример команды для загрузки образов Deckhouse Platform из стороннего хранилища образов:

    d8 mirror pull \
    --source='corp.company.com:5000/sys/deckhouse' \
    --source-login='<USER>' --source-password='<PASSWORD>' /home/user/d8-bundle
    

    Пример команды для загрузки пакета баз данных сканера уязвимостей:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-modules /home/user/d8-bundle
    

    Пример команды для загрузки пакетов всех доступных дополнительных модулей:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db /home/user/d8-bundle
    

    Пример команды для загрузки пакетов модулей stronghold и secrets-store-integration:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db \
    --include-module stronghold \
    --include-module secrets-store-integration \
    /home/user/d8-bundle
    

    Пример команды для загрузки модуля stronghold с semver-ограничением ^ (разрешает обновления, которые не меняют первую ненулевую цифру слева) от версии 1.2.0:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db \
    --include-module stronghold@1.2.0 \
    /home/user/d8-bundle
    

    Пример команды для загрузки модуля secrets-store-integration с semver-ограничением ~ (разрешает обновления, которые не меняют разряд последней указанной цифры) от версии 1.1.0:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db \
    --include-module secrets-store-integration@~1.1.0 \
    /home/user/d8-bundle
    

    Заключайте в кавычки значение флага --include-module, если оно содержит >= или <=. Без кавычек shell обработает это как перенаправление ввода/вывода.

    Пример команды для загрузки модуля console с semver-ограничением >= (любая версия, начиная с указанной и выше) от версии 1.43.2:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db \
    --include-module "console@>=1.43.2" \
    /home/user/d8-bundle
    

    Пример команды для загрузки точной версии модуля stronghold 1.2.5 с публикацией во все каналы обновлений:

    d8 mirror pull \
    --license='<LICENSE_KEY>' \
    --no-platform --no-security-db \
    --include-module stronghold@=v1.2.5 \
    /home/user/d8-bundle
    

Другие параметры команды, доступные для использования:

  • --no-pull-resume — принудительно начать загрузку сначала;
  • --force — перезаписать существующие пакеты, если они конфликтуют с текущей операцией загрузки;
  • --ignore-suspend — игнорировать приостановленные каналы релизов и продолжить зеркалирование. Используйте с осторожностью;
  • --no-platform — пропустить загрузку пакета образов Deckhouse Platform (platform.tar);
  • --no-modules — пропустить загрузку пакетов модулей (module-*.tar);
  • --no-security-db — пропустить загрузку пакета баз данных сканера уязвимостей (security.tar);
  • --no-packages — пропустить загрузку пакетов Deckhouse;
  • --no-installer — пропустить загрузку образов инсталлятора Deckhouse;
  • --only-extra-images — загрузить только дополнительные образы модулей без загрузки основных образов модулей;
  • --skip-vex-images — пропустить загрузку VEX-образов;
  • --include-platform = CONSTRAINT — загрузить релизы Deckhouse Platform по semver-ограничению. Параметр нельзя использовать одновременно с --since-version и --deckhouse-tag. Значение ограничения всегда заключайте в кавычки: > и < являются shell-перенаправлениями. Примеры: --include-platform ">=1.64 <=1.68", --include-platform "~1.65.0", --include-platform "^1.65.0", --include-platform "1.65.0", --include-platform "=v1.65.3" или --include-platform "=v1.65.3+stable";
  • --include-module / -i = name[@Major.Minor] — загрузить определенный набор модулей по принципу белого списка (и, при необходимости, их минимальных версий). Укажите несколько раз, чтобы добавить в белый список больше модулей. Эти флаги игнорируются, если используются совместно с --no-modules.

    Поддерживаются следующие синтаксисы для указания версий модулей. Если используются операторы >= или <=, заключайте в кавычки все значение флага:

    • module-name@1.3.0 — загрузка версий с semver ^ ограничением (^1.3.0), включая v1.3.0, v1.3.3, v1.4.1;
    • module-name@~1.3.0 — загрузка версий с semver ~ ограничением (>=1.3.0 <1.4.0), включая только v1.3.0, v1.3.3;
    • "module-name@>=1.3.0" — загрузка версий с semver-ограничением >=, включая явно указанную версию и более новые версии, подходящие под ограничение;
    • "module-name@>=1.3.0 <=1.4.0" — загрузка версий в диапазоне с учетом нижней и верхней границы;
    • module-name@=v1.3.0 — загрузка точного соответствия тегу v1.3.0, публикация во все каналы релизов;
    • module-name@=v1.3.0+stable — загрузка точного соответствия тегу v1.3.0, публикация в канал релизов stable;
    • module-name@=bobV1 — загрузка точного соответствия тегу bobV1, публикация во все каналы релизов.
  • --exclude-module / -e = name — пропустить загрузку определенного набора модулей по принципу черного списка. Укажите несколько раз, чтобы добавить в черный список больше модулей. Игнорируется, если используются --no-modules или --include-module.
  • --include-package = name[@version] — загрузить определенный набор пакетов по принципу белого списка. Для указания версий и semver-ограничений используется тот же синтаксис, что и у --include-module, включая правила использования кавычек.
  • --exclude-package = name[@version] — пропустить загрузку определенного набора пакетов по принципу черного списка. Игнорируется, если используется --include-package.
  • --modules-path-suffix — изменить суффикс пути к репозиторию модулей в основном репозитории Deckhouse Platform. По умолчанию используется суффикс /modules (так, например, полный путь к репозиторию с модулями будет выглядеть как registry.deckhouse.ru/deckhouse/EDITION/modules);
  • --since-version=X.Y — скачать все версии Deckhouse Platform, начиная с указанной минорной версии. Параметр будет проигнорирован, если указанная версия выше, чем версия на канале обновлений Rock Solid. Параметр не может быть использован одновременно с параметром --deckhouse-tag;
  • --deckhouse-tag — скачать только конкретную версию Deckhouse Platform (без учета каналов обновлений). Параметр не может быть использован одновременно с параметром --since-version;
  • --installer-tag=TAG — скачать конкретный тег инсталлятора Deckhouse. Если параметр не указан, используется тег latest;
  • --proxy-registry — использовать proxy/cache-хранилище, которое не поддерживает registry catalog API. Требует --include-platform, если платформа не пропущена через --no-platform, и хотя бы один --include-module, если модули не пропущены через --no-modules. Нельзя использовать вместе с --deckhouse-tag или --since-version;
  • --dry-run — вывести список того, что будет загружено, без скачивания образов;
  • --verbose-summary — вывести подробную сводку по всем модулям и пакетам с разрешенными версиями;
  • --gost-digest — рассчитать контрольную сумму итогового набора образов Deckhouse Platform в формате ГОСТ Р 34.11-2012 (Стрибог). Контрольная сумма будет отображена и записана в файл с расширением .tar.gostsum в папке с TAR-архивом, содержащим образы Deckhouse Platform;
  • --source-login и --source-password — данные для аутентификации в стороннем хранилище образов;
  • --tls-skip-verify — отключить проверку TLS-сертификата;
  • --insecure — обращаться к хранилищам образов по HTTP;
  • --images-bundle-chunk-size=N — максимальный размер файлов (в ГБ), на которые нужно разбить архив образов. В результате работы вместо одного файла архива образов будет создан набор CHUNK-файлов (например, d8.tar.NNNN.chunk). Чтобы загрузить образы из такого набора файлов, укажите в команде d8 mirror push имя файла без суффикса .NNNN.chunk (например, d8.tar для файлов d8.tar.NNNN.chunk);
  • --tmp-dir — путь к директории для временных файлов, который будет использоваться во время операций загрузки и выгрузки образов. Вся обработка выполняется в этом каталоге. Он должен иметь достаточный объем свободного дискового пространства, чтобы вместить весь загружаемый пакет образов. По умолчанию используется поддиректория .tmp в директории с пакетами образов.

Дополнительные параметры конфигурации для семейства команд d8 mirror доступны в виде переменных окружения:

  • HTTP_PROXY/HTTPS_PROXY — URL-адрес прокси-сервера для запросов к HTTP(S)-хостам, которые не указаны в списке хостов в переменной $NO_PROXY;
  • NO_PROXY — список хостов, разделенных запятыми, которые следует исключить из проксирования. Каждое значение может быть представлено в виде IP-адреса (1.2.3.4), CIDR (1.2.3.4/8), домена или символа (*). IP-адреса и домены также могут включать номер порта (1.2.3.4:80). Доменное имя соответствует как самому себе, так и всем поддоменам. Доменное имя, начинающееся с ., соответствует только поддоменам. Например, foo.com соответствует foo.com и bar.foo.com; .y.com соответствует x.y.com, но не соответствует y.com. Символ * отключает проксирование;
  • SSL_CERT_FILE — путь до SSL-сертификата. Если переменная установлена, системные сертификаты не используются;
  • SSL_CERT_DIR — список каталогов, разделенный двоеточиями. Определяет, в каких каталогах искать файлы SSL-сертификатов. Если переменная установлена, системные сертификаты не используются. Подробнее…
  • MIRROR_BYPASS_ACCESS_CHECKS — установите для этого параметра значение 1, чтобы отключить проверку корректности переданных учетных данных для хранилища образов.
  • На хост с доступом к хранилищу образов, куда нужно загрузить образы Deckhouse Platform, скопируйте загруженный пакет образов Deckhouse Platform и установите Deckhouse CLI.

  • Загрузите образы Deckhouse Platform в хранилище образов с помощью команды d8 mirror push.

    Команда d8 mirror push загружает в хранилище образов образы из всех пакетов, которые присутствуют в переданной директории. При необходимости выгрузить в хранилище образов только часть пакетов вы можете либо выполнить команду для каждого необходимого пакета образов, передав ей прямой путь до TAR-пакета вместо директории, либо убрав расширение .tar у ненужных пакетов или переместив их вне директории.

    Пример команды для загрузки пакетов образов из директории /mnt/MEDIA/d8-images (укажите данные для авторизации при необходимости):

    d8 mirror push /mnt/MEDIA/d8-images 'corp.company.com:5000/sys/deckhouse' \
      --registry-login='<USER>' --registry-password='<PASSWORD>'
    

    Перед загрузкой образов убедитесь, что путь для загрузки в хранилище образов существует (в примере — /sys/deckhouse) и у используемой учетной записи есть права на запись.

    Если вы используете Harbor, вы не сможете выгрузить образы в корень проекта. Используйте выделенный репозиторий в проекте для размещения образов Deckhouse Platform.

  • После загрузки образов в хранилище образов можно переходить к установке Deckhouse Platform. Воспользуйтесь руководством по быстрому старту.

    При запуске установщика используйте хранилище образов, в которое ранее были загружены образы, а не официальное публичное хранилище образов Deckhouse Platform. Для примера выше адрес запуска установщика будет иметь вид corp.company.com:5000/sys/deckhouse/install:stable вместо registry.deckhouse.ru/deckhouse/ee/install:stable.

    В секции параметров registry ModuleConfig deckhouse при установке также используйте адрес вашего хранилища образов и данные авторизации (с версии Deckhouse Platform 1.75). Устаревший способ — использование InitConfiguration (параметры imagesRepo, registryDockerCfg).

Создание кластера и запуск Deckhouse Platform без использования каналов обновлений

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

Если необходимо установить Deckhouse Platform с отключенным автоматическим обновлением:

  1. Используйте тег образа установщика соответствующей версии. Например, если вы хотите установить релиз v1.44.3, используйте образ your.private.registry.com/deckhouse/install:v1.44.3.
  2. Укажите соответствующий номер версии в параметре deckhouse.devBranch в InitConfiguration.

Если вы хотите отключить автоматические обновления для уже установленного Deckhouse Platform (включая обновления patch-релизов), удалите параметр releaseChannel из конфигурации модуля deckhouse.

Использование прокси-сервера

Пример шагов по настройке прокси-сервера на базе Squid...

  1. Подготовьте сервер (или виртуальную машину). Сервер должен быть доступен с необходимых узлов кластера, и у него должен быть выход в интернет.
  2. Установите Squid (здесь и далее примеры для Ubuntu):

    apt-get install squid
    
  3. Создайте файл конфигурации Squid:

    cat <<EOF > /etc/squid/squid.conf
    auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
    auth_param basic realm proxy
    acl authenticated proxy_auth REQUIRED
    http_access allow authenticated
    
    # Укажите необходимый порт. Порт 3128 используется по умолчанию.
    http_port 3128
    
  4. Создайте пользователя и пароль для аутентификации на прокси-сервере:

    Пример для пользователя test с паролем test (обязательно измените):

    echo "test:$(openssl passwd -crypt test)" >> /etc/squid/passwords
    
  5. Запустите Squid и включите его автоматический запуск при загрузке сервера:

    systemctl restart squid
    systemctl enable squid
    

Для настройки Deckhouse Platform на работу с прокси-сервером используйте параметр proxy ресурса ClusterConfiguration.

Пример:

apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Cloud
cloud:
  provider: OpenStack
  prefix: main
podSubnetCIDR: 10.111.0.0/16
serviceSubnetCIDR: 10.222.0.0/16
kubernetesVersion: "Automatic"
cri: "Containerd"
clusterDomain: "cluster.local"
proxy:
  httpProxy: "http://user:password@proxy.company.my:3128"
  httpsProxy: "https://user:password@proxy.company.my:8443"

Автозагрузка прокси-переменных пользователям в CLI

Начиная с версии 1.67, в Deckhouse Platform больше не настраивается файл /etc/profile.d/d8-system-proxy.sh, который ранее устанавливал прокси-переменные для пользователей. Для автозагрузки прокси-переменных пользователям в CLI используйте ресурс NodeGroupConfiguration:

apiVersion: deckhouse.io/v1alpha1
kind: NodeGroupConfiguration
metadata:
  name: profile-proxy.sh
spec:
  bundles:
    - '*'
  nodeGroups:
    - '*'
  weight: 99
  content: |
    {{- if .proxy }}
      {{- if .proxy.httpProxy }}
    export HTTP_PROXY={{ .proxy.httpProxy | quote }}
    export http_proxy=${HTTP_PROXY}
      {{- end }}
      {{- if .proxy.httpsProxy }}
    export HTTPS_PROXY={{ .proxy.httpsProxy | quote }}
    export https_proxy=${HTTPS_PROXY}
      {{- end }}
      {{- if .proxy.noProxy }}
    export NO_PROXY={{ .proxy.noProxy | join "," | quote }}
    export no_proxy=${NO_PROXY}
      {{- end }}
    bb-sync-file /etc/profile.d/profile-proxy.sh - << EOF
    export HTTP_PROXY=${HTTP_PROXY}
    export http_proxy=${HTTP_PROXY}
    export HTTPS_PROXY=${HTTPS_PROXY}
    export https_proxy=${HTTPS_PROXY}
    export NO_PROXY=${NO_PROXY}
    export no_proxy=${NO_PROXY}
    EOF
    {{- else }}
    rm -rf /etc/profile.d/profile-proxy.sh
    {{- end }}

Дополнительные ресурсы