Страница находится в стадии активной разработки и может содержать неполные данные. Ниже представлена обзорная информация о процессе установки Deckhouse. Для более детального ознакомления рекомендуем перейти в раздел Быстрый старт, где доступны пошаговые инструкции.

Инсталлятор Deckhouse доступен в виде образа контейнера и основан на утилите dhctl, в задачи которой входят:

  • Создание и настройка объектов в облачной инфраструктуре с помощью Terraform;
  • Установка необходимых пакетов ОС на узлах (в том числе установка пакетов Kubernetes);
  • Установка Deckhouse;
  • Создание, настройка узлов кластера Kubernetes;
  • Поддержание состояния кластера в соответствии с описанной конфигурацией.

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

  • В поддерживаемом облаке. Утилита dhctl автоматически создает и настраивает все необходимые ресурсы, включая виртуальные машины, развертывает Kubernetes-кластер и устанавливает Deckhouse. Полный список поддерживаемых облачных провайдеров доступен в разделе Кластер Kubernetes.

  • На серверах bare-metal или в неподдерживаемых облаках. В этом варианте dhctl выполняет настройку сервера или виртуальной машины, развертывает Kubernetes-кластер с одним master-узлом и устанавливает Deckhouse. Для добавления дополнительных узлов в кластер можно воспользоваться готовыми скриптами настройки.

  • В существующем Kubernetes-кластере. Если Kubernetes-кластер уже развернут, dhctl устанавливает Deckhouse, интегрируя его с текущей инфраструктурой.

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

Перед установкой убедитесь в следующем:

  • Для кластеров на bare-metal и в неподдерживаемых облаках: сервер использует операционную систему из списка поддерживаемых ОС или совместимую с ним, а также доступен по SSH через ключ.

  • Для поддерживаемых облаков: имеются необходимые квоты для создания ресурсов и подготовлены параметры доступа к облачной инфраструктуре (зависят от конкретного провайдера).

  • Для всех вариантов установки: настроен доступ к container registry с образами Deckhouse (registry.deckhouse.io или registry.deckhouse.ru).

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

Перед началом установки Deckhouse необходимо выполнить подготовку YAML-файла конфигурации установки. Этот файл содержит основные параметры для настройки Deckhouse, включая информацию о кластерных компонентах, сетевых настройках и интеграциях, а также описание ресурсов для создания после установки (настройки узлов и Ingress-контроллера).

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

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

YAML-файл конфигурации установки содержит параметры нескольких ресурсов (манифесты):

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

    Основные настройки, задаваемые в этом ресурсе:

  2. ClusterConfiguration — общие параметры кластера, такие как версия control plane, сетевые настройки, параметры CRI и т. д.

    Этот ресурс требуется использовать только в случае, если Deckhouse устанавливается с предварительным развертыванием кластера Kubernetes. Если Deckhouse устанавливается в уже существующий кластер, этот ресурс не нужен.

  3. StaticClusterConfiguration — параметры для кластеров Kubernetes, развертываемых на серверах bare-metal или виртуальных машинах в неподдерживаемых облаках.

    Этот ресурс требуется использовать только в случае, если Deckhouse устанавливается с предварительным развертыванием кластера Kubernetes. Если Deckhouse устанавливается в уже существующий кластер, этот ресурс не нужен.

  4. <CLOUD_PROVIDER>ClusterConfiguration — набор ресурсов, содержащих параметры конфигурации поддерживаемых облачных провайдеров. Включает такие параметры, как:

    • Настройки доступа к облачной инфраструктуре (параметры аутентификации);
    • Тип и параметры схемы размещения ресурсов;
    • Сетевые параметры;
    • Настройки создаваемых групп узлов.

    Список ресурсов конфигурации поддерживаемых облачных провайдеров:

  5. ModuleConfig — набор ресурсов, содержащих параметры конфигурации встроенных модулей Deckhouse.

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

    Например, для модуля prometheus настройка указывается в параметре nodeSelector.

  6. IngressNginxController — развертывание Ingress-контроллера.

  7. NodeGroup — создание дополнительных групп узлов.

  8. InstanceClass — добавление конфигурационных ресурсов.

  9. ClusterAuthorizationRule, User — настройка прав и пользователей.

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

1apiVersion: deckhouse.io/v1
2kind: ClusterConfiguration
3clusterType: Cloud
4cloud:
5  provider: Azure
6  prefix: cloud-demo
7podSubnetCIDR: 10.111.0.0/16
8serviceSubnetCIDR: 10.222.0.0/16
9kubernetesVersion: "Automatic"
10clusterDomain: cluster.local
11---
12apiVersion: deckhouse.io/v1
13kind: AzureClusterConfiguration
14layout: Standard
15sshPublicKey: <SSH_PUBLIC_KEY>
16vNetCIDR: 10.241.0.0/16
17subnetCIDR: 10.241.0.0/24
18masterNodeGroup:
19  replicas: 3
20  instanceClass:
21    machineSize: Standard_D4ds_v4
22    urn: Canonical:UbuntuServer:18.04-LTS:18.04.202010140
23    enableExternalIP: true
24provider:
25  subscriptionId: <SUBSCRIPTION_ID>
26  clientId: <CLIENT_ID>
27  clientSecret: <CLIENT_SECRET>
28  tenantId: <TENANT_ID>
29  location: westeurope
30---
31apiVersion: deckhouse.io/v1alpha1
32kind: ModuleConfig
33metadata:
34  name: cni-flannel
35spec:
36  enabled: true
37---
38apiVersion: deckhouse.io/v1alpha1
39kind: ModuleConfig
40metadata:
41  name: deckhouse
42spec:
43  enabled: true
44  settings:
45    releaseChannel: Stable
46    bundle: Default
47    logLevel: Info
48  version: 1
49---
50apiVersion: deckhouse.io/v1alpha1
51kind: ModuleConfig
52metadata:
53  name: global
54spec:
55  enabled: true
56  settings:
57    modules:
58      publicDomainTemplate: "%s.k8s.example.com"
59  version: 1
60---
61apiVersion: deckhouse.io/v1alpha1
62kind: ModuleConfig
63metadata:
64  name: node-manager
65spec:
66  version: 1
67  enabled: true
68  settings:
69    earlyOomEnabled: false
70---
71apiVersion: deckhouse.io/v1alpha1
72kind: ModuleConfig
73metadata:
74  name: prometheus
75spec:
76  version: 2
77  enabled: true
78  # Укажите, в случае использование выделенных узлов для мониторинга. 
79  # settings:
80  #   nodeSelector:
81  #     node.deckhouse.io/group: monitoring
82---
83apiVersion: deckhouse.io/v1
84kind: IngressNginxController
85metadata:
86  name: main
87spec:
88  ingressClass: "nginx"
89  controllerVersion: "1.1"
90  inlet: "LoadBalancer"
91  nodeSelector:
92    node.deckhouse.io/group: worker
93---
94apiVersion: deckhouse.io/v1
95kind: AzureInstanceClass
96metadata:
97  name: worker
98spec:
99  machineSize: Standard_F4
100---
101apiVersion: deckhouse.io/v1
102kind: NodeGroup
103metadata:
104  name: worker
105spec:
106  cloudInstances:
107    classReference:
108      kind: AzureInstanceClass
109      name: worker
110    maxPerZone: 3
111    minPerZone: 1
112    zones: ["1"]
113  nodeType: CloudEphemeral
114---
115apiVersion: deckhouse.io/v1
116kind: ClusterAuthorizationRule
117metadata:
118  name: admin
119spec:
120  subjects:
121  - kind: User
122    name: admin@deckhouse.io
123  accessLevel: SuperAdmin
124  portForwarding: true
125---
126apiVersion: deckhouse.io/v1
127kind: User
128metadata:
129  name: admin
130spec:
131  email: admin@deckhouse.io
132  password: '$2a$10$isZrV6uzS6F7eGfaNB1EteLTWky7qxJZfbogRs1egWEPuT1XaOGg2'
133---
134apiVersion: deckhouse.io/v1alpha1
135kind: ModuleConfig
136metadata:
137  name: deckhouse-admin
138spec:
139  enabled: true  

Post-bootstrap-скрипт

После завершения установки Deckhouse инсталлятор предоставляет возможность выполнить пользовательский скрипт на одном из master-узлов. Такой скрипт может использоваться для:

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

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

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

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

1#!/usr/bin/env bash
2set -e
3set -o pipefail
4INGRESS_NAME="nginx"
5echo_err() { echo "$@" 1>&2; }
6# declare the variable
7lb_ip=""
8# get the load balancer IP
9for i in {0..100}
10do
11  if lb_ip="$(kubectl -n d8-ingress-nginx get svc "${INGRESS_NAME}-load-balancer" -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"; then
12    if [ -n "$lb_ip" ]; then
13      break
14    fi
15  fi
16  lb_ip=""
17  sleep 5
18done
19if [ -n "$lb_ip" ]; then
20  echo_err "The load balancer external IP: $lb_ip"
21else
22  echo_err "Could not get the external IP of the load balancer"
23  exit 1
24fi
25outContent="{\"frontend_ips\":[\"$lb_ip\"]}"
26if [ -z "$OUTPUT" ]; then
27  echo_err "The OUTPUT env is empty. The result was not saved to the output file."
28else
29  echo "$outContent" > "$OUTPUT"
30fi

Установка Deckhouse

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

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

Запуск контейнера инсталлятора Deckhouse из публичного container registry выглядит следующим образом:

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

Где:

  1. <DECKHOUSE_REVISION>редакция Deckhouse, например 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 в редакции CE:

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

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

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

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

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

1dhctl bootstrap \
2  --ssh-user=<SSH_USER> --ssh-agent-private-keys=/tmp/.ssh/id_rsa \
3  --config=/config.yml

Где:

  • /config.yml — файл конфигурации установки;
  • <SSH_USER> — имя пользователя для подключения по SSH к серверу;
  • --ssh-agent-private-keys — файл приватного SSH-ключа для подключения по SSH.

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

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

  1. Общие проверки:
    • Значения параметров PublicDomainTemplate clusterDomain не совпадают.
    • Данные аутентификации для хранилища образов контейнеров, указанные в конфигурации установки, корректны.
    • Имя хоста соответствует следующим требованиям:
      • Длина не более 63 символов;
      • Состоит только из строчных букв;
      • Не содержит спецсимволов (допускаются символы - и ., при этом они не могут быть в начале или в конце имени).
    • На сервере (ВМ) отсутствует установленный CRI (containerd).
    • Имя хоста должно быть уникальным в пределах кластера.
  2. Проверки для установки статического и гибридного кластера:
    • Указан только один параметр --ssh-host. Для статической конфигурации кластера можно задать только один IP-адрес для настройки первого master-узла.
    • Должна быть возможность подключения по SSH с использованием указанных данных аутентификации.
    • Должна быть возможность установки SSH-туннеля до сервера (или виртуальной машины) master-узла.
    • Сервер (ВМ) удовлетворяет минимальным требованиям для настройки master-узла.
    • На сервере (ВМ) для master-узла установлен Python и необходимые библиотеки.
    • Хранилище образов контейнеров доступно через прокси (если настройки прокси указаны в конфигурации установки).
    • На сервере (ВМ) для master-узла и хосте инсталлятора свободны порты, необходимые для процесса установки.
    • DNS должен разрешать localhost в IP-адрес 127.0.0.1.
    • На сервере (ВМ) пользователю доступна команда sudo.
  3. Проверки для установки облачного кластера:
    • Конфигурация виртуальной машины master-узла удовлетворяет минимальным требованиям.

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

  • --preflight-skip-all-checks — пропуск всех предварительных проверок.
  • --preflight-skip-ssh-forward-check — пропуск проверки проброса SSH.
  • --preflight-skip-availability-ports-check — пропуск проверки доступности необходимых портов.
  • --preflight-skip-resolving-localhost-check — пропуск проверки localhost.
  • --preflight-skip-deckhouse-version-check — пропуск проверки версии Deckhouse.
  • --preflight-skip-registry-through-proxy — пропуск проверки доступа к registry через прокси-сервер.
  • --preflight-skip-public-domain-template-check — пропуск проверки шаблона publicDomain.
  • --preflight-skip-ssh-credentials-check — пропуск проверки учетных данных SSH-пользователя.
  • --preflight-skip-registry-credential — пропуск проверки учетных данных для доступа к registry.
  • --preflight-skip-containerd-exist — пропуск проверки наличия containerd.
  • --preflight-skip-python-checks — пропуск проверки наличия Python.
  • --preflight-skip-sudo-allowed — пропуск проверки прав доступа для выполнения команды sudo.
  • --preflight-skip-system-requirements-check — пропуск проверки системных требований.
  • --preflight-skip-one-ssh-host — пропуск проверки количества указанных SSH-хостов.

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

1    dhctl bootstrap \
2    --ssh-user=<SSH_USER> --ssh-agent-private-keys=/tmp/.ssh/id_rsa \
3    --config=/config.yml \
4    --preflight-skip-all-checks 

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

Если установка была прервана или возникли проблемы во время установки в поддерживаемом облаке, то могут остаться ресурсы, созданные в процессе установки. Для их удаления используйте команду dhctl bootstrap-phase abort, выполнив ее в контейнере инсталлятора.

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