Show/Hide Toolbars

Руководство по тех. обслуживанию

Запуск приложения "Первая форма" в Kubernetes

Ссылки Назад Вверх Вперед

term_icon Kubernetes (K8s) — это открытое программное обеспечение для автоматизации развёртывания, масштабирования, управления и контроля контейнеризованных приложений.

Преимущества использования

Быстрое развертывание приложений

При наличии нескольких серверов и необходимости обслуживать большее число пользователей, Kubernetes позволяет упростить процесс масштабирования. Обновление приложений происходит без необходимости отключения серверов, пропадает необходимость увеличивать мощность каждого сервера или добавлять новые серверы и переносить на них приложения.

Управление версиями

С помощью Kubernetes можно легко управлять версиями приложений. Даже после небольших обновлений новую версию можно быстро развернуть. В случае обнаружения проблемы также можно быстро вернуться на предыдущую версию без вреда для пользователей.

Обеспечение отказоустойчивости

Kubernetes упрощает обеспечение отказоустойчивости и поддерживается практически всеми крупными облачными провайдерами.

Архитектура Kubernetes

Архитектура Kubernetes включает в себя следующие компоненты:

Nodes (ноды, узлы) —  узлы, которые в зависимости от кластера, могут быть виртуальной или физической машиной. На узлах запускаются контейнеры приложений. Каждый узел содержит необходимые компоненты для запуска сервисов контейнеризации. Кластер имеет как минимум один рабочий узел.

Pods (поды)— базовые модули управления приложениями, которые могут содержать один или несколько контейнеров.

Volume (том) — ресурс, который позволяет нескольким контейнерам одновременно использовать общее хранилище.

Мастер-нода (Master Node) — главный узел управления кластером Kubernetes. Он отвечает за координацию и контроль работы остальных узлов в кластере. Основные компоненты мастера включают:

Etcd — распределенное хранилище данных, используемое для хранения конфигурации кластера и состояния приложений.

API Server — компонент, обеспечивающий API для взаимодействия с Kubernetes. Он принимает команды управления и обновляет состояние кластера.

Scheduler — компонент, отвечающий за размещение подов на доступных рабочих узлах в соответствии с требованиями ресурсов и ограничениями.

Controller Manager — компонент, который мониторит состояние кластера и управляет работой других контроллеров, например, контроллеров репликации и контроллеров развертывания.

Рабочие узлы (Worker Nodes) — вычислительные узлы, на которых размещаются контейнеры и выполняются приложения. Каждый рабочий узел имеет следующие компоненты:

Kubelet — агент, который запускает и управляет контейнерами на рабочих узлах, основываясь на инструкциях API сервера.

Kube-proxy — компонент, который ведет сетевой прокси-трафик и осуществляет балансировку нагрузки между сервисами.

Container Runtime — ответственный за запуск и управление контейнерами. Наиболее распространенным контейнерным runtime является Docker, но Kubernetes также поддерживает другие runtime, такие как containerd и CRI-O.

Дополнительные компоненты:

Network Plugins (Плагины сети) — позволяют сетевым подсистемам в различных узлах коммуницировать друг с другом и соединять контейнеры с внешним миром.

Storage (Хранилище) — предоставляет множество опций для хранения данных, используемых Kubernetes, включая локальное хранилище, сетевые тома и распределенные файловые системы.

Dashboard — веб-интерфейс для визуального управления кластером и мониторинга его состояния.

Ingress Controller — позволяет управлять входящим сетевым трафиком в кластер и маршрутизировать его на соответствующие сервисы.

k8s

Схема архитектуры Kubernetes

Подготовка к установке

Для запуска приложения "Первая форма" в Kubernetes вам потребуются:

1. Манифест-файлы для развертывания в K8s:

2. Дамп базы данных.

Настройка PG

Задайте пароль командой:

kubectl create secret generic postgres-password --from-literal=postgres_password=PASSWORD

где:

postgres_password — пароль пользователя Postgres.

Примените манифест-файл 1forma-postgres.yml в Kubernetes. Для этого выполните команду:

kubectl apply -f 1forma-postgres.yml

warning_icon Для хранения данных выставлено значение 30 GB (storage: 30Gi). При необходимости его можно изменить.

Подключитесь к PG и выполните ряд настроек:

Включите расширения tds_fdw, http, rum, postgres_fdw, pgcrypto, pg_buffercache, btree_gin:

LOAD 'pg_hint_plan';

CREATE EXTENSION IF NOT EXISTS tds_fdw schema public;

CREATE EXTENSION IF NOT EXISTS http schema public;

CREATE EXTENSION IF NOT EXISTS rum schema public;

CREATE EXTENSION IF NOT EXISTS postgres_fdw schema public;

CREATE EXTENSION IF NOT EXISTS pgcrypto schema public;

CREATE EXTENSION IF NOT EXISTS pg_buffercache schema public;

CREATE EXTENSION IF NOT EXISTS btree_gin;

Создайте пользователей базы данных: dbo, d10taskuser, migrationsdaemon, rebus, implementer. Задайте их пароли:

create user dbo with superuser createdb createrole inherit login password 'PASSWORD';

create user d10taskuser with inherit login password 'PASSWORD';

create user migrationsdaemon with inherit login password 'PASSWORD';

create user rebus with inherit login password 'PASSWORD';

create user implementer with inherit login password 'PASSWORD';

Создайте базу данных d10task и taskfilesdb:

create database d10task

template template0

owner dbo

encoding 'utf8'

lc_collate 'ru_RU.utf8'

lc_ctype 'ru_RU.utf8';

 

create database taskfilesdb

template template0

owner dbo

encoding 'utf8'

lc_collate 'ru_RU.utf8'

lc_ctype 'ru_RU.utf8';

Настройте схему для файловой базы:

\c taskfilesdb

create extension if not exists tds_fdw schema public;

create schema if not exists dbo authorization dbo;

create table dbo.UploadFiles

(

id int not null generated by default as identity,

FileContent bytea,

Ext varchar,

UserID int,

FileName varchar,

Compressed bool constraint DF_UploadFiles_Compressed default false,

constraint PK_UploadFiles primary key (id)

);

После рестора примените в базе d10task следующие команды:

\c d10task

alter role D10TaskUser set search_path = "dbo", "public";

alter role dbo set search_path = "dbo", "public";

alter user MigrationsDaemon set search_path = "dbo", "public";

alter user rebus set search_path = "rebus", "public";

Настройка Backend

Задайте пароли командой:

kubectl create secret generic db-password --from-literal=db_password=PASSWORD

kubectl create secret generic rebus-password --from-literal=rebus_password=PASSWORD

где:

db-password — пароль пользователя d10taskuser.

rebus_password — пароль пользователя Rebus.

Примените манифест-файл 1forma-backend.yml в Kubernetes. Для этого выполните команду:

kubectl apply -f 1forma-backend.yml

Значение PG_SERVICE_NAME — это название сервиса Postgres.

Настройка Frontend

Примените манифест-файл 1forma-frontend.yml в Kubernetes. Для этого выполните команду:

kubectl apply -f 1forma-frontend.yml

Значение BACKEND_SERVICE — это название сервиса Backend.

Настройка INGRESS

Для доступа к приложению используется INGRESS NGINX.

Примените манифест-файл 1forma-ingress.yml в Kubernetes. Для этого выполните команду:

kubectl apply -f 1forma-ingress.yml

warning_icon Обратите внимание: запуск сервиса видеоконференций (ВКС) в Kubernetes происходит отдельно.