Установка
Требования к инфраструктуре
Сеть
- Сервера должны находится в широковещательном домене (broadcast domain), а ещё лучше - в одной подсети /24 (.0-255) в любой из частных диапазонов сетей (private network 10.0.0.0, 172.16.0.0, 192.168.0.0)
- Сервера должны находится физически в одном ДЦ
- Трафик между серверами НЕ должен ходить через NAT или межсетевой экран - все сервера должны находится в единой локальной сети, трафик между серверами не должен ограничиваться;
- Если на сервере есть 2 и более сетевых карты/интерфейса, то НЕ должны быть в одной сети с дефолтным маршрутом и одинаковым весом, а должны быть совмещены (link aggregation)
- На этапе установки должен быть доступ на следующие хосты:
Kubernetes Cluster
Платформа Vaultee разворачивается в кластере Kubernetes версии не ниже 1.21. В кластере должен быть настроен StorageClass и Provisioner для автоматического выделения разделов хранилища.
Поддерживаемые дистрибутивы Kubernetes:
- Rancher Kubernetes Engine (RKE) 2
Вероятнее всего, поддерживаются и другие реализации Kubernetes, однако разработчиками тестировались только дистрибутивы из списка выше
- K8S может быть развёрнут на единственном сервере, но в целях отказоустойчивости - желательно, чтобы их серверов(нод) было минимум шесть: 3 master/controlplane + 3 worker nodes.
- Минимально: 8 vCPU, 32 Gb RAM, 1Tb SSD (one node setup).
- Рекомендуемо: 6vCPU, 16 Gb RAM, 200Gb SSD (each control plane), 24vCPU 64Gb RAM, 300 Gb SSD (each worker node), 2Tb+ SSD (on worker nodes, for distributed storage, longhorn PVC).
- 300Gb смонтировано в / , и 2Tb смонтировано в /mnt/data
- Как минимум один из серверов должен иметь процессор с поддержкой SGX2. На сервере должен быть установлен драйвер SGX.
- ОС Ubuntu 22.04 LTS
- LongHorn requirements (
ext4
orXFS
host filesystem;open-iscsi
is installed, and theiscsid
daemon is running). - Включен своп, и выставлен на 50% от RAM
ClickHouse Cluster
- Желательно кластер из 3 машин, 1 master + 2 replica.
- Минимально: 24 vCPU, 128 Gb RAM, 1Tb SSD.
S3 storage / backup server
- Минимально: 4 TB. Будет использоваться для бэкапов данных кластера по расписанию.
- Должен иметь API, cовместимый с AWS S3.
DNS server
- Должна быть возможность добавить доменные имена:
- clickhouse.aggregion.ltd
- controlplane{1..N}.aggregion.ltd
- worker{1..N}.aggregion.ltd
- Данные хосты должны резолвиться во внутренние IP адреса с каждого из серверов.
Вместо aggregion.ltd может быть любой внутренний домен компании.
DNS записи
Должны быть созданы DNS-записи и выданы SSL-сертификаты для них. Сервисы должны быть доступны согласно диаграмме развертывания. Список компонентов:
- Основной адрес системы, например: dcp.companyname.com
- Apache Atlas, например: atlas.dcp.companyname.com
- Keycloak, например: kc.dcp.companyname.com
- Vaultee OIDC Provider, например: auth.dcp.companyname.com. Необходим в случае использования системного провайдера авторизации или на этапе перехода
- Filebeat - для сбора логов, например: filebeat.dcp.companyname.com
- ElasticSearch - для хранения логов, например: es.dcp.companyname.com
- Kibana - Для просмотра логов, например: kibana.dcp.companyname.com
- Prometheus - для хранение метрик, например: grafana.dcp.companyname.com
- Grafana - для просмотра метрик, например: prometheus.dcp.companyname.com
Получение лицензионной конфигурации
Перед установкой, администратору необходимо получить некоторые значения, передаваемые при приобретении лицензии Vaultee:
- CAS Common Session Name - имя сессии
- Registry Credentials - логин и пароль для доступа к Docker Registry Vaultee
Подготовка кластера
Требования к рабочей станции администратора
На рабочей станции администратора должно быть установлено:
С рабочей станции администратора должен быть доступен кластер, в который осуществляется установка.
Создание неймспейсов и добавление секретов
Экспортируйте переменную окружения KUBECONFIG:
export KUBECONFIG=/path/to/your/kubeconfig.yml
Создайте namespace (замените имя aggregion на другое, если требуется):
export NAMESPACE=aggregion
kubectl create namespace $NAMESPACE
Все нейспейсы в которых предполагается разворачивание модулей системы, должны содержать секрет доступа к docker registry
registry.aggregion.com.
Для добавления секрета, можно воспользоваться следующим скриптом:
bash ./tools/k8s-registry-secret/create-registry-secret.sh $NAMESPACE $USERNAME $PASSWORD registry.aggregion.com
Где:
$NAMESPACE
— namespace, для которого устанавливается секрет$USERNAME
и$PASSWORD
— пользователь и пароль вdocker registry
(из лицензионной конфигурации)
Регистрация аккаунта в блокчейн
Данный раздел можно пропустить, если у вас уже имеется зарегистрированный аккаунт и приватный ключ от него
Требование к рабочей станции администратора
Для работы с блокчейн необходимо установить консольную утилиту cleos
Создание кошелька и регистрация аккаунта
Создайте локальный кошелек для хранения ключа:
cleos wallet create
Команда вернет пароль от сгенерированного кошелька. Сохраните пароль в надежном месте.
Сгенерируйте пару ключей блокчейн-аккаунта:
cleos wallet create_key
Из полученного ответа скопируйте и сохраните публичный ключ.
Для регистрации нового аккаунта в блокчейн необходим уже зарегистрированный аккаунт и некоторое количество внутренних токенов для проведения транзакции. Если у вас нет ранее зарегистрированного аккаунта, то публичный ключ следует отправить на info@aggregion.com и сотрудники Vaultee его зарегистрируют.
Генерация ключей шифрования для обмена сообщениями через блокчейн
# Генерируем приватный ключ
openssl genrsa -out private.pem 4096
# Генерируем публичный ключ
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
Приватный ключ необходимо сохранить в надёжном месте. Потеря ключа приведет к невозможности расшифровать сообщения в Blockchain предназначенные для вашей компании! То есть вся история сообщений будет утеряна.
В случае утери ключей необходимо пройти процедуру регистрации поставщика данных в блокчейн заново.
Регистрация поставщика данных
Разблокируйте кошелек для начала работы. Введите пароль, сгенерированный при создании кошелька.
cleos wallet unlock
Придумайте имя и, подставив в переменную PROVIDER_ID в скрипте ниже, выполните скрипт:
export PROVIDER_ID=mynewdatprovider
export KEY=$(cat public.pem | sed "s/$/\\\n/" | tr -d '\n')
Выполните регистрацию:
cleos push action dmpusers upsertorgv2 \
"{\"org_id\":\"$PROVIDER_ID\",\"data\":\"{}\",\"bc_version\":0,\"updated_at\":0,\"public_key\":\"$KEY\"}" \
-p $PROVIDER_ID@active
Проверим создание записи:
cleos get table dmpusers default orgsv2 -l 100000 | jq .rows | jq "map(select(.id | contains(\"$PROVIDER_ID\"))) | .[]"
Команда должна вернуть данные аккаунта поставщика данных. Регистрация завершена.
Установка с помощью Helm
Требования к рабочей станции администратора
На рабочей станции администратора должно быть установлено:
С рабочей станции администратора должен быть доступен кластер, в который осуществляется установка.
Получение Helm-чартов
Набор чартов можно получить с помощью git:
mkdir -p ~/aggregion
cd ~/aggregion
git clone git@github.com:aggregion/helm-charts-cdp.git
cd helm-charts-cdp
В примере выше указан репозиторий по умолчанию. Адрес может отличаться при получении helm-чартов из вашего локального репозитория.
Данный репозиторий содержит чарты платформы Vaultee, а также чарты для внешних зависимостей.
Каждый чарт содержит values.yaml
со значениями для конфигурации модуля. Файл values.yaml
содержит комментарии к значениям.
Если возникнут вопросы по предназначению тех или иных переменных чартов, то стоит посмотреть в соответствующий values.yaml
, описание некоторых переменных вы сможете найти там в виде комментариев.
Секреты
Все нейспейсы в которых предполагается разворачивание модулей системы, должны содержать секрет доступа к docker registry
registry.aggregion.com.
Для добавления секрета, можно воспользоваться следующим скриптом:
bash ./tools/k8s-registry-secret/create-registry-secret.sh $NAMESPACE $USERNAME $PASSWORD registry.aggregion.com
Где:
$NAMESPACE
— неймспейс, для которого устанавливается секрет$USERNAME
и$PASSWORD
— пользователь и пароль вdocker registry
(спрашивать у Vaultee-а)
Установка чарта external-services
Данный чарт устанавливает внешние зависимости.
Скопируйте значения для чарта:
bash ./tools/init-scripts/aggregion-externals.sh > ./charts/aggregion-externals/values_local.yaml
Отредактируйте ./charts/aggregion-externals/values_local.yaml
, если необходимо изменить конфигурацию сервисов либо отключить некоторые из них.
Установите релиз:
# deploy
helm upgrade --install --namespace $NAMESPACE -f ./charts/aggregion-externals/values_local.yaml agg-ext ./charts/aggregion-externals
Установка чарта ADCP
Скопируйте значения для чарта:
bash ./tools/init-scripts/aggregion-cdp.sh > ./charts/aggregion-cdp/values_local.yaml
Отредактируйте ./charts/aggregion-cdp/values_local.yaml
, если необходимо изменить конфигурацию.
Установите релиз:
helm upgrade --install --namespace $NAMESPACE -f ./charts/aggregion-cdp/values_local.yaml agg-dcp ./charts/aggregion-cdp
Примечание: если в рамках одного деплоймента будет разворачиваться EnclaveServices (enclave.enabled=true
) и будет запускаться в production режиме (enclave.scone.enabled=true
), то следует отредактировать селектор узлов кластера (enclave.sgx.nodeWithSgxSelector
) так, чтобы данный ресурс разворачивался только на узле с доступным SGX (/dev/sgx
). Инструкция по установке драйверов для SGX на Ubuntu 22.04.
Установка чарта Tekton
Установите релиз:
helm upgrade --install --namespace $NAMESPACE \
--set cloudevent.enabled=true \
--set cloudevent.webhookUrl=http://pipeline-watcher-pipelines-svc.pipelines.svc.cluster.local:9101/pipelines/events \
--set controllerServiceAccount.create=true \
--set pruner.backoffLimit=24 \
--set webhookServiceAccount.create=true \
tekton-pipelines ./charts/tekton/helm/pipeline-release
Установка чарта PipelineServices
Создайте namespace:
export PIPELINE_NAMESPACE=pipelines
kubectl create namsepace $PIPELINE_NAMESPACE
Установите релиз:
helm upgrade --install --create-namespace --namespace $NAMESPACE \
--set runner.configs.amqpUrl=amqp://guest:guest@rabbitmq.app.svc.cluster.local:5672 \
--set runner.configs.basePipelineOptions.namespace=pipelines \
--set runner.configs.logLevel=info \
--set runner.configs.pipelines.sconeCleanroom.pipelineName=scone-cleanroom-pipeline-charts \
--set runner.configs.pipelinesCreateQueueName=create_pipeline_runner \
--set runner.enabled=true \
--set serviceAccount.create=true \
--set watcher.configs.logLevel=trace \
--set watcher.enabled=true \
pipelines ./charts/pipeline
В этом скрипте необходимо изменить следующие переменные:
runner.configs.amqpUrl
— строка подключения к общему RabbitMQrunner.configs.basePipelineOptions.namespace
— namespace в котором должны разворачиваться пайплайны
Установка VaulteePipeline (charts)
Экспортируйте переменные окружения:
export CAS_ADDR=cas-dcap.aggregion.com:18765
export CAS_COMMON_SESSION_NAME=some_name
Значение CAS_COMMON_SESSION_NAME укажите из полученной конфигурации лицензии (CAS Common Session Name)
В примере выше указан адрес CAS по умолчанию. Адрес может отличаться при использовании выделенного CAS.
Установите релиз:
helm upgrade --install --namespace $NAMESPACE \
--set sconeCleanroom.casAddr=$CAS_ADDR \
--set sconeCleanroom.casCommonSessionName=$CAS_COMMON_SESSION_NAME \
--set sconeCleanroom.enabled=true \
--set sconeCleanroom.enclaveServiceBaseUrl=http://enclave.$NAMESPACE.svc.cluster.local:8010 \
--set sconeCleanroom.lasPort=18766 \
pipeline-charts ./charts/tekton/helm/aggregion
В данном примере необходимо заменить следующие переменные:
sconeCleanroom.casCommonSessionName
— не публичная информация, чтобы узнать значение, нужно спросить VaulteesconeCleanroom.enclaveServiceBaseUrl
— URL до EnclaveServices (часть чартов DCPaggregion-cdp
), порт 8010
Установка чарта DeployController
Создайте namespace в котором будет разворачиваться DeployController.
export DC_NAMESPACE=aggregion-dc
kubectl create ns $DC_NAMESPACE
Установите релиз:
export API_HOST="dc.aggregion.yourdomain.com"
helm install \
-n $DC_NAMESPACE \
--set "agentk8s.configs.authJwtSecret=OS2iXMSjBNNpB6SX0uAiJ2KaCuEkYsfcozvD4vq8KA==" \ # Generate your own
--set "dc.configs.cipherSecret=EyNXDClu2lgLYbRYG5hxQLxsZKHxweFQr7HN0dz21A==" \ # Generate your own
--set "dc.configs.authJwtSecret=MGCwIzhaRD8A+nB75WPA+vtvbUy0XehdvL2I0jGPWA==" \ # Generate your own
--set "dc.configs.tykGwSecret=YpR+6lBrk3NkhGn+EdvCoVOA+XRCaUCaOA9kisvbaQ==" \ # Generate your own
--set "dc.configs.databaseHost=aggregion-externals-postgres-agg-ext" \
--set "dc.configs.gwRedisHost=aggregion-externals-redis-agg-ext" \
--set "dc.configs.redisUrl=redis://aggregion-externals-redis-agg-ext:6379" \
--set "dc.configs.natsUrl=nats://aggregion-externals-nats-agg-ext:4222" \
--set "dc.deployerApp.enabled=true" \
--set "dc.deployerDatalab.enabled=true" \
--set "dc.trigger.enabled=true" \
--set "dc.ingress.hosts[0].host=${API_HOST}" \
--set "dc.ingress.hosts[0].paths={/}" \
deploy-controller \
./charts/aggregion-dc
Создать схемы в Postgres
kubectl -n $NAMESPACE exec -ti aggregion-externals-postgres-agg-ext -- psql -U postgres
create schema auth;
create schema deployer_app;
create schema deployer_datalab;
create schema notification;
create schema platform;
create schema provision;
create schema trigger;
create schema vcsint;
Зарегистрировать платформу для разворачивания и ресурсы.
Программа deploy-controller находится по адресу https://github.com/aggregion/helm-charts-cdp/blob/master/tools/deploy-controller-0.1.1
cp ./tools/deploy-controller-0.1.1 ./tools/deploy-controller
./deploy-controller --dc "http://admin:admin@DOMAIN:8080" platform register selectel k8s "http://<<<service name in kubernetes for agent>>>" "<<< secret from agentk8s.configs.authJwtSecret >>>"
./deploy-controller --dc "http://admin:admin@DOMAIN:8080" appdatalab loadtemplates persist ./templates/k8s"
Установка Atlas
# save local values for chart
bash ./tools/init-scripts/atlas.sh > ./charts/atlas/values_local.yaml
Отредактируйте переменные, которые увидите в файле ./charts/atlas/values_local.yaml
:
*.storageClass
— название StorageClass в вашем кластереatlas.ingress.hosts
— для настройки адреса по которому будет доступенApache Atlas
*.image.repository
— в случае, если нет прямого доступа кVaultee Docker Registry
и вы используете свой прокси
# deploy
helm upgrade --install --create-namespace --namespace $NAMESPACE -f ./charts/atlas/values_local.yaml apache-atlas ./charts/atlas
Установка GitLab
Установите GitLab с помощью скрипта:
bash ./charts/gitlab/gitlab_install.sh
Установка Trino
helm upgrade --install --create-namespace --namespace $NAMESPACE \
--set catalog.dataservice.token=${DataServiceAccessToken} \
--set catalog.dataservice.instancesEndpoint=http://agg-dcp-dataservice:httpapi/instances \
trino ./charts/trino
Установка Keycloak
# save local values for chart
bash ./tools/init-scripts/keycloak19.sh > ./charts/keycloak19/values_local.yaml
Отредактируйте переменные, которые увидите в файле ./charts/keycloak19/values_local.yaml
# deploy
helm upgrade --install --namespace $NAMESPACE -f ./charts/keycloak19/values_local.yaml keycloak ./charts/keycloak19