On premise Install
Last updated
Last updated
https://habr.com/ru/companies/flant/articles/717484/
Продолжаем серию статей про установку Deckhouse в разные окружения. Мы уже рассказывали про развертывание в Yandex Cloud. Эта статья посвящена установке платформы в закрытое окружение, когда у машин, на которых разворачивается кластер, нет доступа в Интернет.
Установка Deckhouse в закрытое окружение почти не отличается от установки на bare metal. Главные особенности:
Чтобы предоставить приложениям доступ в Интернет в закрытом контуре, нужно явно указать параметры прокси-сервера в конфигурации кластера.
Для обновлений или подключения дополнительных компонентов кластера необходимо указать адрес развернутого хранилища с образами контейнеров Deckhouse, прописав в случае необходимости параметры прав доступа.
Рассмотрим все необходимые этапы по порядку.
Пример схемы развертывания Deckhouse в закрытом контуре с прокси-сервером:
Здесь между сетью Интернет и будущим кластером поднят прокси-сервер, через который предоставляется доступ к репозиториям пакетов ОС. Через этот же прокси-сервер можно открыть доступ в Интернет для приложений, настроив соответствующие параметры в конфигурации кластера. Однако использование прокси-сервера — не обязательное условие: кластер может работать и в полностью изолированном контуре.
Также внутри закрытого контура нужно организовать хранилище образов Docker, в котором разместятся образы Deckhouse и образы контейнеров будущих приложений.
Для установки Deckhouse понадобятся персональный компьютер, а также два сервера (или ВМ).
Требования к ПК:
ОС Ubuntu 18.04+, Fedora 35+, Windows 10+ или macOS 10.15+;
SSH-доступ по ключу к master-узлу будущего кластера;
доступ к развернутому хранилищу с образами контейнеров Deckhouse;
crane, jq.
Требования к серверу или ВМ для master-узла:
4 ядра CPU;
8 Гб RAM;
не менее 40 Гб на диске;
установленная ОС (на выбор);
доступ к развернутому хранилищу с образами контейнеров Deckhouse;
доступ к прокси-серверу для скачивания deb/rpm-пакетов ОС (при необходимости);
SSH-доступ от персонального компьютера (см. п.1) по ключу;
на узле не должно быть установлено пакетов container runtime, например containerd или Docker.
Также нужен сервер или ВМ для развертывания хранилища образов Deckhouse и образов приложений.
В качестве container registry будем использовать Harbor — популярный Open Source-инструмент, с помощью которого можно развернуть self-hosted хранилище Docker-образов.
В официальной документации разработчики Harbor рекомендуют следующие минимальные характеристики машины для хранилища:
2 ядра CPU;
4 Гб RAM;
40 Гб на жестком диске.
Рекомендуемые требования: 4 ядра, 8 Гб оперативной памяти и 160 Гб на жестком диске.
Для тестов возьмем машину с минимальными требованиями, установленной Ubuntu 22.04 и без прямого доступа к Интернету.
Помимо требований к «железу» в документации указаны также и требования к установленному ПО:
Docker Engine 17.06.0+;
Docker Compose;
OpenSSL (желательно последней доступной версии).
Для установки софта требуется доступ к репозиториям пакетов дистрибутива. Временно предоставим его через поднятый прокси-сервер.
Настройка прокси или NAT в этой статье не рассматривается, потому что выходит за ее рамки. К тому же это процесс зависит от инфраструктуры, на которой разворачивается Deckhouse.
Подключимся по SSH к машине и добавим новый репозиторий в /etc/sources.list
:
Добавим GPG-ключи репозитория:
Подключим новый репозиторий:
Установим последнюю версию Docker Engine:
Убедимся, что Docker Engine работает:
Если все прошло успешно, будет запущен тестовый контейнер, который выведет сообщение Hello from Docker!
.
Установим docker-compose командой:
Скорее всего, последняя версия OpenSSL уже установлена в системе. Если нет, выполним команду:
Harbor поддерживает установку двумя способами — онлайн и офлайн. У обоих схожий принцип. Но поскольку мы уже настроили доступ в Интернет на время подготовки машины к установке, воспользуемся первым вариантом.
В соответствии с официальной документацией скачиваем с GitHub последний актуальный релиз (на момент написания статьи это v2.5.5):
Ключ L нужен для того, чтобы curl прошел по всем редиректам, которые будет предлагать ему GitHub. Если попытаться просто скачать файл (только ключ -O), велика вероятность, что он окажется пустым.
Распаковываем установщик:
Harbor настраивается в файле harbor.yml
. В распакованном архиве есть его шаблон с расширением *.tmpl
, в котором уже заданы рекомендуемые параметры.
Переименуем шаблон в harbor.yml
и отредактируем нужные параметры**:**
На что следует обратить внимание:
HTTPS
— важен, если хранилище используется в production. Для настройки поддержки HTTPS необходимо добавить соответствующие сертификаты. В нашем случае можно обойтись без него, поэтому закомментируем эти строки.
hostname
— имя хоста хранилища образов. Это может быть как доменное имя, так и IP-адрес.
harbor_admin_password
— пароль администратора для входа в систему.
Запускаем установку командой:
Установщик скачает все необходимые для работы Harbor образы и запустит сервис. Если все прошло успешно, в конце лога будет сообщение ✔ ----Harbor has been installed and started successfully.----
.
Откроем браузер на машине, с которой будет разворачиваться Deckhouse, и перейдем по адресу машины, на которой развернут Harbor.
Страница входа в Harbor
Теперь переходим к установке платформы.
Для работы с Deckhouse необходим доступ к образам контейнеров, которые нужны для его работы. Получить доступ можно двумя способами:
Настроить Proxy Cache в Harbor. В этом режиме он будет работать как прокси-сервер для всех запросов к хранилищу https://registry.deckhouse.io
, кэшируя получаемые образы и раздавая их в закрытое окружение.
Перенести в Harbor образы вручную. Актуально, если при установке использовался офлайн-способ, и доступа наружу из окружения нет.
Рассмотрим первый вариант. (О ручном переносе образов можно прочитать в документации.)
Войдем в систему: имя пользователя по умолчанию admin
, пароль — тот, что указан в конфигурационном файле.
Главная страница интерфейса Harbor
При необходимости имя пользователя можно изменить в настройках профиля.
Перейдем на страницу Administration → Registries → New Endpoint:
В открывшемся окне настроим следующие параметры:
Provider: Docker Registry.
Name — имя, может быть любым.
Description — краткое описание, можно оставить пустым.
Endpoint URL: https://registry.deckhouse.io
.
Access ID и Access Secret — если используется Deckhouse Enterprise Edition; в нашем случае оставляем пустым.
Кнопкой Test Connection можно проверить, что Harbor получил доступ к указанному хранилищу и готов к работе.
Теперь вернемся на главную вкладку Projects и создадим новый проект:
Project Name
— станет частью URL. Используйте любой, например, d8s
.
Access Level
— Public.
Proxy Cache
— включаем и выбираем в списке Registry, созданный на предыдущем шаге.
Теперь все образы Deckhouse будут доступны по адресу https://your-harbor.com/d8s/deckhouse/{d8s-edition}:{d8s-version}
.
Переходим на страницу конфигурации в Getting Started. Здесь нужно ввести параметры, которые в дальнейшем будут указаны в конфигурационных файлах будущего кластера:
Шаблон DNS-имён кластера в формате %s.domain.my
— по нему будут доступны веб-интерфейсы, предоставляемые Deckhouse. Например, Grafana — по адресу grafana.domain.my
.
Адрес прокси-сервера для HTTP-трафика (если необходимо), через который будет предоставляться доступ в Интернет изнутри кластера.
Адрес прокси-сервера для HTTPS-трафика.
Список IP-адресов, для которых проксирование трафика не будет включено.
В следующей части страницы настраиваем доступ к созданному ранее container registry:
В поле префикса имени образов указываем созданный ранее endpoint в хранилище: your-harbor.com/d8s/deckhouse/ce
.
Теперь нужно авторизоваться в container registry. Так как мы используем HTTP-протокол, необходимо указать Docker-server'у, к каким хранилищам допустимо присоединяться без шифрования. Для этого откроем файл /etc/docker/daemon.json
(если его нет — создадим) и добавим туда хранилище:
Вместо доменного имени можно использовать IP-адрес хранилища во внутренней сети.
Перезапускаем Docker-server, чтобы параметры подхватились, и логинимся в хранилище:
Теперь закодируем параметры доступа в Base64:
Полученную в ответ строку копируем в поле с правами доступа.
Так как мы не стали ранее настраивать HTTPS-доступ к хранилищу, последний пунктом нужно включить использование только HTTP-трафика.
Нажимаем кнопку «Далее: Установка» внизу страницы.
На следующей странице отобразится содержимое файла config.yml
, сгенерированного на основе введенных ранее данных:
В этом примере мы создаем простой кластер из одного узла с одним адресом, поэтому секцию StaticClusterConfiguration
сгенерированного конфигурационного файла можно удалить.
Сохраним содержимое в файл и разместим его в отдельном каталоге с произвольным именем.
Установщик Deckhouse запускается в отдельном контейнере командой:
Обратите внимание, что здесь в качестве источника образа указано локальное хранилище, созданное на предыдущих шагах.
По окончании загрузки появится приглашение командной строки внутри контейнера:
Для развертывания кластера достаточно выполнить одну команду:
Если на сервере для работы с sudo требуется пароль, нужно его ввести в ответ на соответствующий запрос.
Процесс установки может занять от 15 до 30 минут, состояние отображается в виде подробного лога.
Установленный кластер состоит из одного узла. Добавить в него статичные узлы можно по инструкции из официальной документации.
Если же кластер развернут в ознакомительных целях либо для какой-то специфической задачи, и дополнительные узлы не требуются — нужно разрешить компонентам Deckhouse работать на master-узле. Для этого снимем с master-узла taint, выполнив на нем команду:
Если в ответ выводится ошибка:
…нужно настроить kubectl командой:
Создадим на master-узле файл ingress-nginx-controller.yml
со следующим содержимым:
Применим его:
Создадим на master-узле файл user.yml
со следующим содержимым:
Обратите внимание, что в секции с паролем есть подсказка, как его сгенерировать.
Применим файл:
Для доступа к веб-интерфейсам кластера нужно настроить resolve соответствующих адресов. Это можно сделать несколькими способами: настроить полноценный DNS-сервер, прописать их в файл /etc/hosts
или воспользоваться сторонними сервисами, предоставляющими такие услуги.
Веб-интерфейсы расположены по следующим адресам:
api.example.com
argocd.example.com
dashboard.example.com
deckhouse.example.com
dex.example.com
grafana.example.com
hubble.example.com
istio.example.com
istio-api-proxy.example.com
kubeconfig.example.com
openvpn-admin.example.com
prometheus.example.com
status.example.com
upmeter.example.com
Для доступа к ним необходимо настроить адресацию на IP-адрес Ingress-контроллера.
Кластер развернут и готов к работе.
Изначально был неверно описан способ удаления кластера с помощью команды dhctl destroy
. В случае с self-hosted-кластером команда завершится с ошибками, а элементы кластера не будут удалены.
Для удаления кластера, развернутого на ВМ или bare-metal сервере, необходимо выполнить шаги с 1 по 7 инструкции по зачистке узла.
Обратите внимание, что если выполнить последующие шаги с 8 по 10, на узел можно снова установить необходимые компоненты, и такой узел станет готовым для последующего введения в другой кластер.
Статья основана на материалах раздела сайта «Getting Started». Подробную информацию о дальнейшей настройке платформы и ее модулей можно найти в официальной документации.
С любыми вопросами и предложениями ждем вас в комментариях к статье, а также в Telegram-чате deckhouse_ru, где всегда готовы помочь. Будем рады issues (и, конечно, звёздам) в GitHub-репозитории Deckhouse.
Читайте также в нашем блоге: