Здесь описана подготовка серверов для установки платформы: два варианта — отдельные серверы с k3s или уже готовый кластер Kubernetes, и в обоих случаях отдельный сервер базы данных PostgreSQL.
domain.example.com) – с A-записью на IP сервера приложения и настроенной маршрутизацией входящего трафика.https://registry.fact.digital – логин и пароль запросите у менеджера. Эти данные понадобятся при создании Kubernetes secret и при helm registry login.APP_KEY – тоже запросите у менеджера.registry.fact.digital (порт 443, TCP, на время развёртывания и обновления), admin.ismyteam.ru (порт 443, TCP, постоянно), репозитории k3s и Ubuntu (порты 80 и 443, TCP, на время развёртывания и обновления).Рекомендуемые минимальные характеристики серверов:
| Сотрудников, до | vCPU/RAM – приложение | vCPU/RAM – СУБД | Системный диск (ГБ) | Диск БД (ГБ) | Диск приложения (ГБ) |
|---|---|---|---|---|---|
| 500 | 4/8 | 2/4 | 50 | 50 или больше | 100 или больше |
| 1000 | 4/12 | 4/8 | 50 | 50 или больше | 200 или больше |
| 3000 | 12/24 | 4/8 | 50 | 100 или больше | 500 или больше |
| 5000 | 20/48 | 8/16 | 50 | 100 или больше | 500 или больше |
При 500 сотрудниках используйте минимум 2 реплики frontend pod и 2 реплики backend pod. При 1000 сотрудниках увеличьте количество backend pod до 4. Для большего числа сотрудников обратитесь к менеджеру.
Дополнительно нужны ресурсы для сервиса конвертации документов в PDF (нужен модулю КЭДО и для просмотра презентаций pptx в обучении):
| Сотрудников, до | vCPU/RAM для сервиса |
|---|---|
| 500 | 1.5/2 |
Для отказоустойчивости используйте 2 реплики pod сервиса конвертации – в этом случае ресурсы умножьте на 2.
Если у компании уже есть рабочий кластер Kubernetes, устанавливать k3s не нужно – используйте существующий кластер. Требования к кластеру:
ReadWriteOnce.StorageClass для томов типа ReadWriteMany, если пользовательские файлы приложения будут храниться в PVC. Если для файлов выбран S3-режим, backend PVC не создаётся и ReadWriteMany не нужен. Узнать большеhelm и kubectl.APP_KEY – как в варианте с k3s.Рекомендуемые минимальные характеристики (single node-развёртывание):
| Сотрудников, до | vCPU/RAM – приложение | vCPU/RAM – СУБД | Реплики frontend/backend | Диск приложения (ГБ) | Диск БД (ГБ) |
|---|---|---|---|---|---|
| 500 | 4/8 | 2/4 | 2/2 | 100 или больше | 50 или больше |
| 1000 | 4/12 | 4/8 | 2/4 | 200 или больше | 50 или больше |
| 3000 | 12/24 | 4/8 | 3/12 | 100 или больше | 500 или больше |
| 5000 | 20/48 | 8/16 | 3/20 | 100 или больше | 500 или больше |
Дополнительные ресурсы для сервиса конвертации PDF – та же таблица, что и в варианте с k3s.
Для большего числа сотрудников в обоих вариантах обратитесь к менеджеру.
Смонтируйте отдельный диск для хранения данных k3s. В примере ниже используется раздел /dev/sdb – замените на имя своего раздела:
sudo vgcreate k3s-storage-vg /dev/sdb
sudo lvcreate -n k3s-storage-lv -l 100%FREE k3s-storage-vg
sudo mkfs.ext4 /dev/mapper/k3s--storage--vg-k3s--storage--lv
sudo mkdir -p /var/lib/rancher/k3s/storage
sudo echo '/dev/mapper/k3s--storage--vg-k3s--storage--lv /var/lib/rancher/k3s/storage ext4 defaults 0 0' >> /etc/fstab
sudo mount -a
Установите k3s:
sudo curl -sfL https://get.k3s.io | sh -
Включите права на kubectl для всех пользователей и перезапустите службу k3s:
sudo echo 'K3S_KUBECONFIG_MODE="644"' >> /etc/systemd/system/k3s.service.env
sudo systemctl restart k3s
Скопируйте конфигурацию k3s в домашнюю папку, чтобы kubectl подключался к кластеру без sudo:
mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chmod 600 $HOME/.kube/config
sudo chown $USER:$USER $HOME/.kube/config
Настройте путь хранения для персистентных томов (PV/PVC):
6. В файле /var/lib/rancher/k3s/server/manifests/local-storage.yaml измените версию provisioner на 0.0.23.
7. Отредактируйте параметры хранения:
kubectl edit configmap local-path-config -n kube-system
В секции config.json удалите блок nodePathMap:
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/var/lib/rancher/k3s/storage"]
}
]
Вместо него добавьте параметр:
{
"sharedFileSystemPath":"/var/lib/rancher/k3s/storage"
}
В примерах ниже использованы значения
dreamteam_on_premise_db(имя базы данных) иdreamteam_on_premise_user(имя пользователя БД) – замените на свои.
Подготовьте отдельный диск для базы данных и примонтируйте его в /var/lib/postgresql:
sudo mkdir /var/lib/postgresql
sudo vgcreate postgresql-vg /dev/sdb
sudo lvcreate -n postgresql-lv -l 100%FREE postgresql-vg
sudo mkfs.ext4 /dev/mapper/postgresql--vg-postgresql--lv
sudo echo '/dev/mapper/postgresql--vg-postgresql--lv /var/lib/postgresql ext4 defaults 0 0' >> /etc/fstab
sudo mount -a
Установите PostgreSQL версии 13.x – 18.x:
sudo apt-get install postgresql
Проверьте, установлена ли локаль en_US:
locale -a | grep -i en_US
Если команда ничего не вывела, установите локаль:
sudo locale-gen en_US.UTF-8
sudo update-locale
Переключитесь на пользователя postgres и запустите psql:
sudo su - postgres
psql
Создайте базу данных:
CREATE DATABASE dreamteam_on_premise_db
WITH
ENCODING = 'UTF8'
LOCALE_PROVIDER = 'libc'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
TEMPLATE = template0;
Сгенерируйте надёжный пароль и сохраните его для следующих шагов:
pwgen 20 1 -y
Создайте пользователя – владельца базы данных:
create user dreamteam_on_premise_user with encrypted password '<пароль пользователя БД>';
Предоставьте пользователю права на базу данных:
grant all privileges on database dreamteam_on_premise_db to dreamteam_on_premise_user;
Если используете PostgreSQL версии 15 и выше, дополнительно назначьте пользователя владельцем базы данных:
ALTER DATABASE dreamteam_on_premise_db OWNER TO dreamteam_on_premise_user;
Выйдите из psql, а затем из-под пользователя postgres:
\q
exit
Разрешите серверу БД принимать подключения не только с localhost. В файле /etc/postgresql/14/main/postgresql.conf (14 – версия установленного PostgreSQL) замените строку # listen_addresses = 'localhost' на:
listen_addresses = '*'
Разрешите подключение с сервера приложения. В файл /etc/postgresql/14/main/pg_hba.conf (14 – версия установленного PostgreSQL) добавьте строку:
host dreamteam_on_premise_db dreamteam_on_premise_user <ip сервера приложений>/32 scram-sha-256
Перезапустите службу PostgreSQL:
systemctl restart postgresql
helm install/helm upgrade.