Установка ОС Ubuntu
Установите ОС Ubuntu Desktop 22.04.Рекомендуемые параметры стенда:
- CPU Cores: 4
- RAM: 6 Gb
- HDD: 40 Gb.
Ниже приведен стандартный вариант установки.
Рисунок 1 – Выбор языка в панели установки.
Рисунок 2 – Выбор набора ПО в панели установки.
Рисунок 3 – Выбор типа установки.
В окне с вводом пользовательских данных укажите имя пользователя «adapter» и задайте пароль (Рисунок 4).
Рисунок 4 – Ввод пользовательских данных в панели установки.
Далее необходимо войти в систему под пользователем «adapter» (Рисунок 5).
Рисунок 5 – Вход в систему.
После установки убедитесь, что ОС имеет доступ в интернет. В дальнейшей настройке предполагается, что сетевой интерфейс ОС имеет адрес 192.168.1.77/24. Если это не так, поменяйте его в настройках ОС или внесите соответствующие изменения в рассматриваемый далее конфигурационный файл local.yml.
Все дальнейшие действия будут выполняться в только что установленной ОС.
Установка дополнительного ПО
Откройте терминал от имени суперпользователя и введите команды:
sudo apt update sudo apt install curl sudo apt install openjdk-8-jre-headless sudo apt install openssh-server |
Установка PostgreSQL
Выполните команды для установки PostgreSQL:
sudo apt install postgresql postgresql-contrib |
Убедитесь, что служба PostgreSQL активна:
sudo systemctl is-active postgresql |
Корректный ответ: active
Убедитесь, что служба PostgreSQL включена:
sudo systemctl is-enabled postgresql |
Корректный ответ: enabled
Проверьте статус службы PostgreSQL(Рисунок 6):
sudo systemctl status postgresql |
Рисунок 6 – Проверка и результат проверки статуса службы.
Проверьте, что PostgreSQL готова принимать подключения (Рисунок 7):
sudo pg_isready |
Рисунок 7 – Проверка работы PostgreSQL.
Подключитесь к системе с помощью пользователя «postgres» (этот пользователь создается автоматически при установке PostgreSQL):
sudo su - postgres |
Выполните команду (Рисунок 8):
psql |
Рисунок 8 – Вход в оболочку СУБД PostgreSQL.
Если вы видите приглашение к вводу команд postgres=#, значит вы находитесь в оболочке СУБД PostgreSQL, и можно приступать к созданию базы данных.
Добавьте в PostgreSQL пользователя «smev_adapter» (Рисунок 9):
CREATE USER smev_adapter WITH PASSWORD 'smev_adapter'; |
Примечание: При указании отличных от указанного примера данных помните, что их нужно будет изменить и в конфигурационном файле хэлм-чартов (будет рассмотрен далее).
Рисунок 9 – Вход пользователя в PostgreSQL.
Создайте базу данных «smev_adapter_develop» (Рисунок 10):
CREATE DATABASE smev_adapter_develop; |
Рисунок 10 – Создание базы данных в PostgreSQL.
Назначьте пользователю БД «smev_adapter» все права на БД «smev_adapter_develop» (Рисунок 11):
GRANT ALL PRIVILEGES ON DATABASE smev_adapter_develop to smev_adapter; |
Рисунок 11 – Назначение прав на БД для пользователя smev_adapter в PostgreSQL.
Чтобы покинуть оболочку PostgreSQL, наберите (Рисунок 12):
q |
Рисунок 12 – Выход из оболочки PostgreSQL.
Отключитесь от пользователя postgres (Рисунок 13):
exit |
Рисунок 13 – Отключение от пользователя postgres.
Теперь нужно разрешить подключение к БД с произвольных IP адресов. Для этого необходимо внести изменения в конфигурационный файл PostgreSQL «pg_hba.conf». Откройте этот файл с помощью текстового редактора «nano» (Рисунок 14):
sudo nano /etc/postgresql/14/main/pg_hba.conf |
Найдите в тексте строку:
host all all 127.0.0.1/32 scram-sha-256
Рисунок 14 – Конфигурационный файл pg_hba.conf.
И замените ее на строку (Рисунок 15):
host all all 0.0.0.0/0 scram-sha-256
Рисунок 15 – Изменяемые данные в конфигурационном файле pg_hba.conf.
Не забудьте сохранить изменения при закрытии редактора, для этого нажмите Ctrl+X, затем Y и Enter.
Также отредактируйте файл «postgresql.conf» (Рисунок 16):
sudo nano /etc/postgresql/14/main/postgresql.conf |
Найдите в нем строку:
#listen_addresses = 'localhost'
Снимите комментарий с нее и приведите к виду:
listen_addresses = '*'
Рисунок 16 – Конфигурационный файл postgresql.conf.
Сохраните изменения и закройте редактор.
Перезапустите службу PostgreSQL:
sudo systemctl restart postgresql |
Теперь можно проверить, прослушивает ли PostgreSQL интерфейс. Для этого выполните следующую команду (Рисунок 17):
ss -ltn |
Рисунок 17 – Проверка адресов PostgreSQL.
Если вы включили брандмауэр UFW на сервере, то вам необходимо открыть порт 5432 для входящих TCP - соединений. Чтобы сделать это выполните команду:
sudo ufw allow 5432/tcp |
Также проверьте правило брандмауэра UFW. Делается это командой:
sudo ufw status verbose |
Развертывание Apache Kafka
Создайте системного пользователя «kafka»:
sudo useradd -m kafka |
Установите пароль созданному пользователю:
sudo passwd kafka |
Добавьте пользователя в группу «sudo», чтобы у него было право на установку зависимостей Kafka:
sudo usermod -aG sudo kafka |
Дополнение: помимо указанного способа, вы можете управлять правами пользователей посредством GUI-утилиты, установить которую можно командой “$ sudo apt install gnome-system-tools”.
Войдите в эту учетную запись «kafka», используя команду (Рисунок 18):
su -l kafka |
Рисунок 18 – Вход в учетную запись kafka.
Создайте каталог с именем «Downloads» для хранения загрузок:
mkdir ~/Downloads |
Загрузите бинарные файлы Kafka:
wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz tar -xvzf ~/kafka_2.13-2.4.1.tgz mv ~/kafka_2.13-2.4.1 ~/kafka |
Обратите внимание, при использовании отличной от указанной здесь версии Kafka, вы можете столкнуться с необходимостью внесения изменений в опубликованные далее скрипты настройки.
Параметры конфигурации Kafka находятся в файле «server.properties». Откройте этот файл с помощью команды (Рисунок 19):
nano /home/kafka/kafka/config/server.properties |
Добавьте в конец файла следующие строки:
delete.topic.enable = true socket.request.max.bytes: 1195725856
session.timeout.ms: 240000 |
Рисунок 19 – Параметры конфигурации kafka.
Сохраните сделанные изменения и закройте редактор.
Выйдите из пользователя kafka с помощью команды:
exit |
Создайте файл службы для Zookeeper (это сервис, который Kafka использует для управления состоянием своего кластера и конфигурациями). Для этого введите команду:
sudo nano /etc/systemd/system/zookeeper.service |
Добавьте в файл следующие строки (Рисунок 20):
[Unit]
Requires=network.target remote-fs.target |
Рисунок 20 – Создание файла службы zookeeper.
Сохраните сделанные изменения и закройте редактор.
Создайте файл службы для Kafka с помощью команды:
sudo nano /etc/systemd/system/kafka.service |
Добавьте в файл следующие строки (Рисунок 21):
[Unit]
Requires=zookeeper.service |
Рисунок 21 – Создание файла службы kafka.
Сохраните сделанные изменения и закройте редактор.
Запустите Kafka:
sudo systemctl start kafka |
Чтобы убедиться, что сервер Kafka успешно запущен, проверьте его журнал:
journalctl -u kafka |
В конце журнала вы должны увидеть запись «Started kafka.service» (Рисунок 22):
Рисунок 22 – Результат проверки запуска Kafka.
Проверить, работает ли сервис Kafka, можно командой:
systemctl status kafka.service |
Статус «active (running)» указывает, что сервис Kafka успешно запущен (Рисунок 23):
Рисунок 23 – Проверка статуса kafka.
Чтобы включить Kafka в автозагрузку сервера, введите команду (Рисунок 24):
sudo systemctl enable kafka |
Рисунок 24 – Включение kafka в автозагрузку.
Создайте все необходимые топики для Kafka с помощью команды:
cd /home/kafka/kafka bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic smevInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic fileInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic smevSchedulerInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic dbInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic jmsInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic loggingOutboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic amqpInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic innerInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic batchOutboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic batchInboundChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic smevInboundPriorityChannel && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic pushServiceChannelAdapter && bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 8 --topic pushServiceChannel |
В результате выполнения команды должны отобразиться сообщения об успешном создании топиков (Рисунок 25):
Рисунок 25 – Создание топиков kafka.
Для топика smevSchedulerInboundChannel задайте дополнительную настройку retention.ms=120000 с помощью команды:
/home/kafka/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic smevSchedulerInboundChannel --config retention.ms=120000 |
Развертывание Kubernetes и кластера microK8s
Документация по установке кластера microK8s доступна по адресу: https://microk8s.io/docs.
Для установки microK8s введите команду (Рисунок 26):
sudo snap install microk8s --classic --channel=1.24 |
Рисунок 26 – Результат установки microK8s.
MicroK8s создает группу для использования команд, требующих права администратора. Чтобы добавить текущего пользователя (adapter) в группу и получить доступ к каталогу кеширования .kube, выполните следующие команды:
sudo usermod -a -G microk8s $USER sudo chown -f -R $USER ~/.kube exit |
Чтобы произошло применение настроек, необходимо выйти из термина и зайти вновь.
Узнать текущий статус microK8s можно командой (Рисунок 27):
sudo microk8s status --wait-ready |
Рисунок 27 – Текущий статус microK8s.
Узнать статус ноды можно командой (Рисунок 28):
microk8s kubectl get nodes |
Рисунок 28 – Текущий статус ноды microK8s.
Чтобы узнать, какие сервисы запущены, введем команду (Рисунок 29):
microk8s kubectl get services |
Рисунок 29 – Проверка запущенных сервисов.
Для того, чтобы все необходимые сервисы microk8s всегда были запущены, необходимо добавить компоненты в автозагрузку.
Запустите загрузку компонентов с добавлением их в автозагрузку:
sudo microk8s.enable dns sudo microk8s.enable storage sudo microk8s.enable ingress sudo microk8s.enable calico-ipam sudo microk8s.enable helm3 microk8s enable registry:size=30Gi |
Создайте алиас для kubectl (Рисунок 30):
sudo snap alias microk8s.kubectl kubectl |
Рисунок 30 – создание алиаса для kubectl.
Остановите кластер:
sudo microk8s.stop |
И запустите его вновь:
sudo microk8s.start |
Развертывание компонентов Docker
Установите docker и создайте соответствующего пользователя. Добавьте его в группу следующими командами:sudo apt-get install -y docker.io sudo usermod -aG docker ${USER} exit |
Скачайте архив с docker образами из портала ЕСКС. Перейдите во вкладку Документы ИУА СМЭВ 3 в раздел Дистрибутивы версии 2.4.0 - Архив с докер образами 2.4.0.
Данный архив необходимо распаковать в директорию root соответствующим образом: /root/iua-images/.
Загрузите docker образы следующими командами:
docker load -i /root/iua-images/storage-tool-job.tar docker load -i /root/iua-images/smev-http-adapter.tar docker load -i /root/iua-images/scheduler-adapter.tar docker load -i /root/iua-images/batch-adapter.tar docker load -i /root/iua-images/statistics-adapter.tar docker load -i /root/iua-images/ui-adapter.tar docker load -i /root/iua-images/smev-front.tar docker load -i /root/iua-images/push-notifications-adapter.tar docker load -i /root/iua-images/amqp-integration-adapter.tar docker load -i /root/iua-images/db-integration-adapter.tar docker load -i /root/iua-images/file-integration-adapter.tar docker load -i /root/iua-images/inner-integration-adapter.tar docker load -i /root/iua-images/ws-integration-adapter.tar |
Для того, чтобы просмотреть список всех загруженных образов воспользуйтесь командой (Рисунок 31):
docker image ls |
Рисунок 31 - Просмотр списка всех загруженных образов.
Далее необходимо проставить тег, соответствующий инфраструктуре хранения образов каждому образу:
docker tag registry.gosuslugi.local/iua-uat/smev-http-adapter:2.4.0 localhost:32000/dev/smev-http-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/scheduler-adapter:2.4.0 localhost:32000/dev/scheduler-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/batch-adapter:2.4.0 localhost:32000/dev/batch-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/statistics-adapter:2.4.0 localhost:32000/dev/statistics-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/ui-adapter:2.4.0 localhost:32000/dev/ui-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/smev-front:2.4.0 localhost:32000/dev/smev-front:2.4.0 docker tag registry.gosuslugi.local/iua-uat/push-notifications-adapter:2.4.0 localhost:32000/dev/push-notifications-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/amqp-integration-adapter:2.4.0 localhost:32000/dev/amqp-integration-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/db-integration-adapter:2.4.0 localhost:32000/dev/db-integration-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/file-integration-adapter:2.4.0 localhost:32000/dev/file-integration-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/inner-integration-adapter:2.4.0 localhost:32000/dev/inner-integration-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/ws-integration-adapter:2.4.0 localhost:32000/dev/ws-integration-adapter:2.4.0 docker tag registry.gosuslugi.local/iua-uat/storage-tool-job:2.4.0 localhost:32000/dev/storage-tool-job:2.4.0 |
После смены тегов образов необходимо загрузить образы в docker registry, соответствующий инфраструктуре хранения образов в следующем порядке:
docker push localhost:32000/dev/smev-http-adapter:2.4.0 docker push localhost:32000/dev/scheduler-adapter:2.4.0 docker push localhost:32000/dev/batch-adapter:2.4.0 docker push localhost:32000/dev/statistics-adapter:2.4.0 docker push localhost:32000/dev/ui-adapter:2.4.0 docker push localhost:32000/dev/smev-front:2.4.0 docker push localhost:32000/dev/push-notifications-adapter:2.4.0 docker push localhost:32000/dev/db-integration-adapter:2.4.0 docker push localhost:32000/dev/file-integration-adapter:2.4.0 docker push localhost:32000/dev/inner-integration-adapter:2.4.0 docker push localhost:32000/dev/ws-integration-adapter:2.4.0 docker push localhost:32000/dev/storage-tool-job:2.4.0 docker push localhost:32000/dev/amqp-integration-adapter:2.4.0 |
Развертывание компонентов ИУА в кластере
Создайте структуру директорий для хранения файлов, необходимых для развертывания и работы адаптера, следующими командами:
mkdir /root/iua-mnt mkdir /root/iua-mnt/keys mkdir /root/iua-mnt/basket mkdir /root/iua-mnt/basket/incoming_attachments mkdir /root/iua-mnt/file-integration |
Назначение директорий:
· /root/iua-mnt/keys – хранение ключей ЭЦП,
· /root/iua-mnt/basket – для обмена файлами между компонентами ИУА,
· /root/iua-mnt/basket/incoming_attachments -директория для исходящих вложений,
· /root/iua-mnt/file-integration – для обмена файлами между ИУА и ИС УВ в случае использования файлового интерфейса.
* входящие вложения (MTOM) приходят в /root/iua-mnt/basket/data/4.0.3/base-storage/in/{clientId}
* входящие вложения (REFERENCE) приходят в /root/iua-mnt/basket/data/4.0.3/base-storage/in/{Id вложения}/{clientId}
Создание структуры кластера
/root/iua-helm-charts |
Примечание: каждый пользователь формирует необходимое окружение (helm-charts) исходя из своих потребностей, оно может сильно отличаться у разных пользователей.
В начале статьи упоминалось, что если используется отличный адрес от ip-адреса указанного в этой статье, то необходимо внести изменения в файле local.yml. Данный файл лежит по пути /root/iua-helm-charts/env/local.yml. При необходимости можно также внести изменения по бд postgres.
Перейдите в каталог iua-helm-charts и запустите установку чартов в следующей последовательности:
cd /root/iua-helm-charts microk8s helm3 install pvc pvc -f env/local.yml -n default microk8s helm3 install storage-tool-job storage-tool-job -f env/local.yml -f env/local/storage-tool-job.yml -n default microk8s helm3 install ui-adapter ui-adapter -f env/local.yml -f env/local/ui-adapter.yml -n default microk8s helm3 install smev-front smev-front -f env/local.yml -f env/local/smev-front.yml -n default microk8s helm3 install smev-http-adapter smev-http-adapter -f env/local.yml -f env/local/smev-http-adapter.yml -n default microk8s helm3 install scheduler-adapter scheduler-adapter -f env/local.yml -f env/local/scheduler-adapter.yml -n default microk8s helm3 install batch-adapter batch-adapter -f env/local.yml -f env/local/batch-adapter.yml -n default microk8s helm3 install statistics-adapter statistics-adapter -f env/local.yml -f env/local/statistics-adapter.yml -n default microk8s helm3 install push-notifications-adapter push-notifications-adapter -f env/local.yml -f env/local/push-notifications-adapter.yml -n default microk8s helm3 install db-integration-adapter db-integration-adapter -f env/local.yml -f env/local/db-integration-adapter.yml -n default microk8s helm3 install file-integration-adapter file-integration-adapter -f env/local.yml -f env/local/file-integration-adapter.yml -n default microk8s helm3 install inner-integration-adapter inner-integration-adapter -f env/local.yml -f env/local/inner-integration-adapter.yml -n default microk8s helm3 install ws-integration-adapter ws-integration-adapter -f env/local.yml -f env/local/ws-integration-adapter.yml -n default microk8s helm3 install amqp-integration-adapter amqp-integration-adapter -f env/local.yml -f env/local/amqp-integration-adapter.yml -n default cd |
Для проверки запустите веб-интерфейс панели администрирования ИУА (Рисунок 32):
Рисунок 32 - Запуск веб-интерфейс ИУА.
Установка Lens
Lens IDE, это средство с графическим интерфейсом для базового администрирования и контроля работоспособности кластеров Kubernetes. Установка его не является обязательной, но для удобства вы можете провести ее.
Зайдите браузером на сайт https://k8slens.dev и скачайте установочный файл в формате .snap (Рисунок 33):
Рисунок 33 – Необходимый для установки образ.
По окончании скачивания переместите его в домашнюю папку пользователя «adapter» (Рисунок 34):
Рисунок 34 - Директория пользователя «adapter».
Откройте свойства файла и поставьте галочку «Разрешить выполнение файла как программы» (Рисунок 35):
Рисунок 35 – Свойства файла.
Запустите установку командой (Рисунок 36):
sudo snap install Lens-5.3.2-latest.20211201.1.amd64.snap --dangerous --classic |
Примечание: Замените в команде название файла на имя скачанного вами файла, если оно отличается от приведенного.
Рисунок 36 – Результат установки.
Запустите Lens (Рисунок 37):
Рисунок 37 – Запуск Lens.
Выберите пункт меню File/Add Cluster, откроется окно для ввода конфигурации кластера в Lens.
Откройте окно терминала и введите команду, отображающую текущую конфигурацию кластера Kubernetes:kubectl config view --minify --raw |
Выделите отображенную конфигурацию в окне терминала, скопируйте текст и вставьте его в окно ввода Lens, как показано на рисунке, нажмите кнопку «Add cluster» (Рисунок 38):
Рисунок 38 – Добавление конфигурации в кластер Lens.
Теперь Lens готов к работе (Рисунок 39):
Рисунок 39 – Просмотр запущенных нод в кластере Lens.