Развертывание Платформы Multi-D в K8s
Подготовка среды для развертывания
Подготовка среды для развертывания Для развертывания Платформы Multi-D в K8s следует подготовить среду, в которой будет происходить развертывание Платформы Multi-D.
Следует подготовить пять серверов со следующими ролями:
Роль | Кол-во серверов | Функции | Программные требования | Аппаратные требования |
---|---|---|---|---|
Мастер | 1+ | Master kubernates, ingress | https://deckhouse.ru/gs/bm/step2.html | https://deckhouse.ru/gs/bm/step2.html |
Нода | 2+ | Worker+storage node kubernates | как у роли Мастер | 8 ядер ЦП, 16 Гб ОЗУ, 200 Гб диск |
SAAS | 1+ | SAAS-сервисы | Debian 10, 11 Astra Linux Special Edition 1.7.2, 1.7.3, 1.7.4 Ubuntu 18.04, 20.04, 22.04 | 4 ядер ЦП, 16 Гб ОЗУ, 200 Гб диск |
Установщик | 1 | Сервер, с которого осуществляется установка | Debian 10, 11 Astra Linux Special Edition 1.7.2, 1.7.3, 1.7.4 Ubuntu 18.04, 20.04, 22.04 | 2 ядер ЦП, 4 Гб ОЗУ, 100 Гб диск |
В сети следует настроить разрешение имён этих серверов в ip-адреса.
На серверах с ролью Нода должен существовать второй диск (/dev/sdb)
объёмом 100 Гб.
Подготовка дистрибутива
Подготовьте дистрибутив для сервера с ролью Установщик:
- Повысьте права командой
sudo -i
. - Скопируйте полученный дистрибутив Платформы Multi-D на сервер с ролью Установщик (Далее - просто Установщик) в директорию
/opt
. - Перейдите в директорию
/opt
командойcd /opt
. - Разархивируйте полученный дистрибутив Платформы Multi-D командой
tar xzvf platformmd.*.tar.gz
. - Перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
. - Добавьте права на запуск файлов командой
chmod +x *.sh
.
Генерация сертификатов
Сгенерируйте сертифткаты для сервера с ролью Установщик.
Для взаимодействия внутри кластера и корректного использования Плафтормы Multi-D следует убедиться в наличии:
- сертификата корневого удостоверяющего центра (далее - файл
rootCACert.crt
); - ключа сертификата корневого удостоверяющего центра (далее - файл
rootCAKey.pem
); - сертификата сервера с ролью SAAS, подписанного корневым сертификатом;
- сертификата сервера с ролЬю Установщик, подписанного корневым сертификатом.
Если сертификат Certificate Authority (далее - CA) отсутствует или необходимо создать новый, выполните следующую последовательность действий:
- перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
; - сгенерируйте корневой сертификат и ключ командами:
openssl genrsa -out rootCAKey.pem 2048
иopenssl req -x509 -sha256 -new -nodes -key rootCAKey.pem -days 3650 -out rootCACert.crt
.
- В директории со сгенерированными сертификатами, выполните скрипт дистрибутива следующей командой, не изменяя имена файлов сертификатов,
./ssl-existing-ca.sh <FQDN сервера с ролью SAAS>
. Скрипт сгенерирует в текущей директории файлыcertificate.key.pem
иcertificate.pem
, необходимые для установки SAAS. - Переименуйте полученные файлы, например командами
mv certificate.key.pem certificateDockerRegistry.key.pem
иmv certificate.pem certificateDockerRegistry.pem
. - Убедитесь, что CA-сертификат находится в доверенных корневых сертификатах на всех серверах кластера и всех компьютерах, с которых планируется работа с Платформой Multi-D. Для этого поместите файл
rootCACert.crt
в директорию/usr/local/share/ca-certificates/
и выполните командуupdate-ca-certificates
. Способ проверки зависит от установленной ОС.
Загрузка docker-образов в хранилище
Загрузка docker-образов в хранилище сервера с ролью Установщик
Для загрузки docker-образов в хранилище сервера с ролью Установщик:
-
повысьте права командой
sudo -i
. -
Перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
. -
Запустите скрипт подготовки системы, который установит или обновит
Docker
и прочие необходимые пакеты следующей командой в зависимости от ОС:./install_docker_AstraLinux.sh
;./install_docker_Ubuntu.sh
;./install_docker_Debian.sh
.
-
Перезагрузите систему в конце работы скрипта, ответьте Y, чтобы перезагрузить операционную систему.
-
Повысьте права после перезагрузки командой
sudo -i
. -
Перейдите в директорию docker в директории дистрибутива командой
cd /opt/platform/docker
. -
Загрузите docker-образы в локальное хранилище командами:
docker load --input platformmd.tar
;docker load --input platformmd_DBserver.tar
.
-
Определите, в какой сетевой репозиторий будут загружаться docker-образы дистрибутива Платформы Multi-D. Если сетевой репозиторий не существует или требуется создать новый, выполните следующие действия:
- создайте директории для сертификатов, используемых
docker registry
, командойmkdir -p /opt/registry/certs
. - Поместите в директорию
/opt/registry/certs
сертификат сервера с ролью Установщик и его ключ. Сертификат должен содержать всю цепочку удостоверяющих центров, которым в свою очередь должны доверять все серверы кластера. Если были использованы имена файлов из примеров выше, выполните это командами:- cp /opt/platform/scripts/certificateDockerRegistry.pem /opt/registry/certs/domain.crt и
- cp /opt/platform/scripts/certificateDockerRegistry.key.pem /opt/registry/certs/domain.key.
- Для создания директории для хранения docker-образов используйте команду
mkdir -p /opt/registry/storage
. - Для установки на сервере с ролью Установщик сетевого репо зитория docker-образов
Docker Registry
, работающего по протоколу https на порте 5000, выполните
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /opt/registry/storage:/var/lib/registry \
-v /opt/registry/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2- где:
- domain.crt:имя файла сертификата сервера,
- domain.key:имя файла с его ключом.
- создайте директории для сертификатов, используемых
-
После выполнения команды на сервере с ролью Установщик будет запущен контейнер с сетевым хранилищем docjer-образов
Docker Registry
, работающий на порте 5000 по протоколу https и персистентным хранилищем в директории/opt/registry/storage
. -
Измените теги для всех docker-образов дистрибутива Платформы. Multi-D. Вместо репозитория
distrib
в тэге образа пропишите тэг текущего сетевого репозитория docker-образов, используя скрипт из дистрибутива:- Перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
. - Выполните скрипт
dockerRetagAndPush.sh
командой./dockerRetagAndPush.sh <имяРепозитория>
, в поле <имяРепозитория> укажите имя своего сетевого репозитория docker-образов. Если используетсяDocker Registry
, запущенный на сервере на портt 5000, укажитеlocalhost:5000
. Скрипт заменит имя репозитория в тэгах docker-образов и загрузит их в сетевое хранилище.
- Перейдите в директорию
-
Скопируйт е файл
/opt/platform/scripts/install_docker_<Операционная система сервера с ролью SAAS>.sh
с сервера с ролью Установщик на сервер с ролью SAAS (также SAAS) в директорию/opt/platform/scripts/
(предварительно создав её командойmkdir -p /opt/platform/scripts/)
.
Загрузка docker-образов в хранилище сервера с ролью SAAS
Сгенерируйте сертифткаты для сервера с ролью SAAS:
-
повысьте права командой
sudo -i
. -
Перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
. -
Запустите скрипт подготовки системы, который установит или обновит
Docker
и прочие необходимые пакеты следующей командой в зависимости от ОС:./install_docker_AstraLinux.sh
;./install_docker_Ubuntu.sh
;./install_docker_Debian.sh
.
-
Перезагрузите систему в конце работы скрипта, ответьт е Y, чтобы перезагрузить операционную систему.
Установка Deckhouse
Установка Deckhouse на сервере с ролью Установщик
Для установки Deckhouse на сервере с ролью Установщик:
-
повысьте права командой
sudo -i
. -
Перейдите в директорию
/opt/platform/scripts/
командойcd /opt/platform/scripts/
. -
Актуализируйте файл
/opt/platform/deckhouse/config.yml
, руководствуясь комментариями в файле.- Минимально необходимое изменение: параметр publicDomainTemplate, измените в параметре имя кластера
k8s
на требуемое, имя кластера по умолчанию — k8dev.md.local. - Значения параметра clusterDomain не должно совпадать с именем внешнего домена. Рекомендуется не изменять его название по умолчанию.
- Минимально необходимое изменение: параметр publicDomainTemplate, измените в параметре имя кластера
-
В DNS-сервере создайте
wildcard A-запись *.<имя кластера>
, где в качествеip-адресов
перечислите всеip-адреса
серверов с ролью Нода. В примере выше - это *.k8dev.md.local -
Убедитесь, что есть возможность переходить с сервера с ролью Установщик на сервер с ролью Мастер по
ssh
без запроса пароля командойssh <FQDN Мастер>
. Если для перехода требуется пароль, для настройки перехода без пароля выполните следующие шаги:- сгенерируйте пару ключей командой
ssh-keygen -t rsa
, оставьте место создания файлов ключей по умолчанию, а passphrase пустым. - Скопируйте содержимое файла
/root/.ssh/id_rsa.pub
. - Добавьте скопированное содержимое этого файла новой строкой в файл
/root/.ssh/authorized_keys
на сервер с ролью Мастер и на сервер с ролью Установщик. - Выполните команду
ssh <FQDN Мастера>
, ответьте yes, убедитесь, что пароль не требуется, выйдите изssh-сеанса
командойexit
.
- сгенерируйте пару ключей командой
-
Перейдите в директорию
/opt/platform/deckhouse
командойcd /opt/platform/deckhouse/
. -
Запустите установочный docker-контейнер c помощью скрипта
docker run -it --pull=always \
-v "$PWD/config.yml:/config.yml" \
-v "$PWD/resources.yml:/resources.yml" \
-v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.io/deckhouse/ce/install:stable bash -
Находясь в контейнере выполните команду
dhctl bootstrap --ssh-user=root --ssh-host=<FQDN сервера с ролью **Мастер**> --ssh-agent-private-keys=/tmp/.ssh/id_rsa --config=/config.yml --resources=/resources.yml
. -
После выполнения ко манды мастер-нода Deckhouseбудет установлена. Выйдите из установочного контейнера командой
exit
.
Установка Deckhouse на сервере с ролью Мастер
Для установки Deckhouse на сервере с ролью Мастер
- повысьте права командой
sudo -i
. - Выполните команду
/opt/deckhouse/bin/kubectl -n d8-cloud-instance-manager get secret manual-bootstrap-for-worker -o json | jq '.data."bootstrap.sh"' -r
, вывод команды скопируйте в буфер обмена.
Подключение Нод к кластеру Deckhouse
Для подключения нод к кластеру Deckhouse на каждом сервере с ролью Нода:
- На всех серверах с ролью Нода повысьте права командой
sudo -i
. - Выполните команду
vgcreate vg-linstore /dev/sdb --add-tag linstor-data
. Будет создан логический том для linstor. - Выполните команду
apt update & apt upgrade -y
для запуска обновления. - После окончания обновления выполните команду перезагрузки
reboot now
. - После перезагрузки повысьте права командой
sudo -i
. - Выполните команду
echo <Base64> | base64 -d | sudo bash
, где<Base64>
— скопированный вывод команды, выполненной на сервере с ролью Мастер. - Перезагрузите все серверы с ролью Нода.
Продолжение установки Deckhouse на сервере с ролью Мастер
Для продолжения установки Deckhouse на сервере с ролью Мастер:
- Создайте директорию /
opt/platform
командойmkdir -p /opt/platform
. - Доставьте директорию
deckhouse
из дистрибутива Платформы Multi-D в директорию/opt/platform
. - Перейдите в директорию
/opt/platform/deckhouse/optional
командойcd /opt/platform/deckhouse/optional
. - Выполните команду
kubectl apply -f 01-ingress.yml
, чтобы установить ingress. - Скопируйте файлы сертификата CA и его ключа в файлы
rootCACert.crt
иrootCAKey.pem
соответственно. - В пространстве имён
d8-cert-manager
создайте секрет, содержащий данные файлов сертификатов командой:kubectl create secret tls internal-ca-key-pair -n d8-cert-manager --key="rootCAKey.pem" --cert="rootCACert.crt"
- Создайте ClusterIssuer из созданного секрета командой
kubectl apply -f 02-clusterissuer.yml
Чтобы использовать ClusterIssuer для получения сертификатов для всех компонентов Deckhouse, укажите его имя в глобальном параметре clusterIssuerName (команда kubectl edit mc global), приведя его секцию "spec" к виду:
spec:
settings:
modules:
https:
certManager:
clusterIssuerName: inter-ca
mode: CertManager
publicDomainTemplate: '%s.<public_domain_template>'
version: 1
- Отредактируйте содержимое файла
/opt/platform/deckhouse/optional/03-adminuser.yml
, руководствуясь комментариями в файле. Обязательно измените в нём имя кластера k8s - k8dev.md.local - на актуальное. - Выполните команду
kubectl apply -f 03-adminuser.yml
, чтобы создать пользователя admin. - Для проверки работоспособности linstor выполните команды:
alias linstor='kubectl exec -n d8-linstor deploy/linstor-controller -- linstor'
- Рекомендуется добавить команду создания alias выше в файл .bashrc Вашего профиля.
- linstor node list:убедитесь, что все Ноды имеют статус online.
- kubectl get storageclass:убедитесь, что
linstor-data-r...
отображаются.
- Добавьте аннотацию для назначения нового класса StorageClass по умолчанию командой:
kubectl annotate storageclass linstor-data-r1 storageclass.kubernetes.io/is-default-class=true
. - Пройдите в браузере по адресу https://dashboard.<имя кластера k8s>, в примере - https://dashboard.k8dev.md.local . Введите логин и пароль, указанный в файле
/opt/platform/deckhouse/optional/03-adminuser.yml
.
Установка и настройка Deckhouse завершена.
Установка утилит kubectl и helm
Установка утилит kubectl и helm на сервере с ролью Установщик
Для установки утилит kubectl
и helm
на сервере с ролью Установщик
- Установите утилиту
kubectl
. Выполните команды:curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
;install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
;kubectl version --client
. - Установите утилиту
helm
. Выполните команды:curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
- Настройте
kubectl
на работу с кластером k8s. Для настройки перейдите в браузере на страницу по адресуhttps://kubeconfig.<доменное имя кластера k8s>
, например, k8dev.md.local и следуйте инструкциям в разделе Linux. - Проверьте работу
kubectl
, выполнив командуkubectl get namespaces
. При корректной работе команды на экран будет выведен список неймспейсов кластера Deckhouse.