Для работы ELMA365 требуется установленный рабочий Kubernetes-кластер не ниже версии 1.21. Мы рекомендуем платформу Deckhouse на базе Open Source-компонентов. Эта платформа, кроме Kubernetes, включает дополнительные модули для мониторинга, балансировки трафика, автомасштабирования, безопасного доступа и не только. Модули преднастроены, интегрированы друг с другом и готовы к работе. Управление всеми компонентами кластера и платформы, а также их обновление полностью автоматизированы.
Deckhouse в реестре российского ПО и сертифицирован в CNCF.
В рамках статьи разворачивается Kubernetes-кластер, который состоит из единственного master-узла.
Установка состоит из пяти этапов:
- Подготовка инфраструктуры.
- Подготовка конфигурационного файла.
- Установка Kubernetes-кластера на базе Deckhouse.
- Настройка Deckhouse.
- Установка HELM.
Шаг 1: Подготовка инфраструктуры
Чтобы развернуть Kubernetes-кластер на базе платформы Deckhouse, вам потребуются:
- Персональный компьютер.
Компьютер, с которого будет производиться установка. Он нужен только для запуска инсталлятора Deckhouse и не будет частью кластера.
Системные требования:
- ОС: Windows 10+, macOS 10.15+, Linux (Ubuntu 18.04+, Fedora 35+);
- установленный docker для запуска инсталлятора Deckhouse;
- доступ до проксирующего registry или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;
- SSH-доступ по ключу до узла, который будет master-узлом будущего кластера.
- Master-узел.
Сервер (физический сервер или виртуальная машина), который будет управляющим узлом (master-узлом) будущего кластера.
В процессе установки инсталлятор Deckhouse, запущенный на персональном компьютере, подключится к master-узлу по SSH, установит необходимые пакеты, настроит control plane Kubernetes и развернёт Deckhouse.
Системные требования:
- не менее 12 ядер CPU;
- не менее 16 ГБ RAM;
- не менее 200 ГБ дискового пространства;
- поддерживаемая ОС;
- доступ до проксирующего registry или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;
Начало внимание
Deckhouse поддерживает работу только с Bearer token схемой авторизации в registry.
Конец внимание
- доступ до прокси-сервера для скачивания deb/rpm-пакетов ОС (при необходимости);
- SSH-доступ от персонального компьютера по ключу;
- на узле не должно быть установлено пакетов container runtime, например, containerd или docker.
Начало внимание
Установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker. При отсутствии менеджмент узлов, установите docker на любой другой ноде будущего кластера, запустите Docker-образ установщика, установите Deckhouse и удалите Docker-образ установщика c ноды вместе с docker.
Конец внимание
- Загрузка образов Deckhouse в локальный реестр образов.
Кластер Kubernetes с помощью Deckhouse можно развернуть в закрытом окружении, из которого нет доступа в интернет. Для этого предварительно скачайте на компьютере с доступом в интернет образы платформы Deckhouse и загрузите их в локальный реестр образов. Подробнее об этом читайте в статье «Загрузка образов Deckhouse».
Шаг 2: Подготовка конфигурационного файла
Чтобы установить Deckhouse, подготовьте YAML-файл конфигурации установки. Для получения YAML-файла конфигурации воспользуйтесь сервисом Быстрый старт на сайте Deckhouse. Сервис сгенерирует актуальный YAML-файл для текущей версий платформы.
- Сгенерируйте YAML-файла сервисом Быстрый старт, выполнив следующие шаги:
- Выберите инфраструктуру — Bare Metal.
- Ознакомтесь с информацией об установке.
- Укажите шаблон для DNS-имен кластера. В нашем случае — %s.example.com.
- Сохраните
config.yml
.
- Внесите необходимые изменения в
config.yml
. Для этого выполните следующие действия:
- Задайте адресное пространство подов кластера в podSubnetCIDR.
- Задайте адресное пространство Service’ов кластера в serviceSubnetCIDR.
- Задайте нужную версию Kubernetes в kubernetesVersion.
- Проверьте канал обновления в releaseChannel (Stable).
- Проверьте шаблон доменного имени в publicDomainTemplate (%s.example.com).
Используется для формирования доменов системных приложений в кластере. Например, Grafana для шаблона %s.example.com будет доступна, как grafana.example.com. - Проверьте режим работы модуля cni-flannel в podNetworkMode.
Режим работы flannel, допустимые значения VXLAN (если ваши сервера имеют связность L3) или HostGW (для L2-сетей). - Укажите локальную сеть, которую будут использовать узлы кластера в internalNetworkCIDRs.
Список внутренних сетей узлов кластера, например,'192.168.1.0/24'
, который используется для связи компонентов Kubernetes (kube-apiserver, kubelet и т. д.) между собой.
Пример файла первичной конфигурации кластера — config.yml
.
Для установки через интернет:
apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Static
podSubnetCIDR: 10.111.0.0/16
serviceSubnetCIDR: 10.222.0.0/16
kubernetesVersion: "1.23"
clusterDomain: "cluster.local"
---
apiVersion: deckhouse.io/v1
kind: InitConfiguration
deckhouse:
releaseChannel: Stable
configOverrides:
global:
modules:
publicDomainTemplate: "%s.example.com"
cniFlannelEnabled: true
cniFlannel:
podNetworkMode: VXLAN
---
apiVersion: deckhouse.io/v1
kind: StaticClusterConfiguration
internalNetworkCIDRs:
- 192.168.1.0/24
Для офлайн-установки без доступа в интернет:
Начало внимание Для генерации YAML-файла сервисом Быстрый старт, выберите инфраструктуру — Закрытое окружение. Конец внимание Установите следующие параметры в ресурсе InitConfiguration:
echo -n "{\"auths\": { \"registry.example.com:443/images/deckhouse\": {}}}" | base64
Пример файла первичной конфигурации кластера — apiVersion: deckhouse.io/v1 |
Шаг 3: Установка Kubernetes-кластера на базе Deckhouse
Установка Deckhouse Platform Community Edition сводится к установке кластера (установщиком на базе Docker-образа), который состоит из единственного master-узла. Инсталлятор Deckhouse доступен в виде образа контейнера, в который необходимо передать конфигурационные файлы и SSH-ключи доступа на master-узел. Далее подразумевается, что используется SSH-ключ ~/.ssh/id_rsa
. В основе инсталлятора лежит утилита dhctl.
- Запустите установщик.
Начало внимание
Установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker.
Конец внимание
Установщик запускается на персональном компьютере, подготовленном на этапе подготовка инфраструктуры. На ПК перейдите в директорию с файлом конфигурации config.yml
, подготовленным на этапе подготовка конфигурационного файла.
Для запуска установщика через интернет:
sudo docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.io/deckhouse/ce/install:stable bash
Для офлайн-установки без доступа в интернет:
Выполните команду: sudo docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" example.com:443/images/deckhouse/install:v1.46.3 bash где:
|
- Установите Deckhouse. Для этого внутри контейнера установщика выполните команду:
dhctl bootstrap --ssh-user=<username> --ssh-host=<master_ip> --ssh-agent-private-keys=/tmp/.ssh/id_rsa \
--config=/config.yml \
--ask-become-pass
где:
<username>
— В параметре--ssh-user
укажите имя пользователя, от которого генерировался SSH-ключ для установки;<master_ip>
— IP адрес master-узла подготовленного на этапе подготовка инфраструктуры.
Процесс установки может занять 15-30 минут при хорошем соединении.
Шаг 4: Настройка Deckhouse
Подключитесь по SSH на master-узел, подготовленный на этапе подготовка инфраструктуры. Для этого выполните следующие шаги:
- Снимите с master-узла ограничения taint.
В рамках статьи Kubernetes-кластер на базе Deckhouse состоит из одного узла. Разрешите компонентам Deckhouse работать на master-узле. Для этого выполните следующую команду:
kubectl patch nodegroup master --type json -p '[{"op": "remove", "path": "/spec/nodeTemplate/taints"}]'
- Увеличьте количества подов на master-ноде.
Увеличьте максимальное количество подов на узлах NodeGroup master, выполнив следующую команду:
kubectl patch nodegroup master --type=merge -p '{"spec":{"kubelet":{"maxPods":200}}}'
- Добавьте Local Path Provisioner.
По умолчанию storageclass отсутствует в Deckhouse. Создайте custom resource LocalPathProvisioner, позволяющий пользователям Kubernetes использовать локальное хранилище на узлах. Для этого выполните следующие действия:
- Создадайте на master-узле файл
local-path-provisioner.yaml
, содержащий конфигурацию для LocalPathProvisioner.
- Установите нужную Reclaim policy (по умолчанию устанавливается Retain). В рамках статьи для параметра
reclaimPolicy
установлено"Delete"
(PV после удаления PVC удаляются).
Пример файла local-path-provisioner.yaml
:
apiVersion: deckhouse.io/v1alpha1
kind: LocalPathProvisioner
metadata:
name: localpath-deckhouse-system
spec:
nodeGroups:
- master
path: "/opt/local-path-provisioner"
reclaimPolicy: "Delete"
- Примените файл
local-path-provisioner.yaml
в Kubernetes. Для этого выполните команду:
kubectl apply -f local-path-provisioner.yaml
- Установите созданный LocalPathProvisioner, как storageclass по умолчанию (default-class), выполнив команду:
kubectl patch storageclass localpath-deckhouse-system -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
- Добавьте Ingress Nginx Controller.
Deckhouse устанавливает и управляет NGINX Ingress Controller при помощи Custom Resources. Если узлов для размещения Ingress-контроллера больше одного, он устанавливается в отказоустойчивом режиме и учитывает все особенности реализации инфраструктуры облаков и bare metal, а также кластеров Kubernetes различных типов.
- Создайте на ноде master-узла файл
ingress-nginx-controller.yml
, содержащий конфигурацию Ingress-контроллера. Для этого выполните следующую команду:
# секция, описывающая параметры nginx ingress controller
# используемая версия API Deckhouse
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
name: nginx
spec:
# имя Ingress-класса для обслуживания Ingress NGINX controller
ingressClass: nginx
# версия Ingress‑контроллера (в примере используется версия 1.9 с Kubernetes 1.23+)
controllerVersion: "1.9"
# способ поступления трафика из внешнего мира
inlet: HostPort
hostPort:
httpPort: 80
httpsPort: 443
# описывает, на каких узлах будет находиться компонент
# при необходимости можно изменить
nodeSelector:
node-role.kubernetes.io/control-plane: ""
tolerations:
- operator: Exists
- Примените файл
ingress-nginx-controller.yml
в Kubernetes, выполнив команду:
kubectl create -f ingress-nginx-controller.yml
- Добавьте пользователя для доступа к веб-интерфейсу кластера.
- Добавьте на master-узле файл
user.yml
, содержащий описание учётной записи пользователя и прав доступа:
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
name: admin
spec:
# список учётных записей Kubernetes RBAC
subjects:
- kind: User
name: admin@deckhouse.io
# предустановленный шаблон уровня доступа
accessLevel: SuperAdmin
# разрешить пользователю делать kubectl port-forward
portForwarding: true
---
# секция, описывающая параметры статического пользователя
# используемая версия API Deckhouse
apiVersion: deckhouse.io/v1
kind: User
metadata:
name: admin
spec:
# e-mail пользователя
email: admin@deckhouse.io
# это хэш пароля xgnv5gkggd, сгенерированного сейчас
# сгенерируйте свой или используйте этот, но только для тестирования
# echo "xgnv5gkggd" | htpasswd -BinC 10 "" | cut -d: -f2
# при необходимости можно изменить
password: '$2a$10$4j4cUeyonCfX7aDJyqSHXuAxycsf/sDK0T4n9ySQ7.owE34L1uXTm'
- Примените файл
user.yml
, выполнив на master-узле следующую команду:
kubectl create -f user.yml
- Разрешите переназначить политику привилегий для запускаемых подов:
kubectl label namespace elma365 security.deckhouse.io/pod-policy=privileged --overwrite
Шаг 5: Установка HELM
- Перейдите на страницу релизов Helm и скачайте архив
helm-vX.Y.Z-linux-amd64.tar.gz
необходимой версии.
Для установки через интернет:
wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz
Для офлайн-установки без доступа в интернет:
На компьютере с доступом в интернет перейдите на страницу релизов Helm и скачайте архив wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz Скопируйте полученный архив на master-узел. |
- Распакуйте архив и переместите бинарный файл helm:
tar -zxvf helm-vX.Y.Z-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm