База знаний Appliner
Администрирование
Руководство администратора платформы Appliner
Общие сведения
Документ «Руководство администратора» предназначен для администрирования платформы Эпплайнер. Приведено описание конфигурирования и настройки программного обеспечения, описание действий администратора в различных режимах функционирования платформы.
Наименование
Полное наименование системы: Корпоративная low-code платформа Эпплайнер.
Условное обозначение: Платформа.
Назначение
Платформа предназначена для создания корпоративных приложений с помощью визуальных конструкторов и встроенных интеграций. Платформа предоставляет функционал, позволяющий без программирования и специальных знаний создавать корпоративные приложения любой сложности.
Краткое описание функциональных возможностей
Создание модели данных – системы взаимосвязанных таблиц для хранения данных приложения;
Создание процедур с помощью визуального конструктора Blockly;
Создание веб-интерфейсов с помощью конструктора форм;
Создание исполняемых BPMN-процессов с помощью конструктора процессов;
Создание интеграций с автоматической генерацией документации с помощью конструктора интеграций;
Создание ИИ-помощников и ИИ-агентов, и встраивание их в любые процессы и процедуры с помощью конструктора цепочек.
Уровень подготовки администраторов
Уровень подготовки администраторов Платформы должен удовлетворять следующим требованиям:
- знание и опыт работы с оркестратором контейнеровKubernetes.
Перечень эксплуатационной документации, с которой необходимо ознакомиться администраторам Платформы
Для корректной работы с Платформы администратор помимо настоящего документа, должен дополнительно ознакомиться со следующими документами:
- Корпоративная low-code платформа Эпплайнер Руководство пользователя.
Режимы функционирования Платформы
Платформа функционирует 7 дней в неделю, 365 (366) дней в году.
Платформа поддерживает следующие режимы функционирования:
- штатный режим – основной режим функционирования;
- режим сервисного обслуживания;
- аварийный режим.
Смена режимов функционирования Платформы осуществляется администратором Платформы, который оповещает пользователей о смене режима функционирования любым доступным способом (электронная почта, телефон и пр.).
Штатный режим функционирования Платформы
Штатный режим является основным режимом функционирования Платформы. В штатном режиме все пользователи Платформы могут осуществлять работу с функционалом системы в соответствии со своими ролями и правами доступа.
Для штатного режима работы Платформы для всех ролей пользователей используются персонифицированные учетные записи.
Сервисный режим функционирования Платформы
Сервисный режим функционирования Платформы является технологическим режимом, используемым для проведения регламентных работ и технического обслуживания Платформы. В данном режиме работа с системой пользователей, не являющихся администраторами, невозможна.
В режиме сервисного обслуживания осуществляются работы по модернизации технических средств, обновлению системы и общего и специального программного обеспечения, используемого Платформой.
Аварийный режим Платформы
Аварийный режим возникает в случае нарушения в работе Платформы, вызванного техническими, программными проблемами, некорректными действиями эксплуатационного персонала Платформы, нарушениями в работе технических средств или в ситуациях, вызванных техногенными катастрофами.
При возникновении нештатной ситуации осуществляется регистрация данного события. Эксплуатационный персонал Платформы выполняет работы по выявлению причин и устранению нештатной ситуации. В аварийном режиме работа пользователей с системой невозможна.
О возникновении аварийного режима функционирования Платформы администратор оповещает эксплуатационный персонал и пользователей Платформы (любым доступным способом).
Требования к аппаратной части
Платформа функционирует на базе Kubernetes-кластера. Поддерживаемые дистрибутивы: RKE2, Talos Linux, а также managed-решения (Yandex Cloud Managed Kubernetes и аналоги).
Серверная часть (Kubernetes-кластер)
Минимальная конфигурация серверной части КТС Платформы, достаточная для тестирования и разработки:
Таблица 1 Минимальная конфигурация
|
Роль узла |
Количество |
CPU |
RAM |
Диск (ОС + данные) |
|
Control-plane + Worker (совмещённая роль) |
3 |
10 vCPU |
32 GB |
200 GB SSD |
Для промышленной эксплуатации серверная часть должна быть собрана в отказоустойчивый кластер, в котором выход одного сервера из строя не остановит работу платформы, что соответствует требованиям Высокой доступности (High Availability).
Рекомендуемая конфигурация серверной части КТС Платформы, достаточная для промышленной эксплуатации:
Таблица 2 Рекомендуемая конфигурация
|
Роль узла |
Количество |
CPU |
RAM |
Диск (ОС) |
Диск (данные) |
|
Control-plane 3 |
3 |
8 vCPU |
16 GB |
100 GB SSD |
50 GB SSD (etcd) |
|
Worker |
3+ |
16 vCPU |
64 GB |
100 GB SSD |
500 GB SSD |
|
Worker GPU (для AI-модуля, опционально) |
1+ |
8 vCPU + GPU |
32 GB |
100 GB SSD |
200 GB SSD |
Требования к дисковому пространству (Persistent Volumes)
|
Компонент |
Размер PVC |
Количество реплик |
Примечание |
|
PostgreSQL |
50 Gi |
3 |
Основное хранилище данных платформы |
|
Elasticsearch |
30 Gi |
3 |
Хранение логов (политика ротации: 3 дня) |
|
MinIO (S3) |
20 Gi |
4 |
Объектное хранилище файлов |
|
Prometheus |
15 Gi |
1 |
Хранение метрик мониторинга |
|
Grafana |
15 Gi |
1 |
Конфигурация дашбордов |
|
Kafka Ephemeral (по умолчанию) |
|
3 |
Брокер сообщений, KRaft mode |
|
Итого минимум |
~355 Gi |
|
|
Требования к сети
Сетевая конфигурация должна соответствовать следующим требованиям:
- Сетевой плагин (CNI): Cilium или Calico
- Пропускная способность между узлами: не менее 1 Gbps
- Внешний доступ: порты 80 (HTTP), 443 (HTTPS) через Ingress Controller
- Межузловое взаимодействие: порты 6443 (K8s API), 2379-2380 (etcd), 9345 (RKE2 join), 10250 (kubelet)
- Kafka external: NodePort 9094 (при необходимости внешнего доступа)
Требования к программному обеспечению
Операционная система серверов
На сервере должна быть установлена операционная система Linux не ниже следующих версий:
- Ubuntu 20.04+;
- RHEL/CentOS 8+;
- Debian 11+;
- Talos Linux 1.12+
Утилиты администрирования (рабочее место администратора)
Таблица 3 Утилиты администрирования
|
Утилита |
Версия |
Назначение |
|---|---|---|
|
kubectl |
совместимая с версией K8s |
Управление кластером |
|
helm |
3.x |
Управление Helm-чартами |
|
yq |
4+ |
Обработка YAML-конфигураций |
|
bash |
4+ |
Выполнение скриптов установки |
Инфраструктурное ПО (устанавливается автоматически)
Обязательные компоненты
Таблица 4 Обязательные компоненты
|
Компонент |
Версия |
Назначение |
|---|---|---|
|
cert-manager |
v1.18.2 |
Автоматическое управление TLS-сертификатами |
|
Traefik |
v3.6.11 |
Ingress Controller (маршрутизация HTTP/HTTPS) |
|
CloudNativePG Operator |
1.28.0 |
Управление PostgreSQL-кластерами |
|
PostgreSQL |
18.0 |
Реляционная СУБД |
|
PgBouncer |
1.24.1 |
Пул соединений к PostgreSQL |
|
MinIO |
RELEASE.2024-04-18 |
S3-совместимое объектное хранилище |
|
Strimzi Kafka Operator |
0.48.0 |
Управление Apache Kafka |
|
Apache Kafka |
4.0.0 |
Брокер сообщений (KRaft mode, без ZooKeeper) |
Опциональные компоненты (наблюдаемость и управление)
Таблица 5 Опциональные компоненты
|
Компонент |
Версия |
Назначение |
|---|---|---|
|
Elasticsearch |
8.5.1 |
Поиск и хранение логов |
|
Logstash |
8.5.1 |
Обработка и трансформация логов |
|
Kibana |
8.5.1 |
Визуализация и поиск по логам |
|
Filebeat |
8.5.1 |
Сбор логов со всех узлов кластера |
|
Jaeger |
1.53.0 |
Распределённая трассировка запросов |
|
Prometheus |
v0.78.2 (kube-prometheus-stack 66.2.2) |
Сбор метрик и алертинг |
|
Grafana |
(в составе kube-prometheus-stack) |
Визуализация метрик |
|
Argo CD |
v2.11.7 |
GitOps / непрерывная доставка |
|
Kafka UI |
latest |
Веб-интерфейс управления Kafka |
|
Rancher |
2.11.0 |
Веб-интерфейс управления кластерами |
Прикладное ПО платформы
Таблица 6 Компоненты прикладного ПО
|
Модуль |
Компоненты |
Стек |
|---|---|---|
|
Инфраструктурный |
Deployment Manager, Service Creator |
Java/Spring Boot, OpenResty/Lua |
|
Платформенный |
API Gateway, Platform Backend, Platform Frontend, Keycloak, License Manager, Integrations |
Java/Spring Boot, Vue.js |
|
Тенантный |
Tenant Backend, Tenant Frontend, WebSocket Gateway, BPMS (Camunda) |
Java/Spring Boot, Vue.js |
|
Прикладной (per-app) |
App Backend, App Frontend |
Java/Spring Boot, Vue.js |
|
AI-модуль |
Container Runner, Chain Runner, Meta Assistant KF Backend |
Go, Python |
Конфигурирование серверной части
Общая архитектура развёртывания
Платформа разворачивается послойно. Каждый последующий уровень зависит от предыдущего:
Таблица 7 Уровни развертывания
|
Уровень |
Наименование уровня |
Содержимое уровня |
|---|---|---|
|
Уровень 6 |
AI-модуль |
container-runner, chain-runner, meta-assistant |
|
Уровень 5 |
Приложения |
app-backend, app-frontend (per-application) |
|
Уровень 4 |
Тенанты |
tenant-backend, tenant-frontend, websocket-gateway, bpms (создаютсядинамически, per-tenant namespace) |
|
Уровень 3 |
Платформенные сервисы |
api-gateway, platform-backend, platform-frontend, keycloak, license-manager, integrations |
|
Уровень 2 |
Платформа управления |
deployment-manager, service-creator |
|
Уровень 1 |
Инфраструктура |
cert-manager, Traefik, PostgreSQL+PgBouncer, Kafka, MinIO, ELK Stack, Jaeger, Prometheus+Grafana |
Установка инфраструктуры
Установка выполняется единым скриптом init.sh. Основные конфигурационные параметры:
Таблица 8 Параметры конфигурации
|
Параметр |
Описание |
Пример |
|---|---|---|
|
STORAGE_CLASS |
StorageClass для всех PVC |
local-path |
|
ROOT_DOMAIN |
Корневой домен платформы |
platform.example.com |
|
IMAGE_REGISTRY_OVERRIDE |
Использование внутреннего registry (для закрытых контуров) |
true/false |
|
REGISTRY_MIRROR_HOST |
Адрес внутреннего Docker Registry |
registry.example.com |
Каждый компонент управляется переменной *_ACTION со значениями: install, remove, skip.
Порядок установки компонентов
Компоненты устанавливаются в следующем порядке:
- cert-manager (TLS-сертификаты)
- Traefik Ingress Controller (маршрутизация)
- ELK Stack (опционально): Elasticsearch → Logstash → Kibana → Filebeat
- Jaeger (опционально, требует ELK)
- Prometheus Stack (опционально)
- MinIO (объектное хранилище)
- CloudNativePG Operator + PostgreSQL Cluster (3 реплики)
- PgBouncer (connection pooler)
- Strimzi Kafka Operator + Kafka Cluster (3 брокера, KRaft mode)
- Kafka UI
- Appliner Infrastructure Chart (Deployment Manager + Service Creator)
- Автоматическое создание платформы через API Deployment Manager
- Автоматическое создание AI-модуля через API Deployment Manager
Структура пространства имен (namespaces)
После установки создаются следующие пространства имён:
Таблица 9 Пространства имен
|
Namespace |
Назначение |
Основные компоненты |
|---|---|---|
|
cert-manager |
Управление сертификатами |
cert-manager, cainjector, webhook |
|
traefik |
Входящий трафик |
Traefik Deployment |
|
psql |
База данных |
CloudNativePG operator, PostgreSQL x3, PgBouncer x2 |
|
kafka |
Брокер сообщений |
Kafka brokers x3, Entity Operator, Kafka UI |
|
kafka-operator |
Оператор Kafka |
Strimzi Operator |
|
minio |
Объектное хранилище |
MinIO StatefulSet (4 реплики) |
|
elk |
Централизованное логирование |
Elasticsearch x3, Logstash, Kibana, Filebeat (DaemonSet) |
|
jaeger |
Распределённая трассировка |
Jaeger Agent (DaemonSet), Collector, Query |
|
monitoring |
Мониторинг |
Prometheus, Grafana, Node Exporter (DaemonSet), kube-state-metrics |
|
appliner-platform |
Платформа Appliner |
deployment-manager, service-creator, api-gateway, platform-backend, platform-frontend, keycloak, license-manager, integrations |
|
appliner-ai |
AI-модуль |
container-runner, chain-runner, meta-assistant |
|
tenant-<имя> |
Per-tenant (создаётся автоматически) |
tenant-backend, tenant-frontend, websocket-gateway, bpms, per-app pods |
Конфигурация доменов и TLS
Все сервисы доступны через Traefik Ingress по шаблону:
Таблица 10 Конфигурация доменов
|
Домен |
Назначение |
|---|---|
|
platform.<ROOT_DOMAIN> |
Платформа (Backend, Frontend, Keycloak, License Manager) |
|
s3.<ROOT_DOMAIN> |
MinIO S3 API |
|
s3-console.<ROOT_DOMAIN> |
MinIO Console (UI) |
|
elastic.<ROOT_DOMAIN> |
Elasticsearch API |
|
kibana.<ROOT_DOMAIN> |
Kibana UI |
|
jaeger.<ROOT_DOMAIN> |
Jaeger Query UI |
|
kafka-ui.<ROOT_DOMAIN> |
Kafka UI |
|
grafana.<ROOT_DOMAIN> |
Grafana |
|
prometheus.<ROOT_DOMAIN> |
Prometheus UI |
|
<tenant>.<ROOT_DOMAIN> |
Домен тенанта (создаётся автоматически) |
TLS-сертификаты выпускаются автоматически через cert-manager с использованием ClusterIssuer на основе корпоративного CA-сертификата организации.
Описание необходимых конфигурационных файлов модулей подсистем
Основной файл конфигурации (init.sh)
Таблица 11 Конфигурация init.sh
|
Группа параметров |
Описание |
|---|---|
|
Домен и окружение |
ROOT_DOMAIN, STORAGE_CLASS |
|
Docker Registry |
IMAGE_REGISTRY_OVERRIDE, REGISTRY_MIRROR_HOST |
|
Namespaces |
Индивидуальные для каждого компонента или единый через HELM_TARGET_NAMESPACE |
|
Appliner Charts |
Версия, OCI-registry, credentials |
|
PostgreSQL |
Хост PgBouncer, порт, credentials |
|
Kafka |
Имя кластера, аутентификация (SCRAM-SHA-512) |
|
Keycloak |
URL, realm, client ID, fetcher credentials |
|
S3/MinIO |
Endpoint, access/secret keys |
|
TLS |
Корневой CA-сертификат в PEM-формате |
Helm Charts платформы
Таблица 12 Параметры Helm Charts
|
Chart |
Компоненты |
Ключевые параметры |
|---|---|---|
|
appliner-infrastructure |
deployment-manager, service-creator |
global.domain, global.pgsql.*, global.keycloak.*, global.kafka.*, global.s3.*, global.helm.* |
|
appliner-platform |
api-gateway, platform-backend, platform-frontend, keycloak, license-manager, integrations |
global.domain, global.keycloak_enabled, Kafka, корпоративный LDAP |
|
appliner-tenant |
tenant-backend, tenant-frontend, websocket-gateway, bpms |
Per-tenant: TENANT_KEY, домен, DB credentials |
|
appliner-application |
app-backend, app-frontend |
Per-app: PROJECT_NAME, DB/S3/Kafka credentials |
|
appliner-ai |
container-runner, chain-runner, meta-assistant-kf-backend |
Kafka credentials per runner, GPU config |
Конфигурационные шаблоны Deployment Manager
Deployment Manager хранит шаблоны для автоматической генерации values при развёртывании:
Таблица 13 Шаблоны Deployment Manager
|
Шаблон |
Назначение |
|
platform-helm.yaml |
Values для платформенного чарта |
|
tenant-helm.yaml |
Values для тенантного чарта |
|
app-helm.yaml |
Values для чарта приложения |
|
ai-helm.yaml |
Values для AI-модуля |
При создании тенанта/приложения Deployment Manager автоматически:
- Создаёт базу данных в PostgreSQL
- Создаёт бакет в MinIO
- Создаёт Kafka-пользователя и топики
- Создаёт realm/client в Keycloak
- Разворачивает соответствующий Helm-чарт с рассчитанными values
Ресурсы подов (значения по умолчанию)
Платформенные сервисы:
Таблица 14 Ресурсы платформенных сервисов
|
Сервис |
CPU (request/limit) |
Memory (request/limit) |
|---|---|---|
|
API Gateway |
5m / 600m |
256Mi / 512Mi |
|
Platform Backend |
5m / 600m |
256Mi / 512Mi |
|
Platform Frontend |
5m / 200m |
32Mi / 128Mi |
|
Keycloak |
5m / 1000m |
512Mi / 1024Mi |
|
License Manager |
5m / 600m |
256Mi / 512Mi |
|
Integrations |
5m / 600m |
256Mi / 512Mi |
|
Deployment Manager |
5m / 600m |
256Mi / 512Mi |
|
Service Creator |
5m / 400m |
256Mi / 2048Mi |
Тенантные сервисы (per-tenant):
Таблица 15 Ресурсы тенатнных сервисов
|
Сервис |
CPU (request/limit) |
Memory (request/limit) |
|---|---|---|
|
Tenant Backend |
10m / 1000m |
512Mi / 1024Mi |
|
Tenant Frontend |
5m / 200m |
32Mi / 128Mi |
|
BPMS (Camunda) |
5m / 2000m |
400Mi / 768Mi |
|
WebSocket Gateway |
10m / 1000m |
256Mi / 512Mi |
Прикладные сервисы (per-application):
Таблица 16 Ресурсы прикладных сервисов
|
Сервис |
CPU (request/limit) |
Memory (request/limit) |
|
App Backend |
50m / 1600m |
512Mi / 1024Mi |
|
App Frontend |
5m / 200m |
32Mi / 128Mi |
AI-модуль:
Таблица 17 Ресурсы AI-модуля
|
Сервис |
CPU (request/limit) |
Memory (request/limit) |
|
Container Runner |
5m / 1000m |
768Mi / 1536Mi |
|
Chain Runner |
5m / 600m |
128Mi / 256Mi |
|
Meta Assistant |
5m / 600m |
256Mi / 512Mi |
Архитектура Helm Charts (важные элементы)
Управление TLS-сертификатами в Ingress
Каждый Ingress-ресурс в Helm Charts содержит условную логику выбора TLS-секрета. Поддерживаются три режима (по приоритету):
- Wildcard-сертификат (global.tls.wildcartcert: true) — единый сертификат для всех поддоменов *.<ROOT_DOMAIN>. Используется Secret wildcard-tls-secret.
- Кастомный сертификат (global.tls.customcert: true) — сертификат передаётся в values. Chart автоматически создаёт Secret platform-tls-secret (платформа) или tenant-tls-secret(тенант).
- Автоматический (cert-manager) — при обоих параметрах falsecert-manager автоматически выпускает сертификат через ClusterIssuer и создаёт Secret вида <domain>-secret.
При автоматическом режиме Ingress получает аннотацию cert-manager.io/cluster-issuer, которая инициирует выпуск сертификата. При использовании кастомного или wildcard-сертификата аннотация не добавляется, Ingress ссылается на заранее созданный Secret.
Пример условной логики в шаблоне:
annotations:
{{- if and (not .Values.global.tls.wildcartcert) (not .Values.global.tls.customcert) }}
cert-manager.io/cluster-issuer: “{{ .Values.global.CERT_ISSUER }}”
{{- end }}
spec:
tls:
– hosts:
– “{{ .Values.global.domain }}”
{{- if .Values.global.tls.wildcartcert }}
secretName: “wildcard-tls-secret”
{{- else if .Values.global.tls.customcert }}
secretName: “platform-tls-secret”
{{- else }}
secretName: “{{ .Values.global.domain }}-secret”
{{- end }}
Распространение корпоративного CA (externalCertificates)
Для обеспечения доверенного HTTPS-взаимодействия между внутренними сервисами платформы используется механизм распространения корпоративного CA-сертификата:
- Администратор указывает PEM-содержимое CA-сертификата в global.externalCertificates.certificates
- Helm-чарт создаёт Kubernetes ConfigMap с этим содержимым
- ConfigMap монтируется как volume в каждый Pod по пути /usr/local/share/ca-certificates
- Операционная система контейнера автоматически доверяет сертификатам, подписанным этим CA
Пример шаблона в Deployment:
containers:
– name: service
{{- if .Values.global.externalCertificates.enabled }}
volumeMounts:
– name: external-certs
mountPath: /usr/local/share/ca-certificates
{{- end }}
volumes:
{{- if .Values.global.externalCertificates.enabled }}
– name: external-certs
configMap:
name: {{ .Values.global.externalCertificates.configName }}
optional: true
{{- end }}
Этот механизм применяется во всех Helm-чартах:
Таблица 18 Состав Helm-чартов и сервисов платформы
|
Chart |
ConfigMap |
Сервисы |
|---|---|---|
|
appliner-infrastructure |
infrastructure-external-certificates |
deployment-manager, service-creator |
|
appliner-platform |
platform-external-certificates |
api-gateway, platform-backend, license-manager, integrations |
|
appliner-tenant |
Имя из global.externalCertificates.configName |
tenant-backend, bpms, websocket-gateway |
|
appliner-application |
Имя из global.externalCertificates.configName |
app-backend, app-frontend |
|
appliner-ai |
Имя из global.externalCertificates.configName |
container-runner, chain-runner, meta-assistant |
ДляAI-модуля (container-runner) используется альтернативный путь монтирования: /etc/pki/ca-trust/source/anchors (для RHEL/CentOS-based образов контейнеров).
Параметры в values.yaml:
global:
externalCertificates:
enabled: true
configName: “platform-external-certificates”
certificates:
“ca.crt”: |
—–BEGIN CERTIFICATE—–
<PEM-содержимое корневого CA-сертификата организации>
—–END CERTIFICATE—–
Java TLS trustStore
Java-сервисы платформы (api-gateway, integrations, websocket-gateway) используют JVM-параметр для подключения корпоративного CA в Java TLS trustStore:
env:
– name: JAVA_TOOL_OPTIONS
value: >-
-Djavax.net.ssl.trustStore=/shared/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
Это обеспечивает доверие Java-приложений к сервисам с сертификатами, подписанными корпоративным CA, при HTTPS-взаимодействии между микросервисами внутри кластера.
Привязка к группам узлов (Node Affinity)
Все Deployment’ы платформы используют preferredDuringSchedulingIgnoredDuringExecution — мягкое ограничение, позволяющее Kubernetes предпочтительно размещать pod’ы на определённых группах узлов, но не блокирующее запуск при их недоступности:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
– weight: 1
preference:
matchExpressions:
– key: name
operator: In
values:
– {{ .Values.global.temp }}
Два типа групп узлов:
- global.temp — для временных/тестовых нагрузок
- global.stable — для стабильных/продуктовых нагрузок
Администратор может назначить метки узлам командой:
kubectl label node <node-name> name=<group-name>
Проверки жизнеспособности (Health Probes)
Все Java-сервисы используют Spring Boot Actuator для автоматических health-проверок Kubernetes:
Таблица 19 Проверки жизнеспособности
|
Тип проверки |
Endpoint |
Порт |
Начальная задержка |
Период |
|
startupProbe |
/actuator/health |
9090 |
10 сек |
10 сек |
|
livenessProbe |
/actuator/health/liveness |
9090 |
30 сек |
10 сек |
|
readinessProbe |
/actuator/health/readiness |
9090 |
30 сек |
10 сек |
Назначение проверок:
- startupProbe — определяет момент, когда приложение полностью запустилось. До его прохождения liveness и readiness не проверяются.
- livenessProbe — если приложение “зависло” и не отвечает, Kubernetes автоматически перезапускает контейнер.
- readinessProbe — если приложение временно не готово обслуживать запросы (например, загрузка конфигурации), Kubernetes временно убирает pod из балансировки.
Маршрутизация (Traefik Middlewares)
Каждый уровень платформы создаёт набор Traefik CRD Middleware для управления HTTP-трафиком.
Платформенный уровень:
Таблица 20 Маршрутизация платформенного уровня
|
Middleware |
Назначение |
|---|---|
|
<project>-cors |
Настройка CORS-заголовков (Access-Control-Allow-Origin, Methods, Headers) |
|
<project>-buffering |
Буферизация запросов (без лимита размера body) |
|
<project>-rewrite-api-gateway |
Перенаправление /api-gateway/… → /…(strip prefix) |
|
<project>-rewrite-platform-backend |
Маршрутизация /api/tenants/… через API Gateway с аутентификацией |
|
<project>-rewrite-license-manager |
Маршрутизация /api/licenses/… через API Gateway с аутентификацией |
Тенантный уровень:
Таблица 21 Маршрутизация тенантного уровня
|
Middleware |
Назначение |
|
<project>-cors |
CORS-заголовки для домена тенанта |
|
<project>-buffering |
Буферизация с лимитом 32KB response body |
|
<project>-rewrite-backend |
Перенаправление /backend/… → /… |
|
<project>-rewrite-api |
Маршрутизация /api/… через API Gateway с аутентификацией Keycloak |
|
<project>-rewrite-bpms-engine-rest |
Перенаправление /camunda/engine-rest/…→ /engine-rest/… |
|
<project>-rewrite-storybook |
Перенаправление /storybook/… → /… |
Все Middleware создаются автоматически при развёртывании Helm-чарта и привязываются к Ingress-ресурсам через аннотации:
traefik.ingress.kubernetes.io/router.middlewares: <namespace>-<project>-cors@kubernetescrd,<namespace>-<project>-buffering@kubernetescrd
Управление секретами (Secrets Management)
Helm Charts автоматически создают отдельные Kubernetes Secrets для каждого типа подключения. Это обеспечивает разделение доступа и возможность ротации отдельных credentials:
Таблица 22 Управление секретами
|
Тип Secret |
Формат имени |
Содержимое |
|---|---|---|
|
Docker Registry |
<project>-docker-config-secret |
Credentials для приватного Docker registry (тип kubernetes.io/dockerconfigjson) |
|
PostgreSQL |
<project>-postgres-secret |
host, port, dbname, username, password |
|
Kafka |
<project>-kafka-secret |
bootstrap_servers, security_protocol, sasl_mechanism, username, password |
|
S3/MinIO |
<project>-s3-secret |
endpoint, access_key, secret_key, bucket |
|
Keycloak |
<project>-keycloak-secret |
realm, client_id, client_secret, base_url |
|
TLS |
platform-tls-secret / tenant-tls-secret |
tls.crt, tls.key (PEM-формат, тип kubernetes.io/tls) |
Все Secret’ы создаются в формате stringData (не base64-encoded в шаблонах) для читаемости и удобства отладки. Kubernetes автоматически кодирует значения при хранении.
Параметр CERT_ISSUER
Infrastructure Chart передаёт переменную CERT_ISSUER (значение по умолчанию: my-ca-issuer) в компоненты управления платформой:
env:
– name: CERT_ISSUER
value: “{{ .Values.global.CERT_ISSUER }}”
Эта переменная используется при программном создании Ingress-ресурсов для новых тенантов и приложений — Service Creator добавляет аннотацию cert-manager.io/cluster-issuer со значением CERT_ISSUER к каждому создаваемому Ingress, что инициирует автоматический выпуск TLS-сертификата для домена нового тенанта.
Стратегия обновления (Deployment Strategy)
Все Deployment’ы поддерживают конфигурируемую стратегию обновления через values.yaml:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
По умолчанию используется RollingUpdate — Kubernetes создаёт новый pod перед удалением старого, обеспечивая zero-downtime обновления.
Количество реплик
Каждый сервис имеет настраиваемое количество реплик через replicaCount в values:
replicaCount: 1 # по умолчанию
Для высоконагруженных систем рекомендуется увеличивать replicaCount для критичных сервисов:
- API Gateway: 2-3
- Platform Backend: 2-3
- Tenant Backend: 2+ (per-tenant)
Инструменты администрирования
Таблица 23 Инструменты администрирования
|
Инструмент |
Назначение |
Тип доступа |
|---|---|---|
| kubectl | Управление Kubernetes-кластером (pods, services, secrets, logs) | CLI |
| helm | Управление Helm-релизами (установка, обновление, откат) | CLI |
| Grafana | Дашборды мониторинга (CPU, RAM, сеть, HTTP latency) | Web: https://grafana.<ROOT_DOMAIN> |
| Kibana | Поиск и визуализация логов | Web: https://kibana.<ROOT_DOMAIN> |
| Jaeger UI | Распределённая трассировка запросов между микросервисами | Web: https://jaeger.<ROOT_DOMAIN> |
| Kafka UI | Управление Kafka: топики, потребители, сообщения | Web: https://kafka-ui.<ROOT_DOMAIN> |
| Keycloak Admin Console | Управление пользователями, ролями, realms | Web: https://platform.<ROOT_DOMAIN>/auth/admin |
| Rancher | Графический интерфейс управления кластерами | Web: https://rancher.<ROOT_DOMAIN> |
| Argo CD | GitOps: статус deployments, синхронизация | Web (если установлен) |
| MinIO Console | Управление бакетами, объектами, пользователями | Web: https://s3-console.<ROOT_DOMAIN> |
| Prometheus | Просмотр метрик, PromQL-запросы | Web: https://prometheus.<ROOT_DOMAIN> |
Типовые операции администрирования
Остановка системы
Остановка прикладного ПО (без потери данных):
# Масштабирование всех deployments до 0 реплик
kubectl scale deployment –all –replicas=0 -n appliner-platform
kubectl scale deployment –all –replicas=0 -n <namespace-тенанта>
kubectl scale deployment –all –replicas=0 -n appliner-ai
Остановка отдельного компонента инфраструктуры:
helm uninstall <имя-релиза> -n <namespace>
Полная остановка всей инфраструктуры:
# Установить action=remove для нужных компонентов и запустить init.sh
export INFRASTRUCTURE_CHART_ACTION=”remove”
export KAFKA_UI_ACTION=”remove”
# … остальные компоненты
./init.sh
Запуск системы
Первичная установка / восстановление после полной остановки:
# Настроить переменные окружения
export CERT_MANAGER_ACTION=”install”
export TRAEFIK_ACTION=”install”
export MINIO_ACTION=”install”
export CLOUDNATIVE_PG_OPERATOR_ACTION=”install”
export POSTGRES_CLUSTER_ACTION=”install”
export PGBOUNCER_ACTION=”install”
export KAFKA_OPERATOR_ACTION=”install”
export KAFKA_CLUSTER_ACTION=”install”
export KAFKA_UI_ACTION=”install”
export INFRASTRUCTURE_CHART_ACTION=”install”
export PLATFORM_CREATION=”true”
export AI_CREATION=”true”
./init.sh
Восстановление после масштабирования до 0:
kubectl scale deployment –all –replicas=1 -n appliner-platform
kubectl scale deployment –all –replicas=1 -n <namespace-тенанта>
kubectl scale deployment –all –replicas=1 -n appliner-ai
Просмотр состояния системы
Состояние узлов кластера:
kubectl get nodes -o wide
Состояние всех компонентов платформы:
kubectl get pods -A | grep -E “appliner|psql|kafka|elk|minio|traefik|monitoring|jaeger|cert-manager”
Состояние Helm-релизов:
helm list -A
Состояние PostgreSQL:
kubectl get clusters.postgresql.cnpg.io -n psql
Ожидаемый результат: STATUS: Cluster in healthy state, READY: 3/3.
Состояние Kafka:
kubectl get kafka -n kafka
Ожидаемый результат: READY: True.
Состояние сертификатов:
kubectl get certificates -A
Все сертификаты должны быть в состоянии READY: True.
Проверка PersistentVolumeClaims:
kubectl get pvc -A
Все PVC должны быть в состоянии Bound.
Через Grafana: дашборды Kubernetes (node capacity, pod status, network), PostgreSQL, Kafka.
Просмотр журналов прикладного программного обеспечения
Через kubectl (реальное время):
# Логи конкретного pod’а
kubectl logs <pod-name> -n <namespace>
# Логи всех pod’ов сервиса
kubectl logs -l app=<service-name> -n <namespace> –tail=100
# Следить за логами в реальном времени
kubectl logs -f <pod-name> -n <namespace>
# Логи предыдущего контейнера (после перезапуска)
kubectl logs <pod-name> -n <namespace> –previous
Через Kibana (централизованные логи):
- Открыть https://kibana.<ROOT_DOMAIN>
- Перейти в раздел Discover
- Фильтры:
- kubernetes.namespace_name: “<namespace>” — логи по namespace
- kubernetes.labels.app: “<service>” — логи конкретного сервиса
- log.level: “error” — только ошибки
- Retention: 3 дня (ILM Policy Filebeat: rollover при 50 GB или 1 день, удаление через 3 дня)
Через Jaeger (трассировка запросов):
- Открыть https://jaeger.<ROOT_DOMAIN>
- Выбрать сервис из списка
- Анализ цепочки вызовов между микросервисами
Просмотр логов программного обеспечения промежуточного уровня
PostgreSQL:
kubectl logs -l cnpg.io/cluster=postgres -n psql
kubectl logs -l cnpg.io/cluster=postgres,role=primary -n psql
PgBouncer:
kubectl logs -l app.kubernetes.io/name=pgbouncer -n psql
Kafka:
kubectl logs -l strimzi.io/cluster=platform-kafka -n kafka
Traefik:
kubectl logs -l app.kubernetes.io/name=traefik -n traefik
cert-manager:
kubectl logs -l app.kubernetes.io/name=cert-manager -n cert-manager
CloudNativePG Operator:
kubectl logs -l app.kubernetes.io/name=cloudnative-pg -n psql
Уровень узла (systemd):
# На узле кластера:
journalctl -u rke2-server.service # для Control-plane узлов
journalctl -u rke2-agent.service # для Worker-узлов
Замена сертификатов
Платформа реализует двухуровневую систему TLS-сертификатов:
- Ingress TLS — сертификаты для внешнего HTTPS-доступа (через cert-manager или кастомные)
- Internal CA (externalCertificates) — корпоративный CA-сертификат для внутренней коммуникации между сервисами
Архитектура TLS
Уровень 1: Внешний доступ (Ingress TLS)
Управляется через параметр global.tls в Helm values. Три режима (по приоритету):
Таблица 24 Режимы внешнего доступа
|
Режим |
Параметр |
Описание |
|---|---|---|
|
Wildcard |
global.tls.wildcartcert: true |
Используется wildcard-сертификат из секрета wildcard-tls-secret |
|
Кастомный |
global.tls.customcert: true |
Сертификат передаётся в values (global.tls.crt / global.tls.key), создаётся Secret |
|
cert-manager (автоматический) |
Оба false |
cert-manager автоматически выпускает сертификат через ClusterIssuer |
При wildcartcert=true или customcert=true Infrastructure Chart создаёт Kubernetes Secret типа kubernetes.io/tls:
- Для платформы: wildcard-tls-secret или platform-tls-secret
- Для тенантов: tenant-tls-secret
При обоих false — cert-manager выпускает сертификат автоматически при создании Ingress.
Уровень 2: Внутренняя коммуникация (Internal CA)
Все Helm-чарты платформы содержат механизм распространения корпоративного CA-сертификата для межсервисного взаимодействия по HTTPS:
Механизм:
- В global.externalCertificates.certificates указывается CA-сертификат в PEM-формате
- Helm-чарт создаёт ConfigMap с именем из global.externalCertificates.configName
- ConfigMap монтируется в каждый Pod по пути /usr/local/share/ca-certificates
- Java-сервисы дополнительно используют CA через JVM trustStore (JAVA_TOOL_OPTIONS)
Параметры values.yaml:
global:
externalCertificates:
enabled: true
configName: “platform-external-certificates”
certificates:
“ca.crt”: |
—–BEGIN CERTIFICATE—–
<PEM-содержимое корневого CA-сертификата>
—–END CERTIFICATE—–
ClusterIssuer
cert-manager использует ClusterIssuer типа CA, который ссылается на Kubernetes Secret (содержит tls.crt и tls.key корневого CA). Этот же CA-сертификат распространяется как externalCertificates для внутреннего доверия.
Рисунок 1
Замена корневого CA-сертификата
Шаг 1. Обновить Secret для cert-manager:
kubectl create secret tls my-local-ca
–cert=new-ca.crt
–key=new-ca.key
-n cert-manager
–dry-run=client -o yaml | kubectl apply -f –
Шаг 2. Обновить externalCertificates в values всех чартов:
Обновить переменную APPLINER_EXTERNAL_CERT_CA_CRT в init.sh содержимым нового ca.crt и перевыполнить установку Infrastructure Chart:
export INFRASTRUCTURE_CHART_ACTION=”install”
./init.sh
Deployment Manager автоматически распространит обновлённый CA при следующем обновлении платформы/тенантов.
Шаг 3. Перевыпустить Ingress-сертификаты:
# Удаление TLS-секретов инициирует автоматический перевыпуск cert-manager
kubectl get certificates -A -o jsonpath='{range .items[*]}{.metadata.namespace}/{.spec.secretName}{“n”}{end}’ |
while read line; do
ns=$(echo $line | cut -d/ -f1)
secret=$(echo $line | cut -d/ -f2)
kubectl delete secret “$secret” -n “$ns”
done
Шаг 4. Перезапустить pod’ы для подхвата нового ConfigMap:
kubectl rollout restart deployment -n appliner-platform
kubectl rollout restart deployment -n appliner-ai
# Для каждого тенанта:
kubectl rollout restart deployment -n tenant-<name>
Шаг 5. Проверить работоспособность:
# Проверить статус сертификатов
kubectl get certificates -A
# Проверить ConfigMap с CA
kubectl get configmap platform-external-certificates -n appliner-platform -o yaml
# Проверить доступность сервисов
kubectl get pods -n appliner-platform
Использование кастомного сертификата (без cert-manager)
Для использования собственного сертификата вместо автоматической выдачи через cert-manager:
# В values Infrastructure Chart:
global:
tls:
customcert: true
crt: |
—–BEGIN CERTIFICATE—–
<fullchain PEM — включая промежуточные сертификаты>
—–END CERTIFICATE—–
key: |
—–BEGIN PRIVATE KEY—–
<private key PEM>
—–END PRIVATE KEY—–
Chart автоматически создаст Secret platform-tls-secret (для платформы) или tenant-tls-secret (для тенанта), который будет использован всеми Ingress-ресурсами.
Использование wildcard-сертификата
Для единого wildcard-сертификата на весь домен (*.<ROOT_DOMAIN>):
global:
tls:
wildcartcert: true
crt: |
—–BEGIN CERTIFICATE—–
<wildcard fullchain PEM>
—–END CERTIFICATE—–
key: |
—–BEGIN PRIVATE KEY—–
<wildcard private key PEM>
—–END PRIVATE KEY—–
Создаётся Secret wildcard-tls-secret, используемый всеми Ingress-ресурсами на всех уровнях (платформа, тенанты, приложения).
Замена сертификата отдельного сервиса
# Удалить TLS-секрет — cert-manager автоматически пересоздаст
kubectl delete secret <имя-tls-секрета> -n <namespace>
# Проверить статус перевыпуска
kubectl describe certificate <имя> -n <namespace>
Диагностика проблем с сертификатами
# Просмотр статуса всех Certificate ресурсов
kubectl get certificates -A
# Детали конкретного сертификата (срок, статус, ошибки)
kubectl describe certificate <имя> -n <namespace>
# Проверка ConfigMap с CA
kubectl get configmap platform-external-certificates -n appliner-platform -o yaml
# Логи cert-manager при проблемах выпуска
kubectl logs -l app.kubernetes.io/name=cert-manager -n cert-manager
# Проверка trustStore внутри Java-контейнера
kubectl exec -n appliner-platform <pod> — keytool -list -keystore /shared/cacerts -storepass changeit
# Проверка срока действия сертификата в Secret
kubectl get secret <tls-secret> -n <namespace> -o jsonpath='{.data.tls.crt}’ |
base64 -d | openssl x509 -noout -dates
Параметр CERT_ISSUER
Deployment Manager и Service Creator используютпеременную CERT_ISSUER для автоматического создания Ingress-ресурсов при развёртывании тенантов и приложений. При создании нового тенанта Service Creator создаёт Ingress с аннотацией cert-manager.io/cluster-issuer, что инициирует автоматический выпуск TLS-сертификата для домена тенанта.
Журналирование событий
Архитектура централизованного логирования
- Filebeat развёрнут как DaemonSet на каждом узле кластера;
- Собирает логи всех контейнеров из /var/log/containers/*.log;
- Автоматически добавляет Kubernetes-метаданные (namespace, pod name, labels);
- Автоматически определяет уровень лога (ERROR, WARN, INFO, DEBUG, TRACE, FATAL);
- Передаёт в Elasticsearch по HTTPS с аутентификацией.
Рисунок 2
Политика хранения логов
- ILM Policy: filebeat-3d;
- Hot phase: rollover при достижении 50 GB или 1 день;
- Delete phase: удаление данных старше 3 дней;
- Elasticsearch: 3 реплики, 30 Gi storage каждая;
- Индексы создаются автоматически по шаблону filebeat-*.
Типы журналируемых событий
Таблица 25 Типы журналируемых событий
|
Источник |
Описание |
Фильтр в Kibana |
|---|---|---|
|
Прикладные сервисы (Java/Go) |
Бизнес-логика, ошибки, HTTP-запросы |
kubernetes.labels.app: “<service>” |
|
Keycloak |
Аутентификация, авторизация |
kubernetes.labels.app: “keycloak” |
|
API Gateway |
Входящие запросы, маршрутизация |
kubernetes.labels.app: “api-gateway” |
|
Kafka |
Работа брокеров, consumer groups |
kubernetes.namespace_name: “kafka” |
|
PostgreSQL |
SQL-операции, ошибки, failover |
kubernetes.namespace_name: “psql” |
|
Ingress (Traefik) |
Входящий трафик, ошибки маршрутизации |
kubernetes.namespace_name: “traefik” |
|
cert-manager |
Выпуск и обновление сертификатов |
kubernetes.namespace_name: “cert-manager” |
Дополнительные системы наблюдения
- Prometheus + Grafana — метрики (CPU, memory, HTTP latency, JVM heap, DB connections, Kafka consumer lag);
- Jaeger — распределённая трассировка (trace ID, span duration, inter-service calls);
- Kubernetes Events — события кластера (kubectl get events -A –sort-by=’.lastTimestamp’).
Резервное копирование программных и информационных ресурсов
Стратегия резервного копирования
Таблица 26 Резервное копирование
|
Компонент |
Метод |
Частота (рекомендуемая) |
RPO |
|---|---|---|---|
|
etcd (метаданные K8s) |
Автоматические snapshot RKE2 |
Каждые 6 часов |
6 часов |
|
PostgreSQL |
pg_dumpall / CloudNativePG Backup CRD |
Ежедневно |
24 часа |
|
MinIO |
mc mirror |
Ежедневно |
24 часа |
|
Kafka |
Retention policy |
Непрерывно |
Зависит от retention |
|
Keycloak |
Realm export |
При изменениях |
N/A |
|
Helm-релизы |
Встроенная история ревизий |
Автоматически |
N/A |
etcd (Kubernetes)
# Автоматические snapshot RKE2 (настроены по умолчанию):
- Каждые 6 часов
- Хранение последних 4 snapshot’ов
Расположение: /var/lib/rancher/rke2/server/db/snapshots/
# Ручной snapshot:
rke2 etcd-snapshot save –name manual-backup-$(date +%Y%m%d)
# Список snapshot’ов:
rke2 etcd-snapshot ls
# Восстановление из snapshot (ВНИМАНИЕ: остановить все узлы кроме одного):
rke2 server –cluster-reset –cluster-reset-restore-path=/path/to/snapshot
PostgreSQL
Через pg_dump (ручной бэкап):
kubectl exec -n psql $(kubectl get pods -n psql -l cnpg.io/cluster=postgres,role=primary -o name | head -1)
-c postgres — pg_dumpall -U postgres > backup_$(date +%Y%m%d).sql
Бэкап отдельной базы:
kubectl exec -n psql $(kubectl get pods -n psql -l cnpg.io/cluster=postgres,role=primary -o name | head -1)
-c postgres — pg_dump -U postgres <database_name> > backup_db_$(date +%Y%m%d).sql
Через CloudNativePG Backup CRD (при настроенном S3-хранилище):
kubectl apply -f – <<EOF
apiVersion: postgresql.cnpg.io/v1
kind: Backup
metadata:
name: backup-$(date +%Y%m%d-%H%M%S)
namespace: psql
spec:
cluster:
name: postgres
EOF
Восстановление:
# Из pg_dump:
kubectl exec -i -n psql $(kubectl get pods -n psql -l cnpg.io/cluster=postgres,role=primary -o name | head -1)
-c postgres — psql -U postgres < backup_20260101.sql
MinIO (объектное хранилище)
# Через MinIO Client (mc)
mc alias set platform https://s3.<ROOT_DOMAIN> <access_key> <secret_key>
# Зеркалирование всех данных
mc mirror platform/ /backup/minio/
# Зеркалирование конкретного бакета
mc mirror platform/<bucket-name> /backup/minio/<bucket-name>
# Проверка целостности
mc diff platform/ /backup/minio/
Kafka
- Retention policy настраивается per-topic (по умолчанию 7 дней)
- Конфигурация топиков хранится в Kubernetes CRD (KafkaTopic) — покрывается snapshot etcd
- Для полного бэкапа данных Kafka рекомендуется использовать MirrorMaker 2
Keycloak
# Export realm через Keycloak Admin API
kubectl exec -n appliner-platform $(kubectl get pods -n appliner-platform -l app=keycloak -o name | head -1)
— /opt/keycloak/bin/kc.sh export –dir /tmp/export –realm <realm-name>
# Копирование файлов export’а
kubectl cp appliner-platform/<keycloak-pod>:/tmp/export ./keycloak-backup/
Helm-релизы
# Просмотр истории всех релизов
helm list -A
helm history <имя-релиза> -n <namespace>
# Откат к предыдущей версии
helm rollback <имя-релиза> <revision> -n <namespace>
# Экспорт текущих values для бэкапа
helm get values <имя-релиза> -n <namespace> -o yaml > values-backup.yaml
Нештатные ситуации
Pod не запускается (CrashLoopBackOff / ImagePullBackOff)
Диагностика:
# Описание pod’а (события, причина ошибки)
kubectl describe pod <pod-name> -n <namespace>
# Логи предыдущего контейнера
kubectl logs <pod-name> -n <namespace> –previous
# События namespace
kubectl get events -n <namespace> –sort-by=’.lastTimestamp’
ImagePullBackOff — недоступен Docker Registry:
- Проверить доступность registry из кластера;
- Проверить корректность imagePullSecrets в Deployment;
- Проверить Secret <project>-docker-config-secret (credentials).
CrashLoopBackOff — ошибка приложения:
- Анализ логов предыдущего контейнера (–previous);
- Проверка переменных окружения (правильность подключений к БД, Kafka, Keycloak);
- Проверка доступности зависимых сервисов (PostgreSQL, Kafka, Keycloak).
PostgreSQL: кластер недоступен
# Статус кластера
kubectl get clusters.postgresql.cnpg.io postgres -n psql
# Просмотр событий оператора
kubectl describe clusters.postgresql.cnpg.io postgres -n psql
# CloudNativePG автоматически выполняет failover при падении primary
# Если все реплики недоступны — удалить pod’ы для принудительного пересоздания:
kubectl delete pods -l cnpg.io/cluster=postgres -n psql
# Оператор автоматически пересоздаст pod’ы и восстановит кластер
# Проверка PgBouncer (connection pooler):
kubectl get pods -l app.kubernetes.io/name=pgbouncer -n psql
kubectl logs -l app.kubernetes.io/name=pgbouncer -n psql
Kafka: брокеры недоступны
# Статус кластера
kubectl get kafka -n kafka
kubectl get pods -l strimzi.io/cluster=platform-kafka -n kafka
# Описание с деталями проблемы
kubectl describe kafka platform-kafka -n kafka
# Рестарт (Strimzi Operator пересоздаст pod’ы)
kubectl delete pods -l strimzi.io/cluster=platform-kafka -n kafka
# Проверка Entity Operator (управление топиками и пользователями)
kubectl get pods -l strimzi.io/name=platform-kafka-entity-operator -n kafka
Дисковое пространство заполнено (PVC)
# Проверить использование внутри pod’а
kubectl exec -n <namespace> <pod-name> — df -h
# Проверить состояние PVC
kubectl get pvc -A
# Для Elasticsearch — принудительная очистка старых индексов:
(Обычно ILM делает это автоматически). Если не работает:
# Подключиться к Elasticsearch и удалить старые индексы
# Для PostgreSQL — увеличить PVC (если StorageClass поддерживает expansion):
kubectl patch pvc <pvc-name> -n psql -p ‘{“spec”:{“resources”:{“requests”:{“storage”:”100Gi”}}}}’
# Если StorageClass не поддерживает expansion — выполнить миграцию данных на новый PVC
Узел кластера недоступен
# Проверить статус узлов
kubectl get nodes -o wide
# Kubernetes автоматически перенесёт pod’ы на другие узлы (через 5 минут по умолчанию)
# Принудительное удаление pod’ов с недоступного узла (если автоматика не сработала):
kubectl delete pods –field-selector spec.nodeName=<node-name> –all-namespaces –force –grace-period=0
# Удаление узла из кластера (если он не будет восстановлен):
kubectl drain <node-name> –ignore-daemonsets –delete-emptydir-data –force
kubectl delete node <node-name>
Сертификат истёк
# Проверить все сертификаты
kubectl get certificates -A
# Определить истекшие
kubectl get certificates -A -o jsonpath='{range .items[*]}{.metadata.name}{” “}{.metadata.namespace}{” “}{.status.notAfter}{“n”}{end}’
# Принудительный перевыпуск — удалить TLS-секрет
kubectl delete secret <tls-secret-name> -n <namespace>
# cert-manager автоматически пересоздаст сертификат
# Если cert-manager сам не работает:
kubectl logs -l app.kubernetes.io/name=cert-manager -n cert-manager
kubectl rollout restart deployment cert-manager -n cert-manager
# Если проблема с CA Secret:
kubectl get secret my-local-ca -n cert-manager
kubectl describe clusterissuer my-ca-issuer
Helm-релиз в состоянии failed
# История релиза (показывает все ревизии и их статус)
helm history <имя-релиза> -n <namespace>
# Откат к рабочей ревизии
helm rollback <имя-релиза> <номер-ревизии> -n <namespace>
# Если откат невозможен:
helm uninstall <имя-релиза> -n <namespace>
# Переустановка через init.sh или Deployment Manager API
Deployment Manager не отвечает
# Проверить pod
kubectl get pods -n appliner-platform -l app=deployment-manager
kubectl logs -l app=deployment-manager -n appliner-platform –tail=50
# Проверить health endpoint
kubectl exec -n appliner-platform <dm-pod> — curl -s http://localhost:9090/actuator/health
# Проверить подключение к зависимостям:
# – PostgreSQL (через PgBouncer)
# – Keycloak
# – Kafka
# Рестарт
kubectl rollout restart deployment <deployment-manager-name> -n appliner-platform
# Проверить восстановление
kubectl get pods -n appliner-platform -l app=deployment-manager -w
- Сервисы не могут подключиться к PostgreSQL
# Проверить PgBouncer
kubectl get pods -l app.kubernetes.io/name=pgbouncer -n psql
kubectl logs -l app.kubernetes.io/name=pgbouncer -n psql
# Проверить PostgreSQL primary
kubectl get pods -l cnpg.io/cluster=postgres,role=primary -n psql
# Проверить credentials в secrets
kubectl get secret <project>-postgres-secret -n <namespace> -o yaml
# Проверить сетевую доступность из pod’а приложения
kubectl exec -n <namespace> <app-pod> — nc -zv <pgbouncer-host> <port>
Kafka consumer lag растёт
# Через Kafka UI: проверить consumer groups и их lag
# Через CLI (внутри Kafka pod’а):
kubectl exec -n kafka platform-kafka-brokers-0 — bin/kafka-consumer-groups.sh
–bootstrap-server localhost:9092
–describe –all-groups
# Возможные причины:
# – Потребитель остановлен или замедлен
# – Недостаточно ресурсов (CPU/Memory) у потребителя
# – Проблемы с сетью между потребителем и Kafka
# Решение: перезапуск потребителя или увеличение replicaCount
kubectl rollout restart deployment <consumer-deployment> -n <namespace>
Traefik: Ingress не маршрутизирует трафик
# Проверить Traefik pod
kubectl get pods -n traefik
kubectl logs -l app.kubernetes.io/name=traefik -n traefik –tail=50
# Проверить Ingress ресурсы
kubectl get ingress -A
kubectl describe ingress <ingress-name> -n <namespace>
# Проверить Middleware
kubectl get middleware -A
# Проверить что TLS-секрет существует и валиден
kubectl get secret <tls-secret> -n <namespace>
# Рестарт Traefik
kubectl rollout restart deployment traefik -n traefik
Ниже приведён список **IT-терминов**, присутствующих в предоставленном документе, с их общепринятыми определениями.
Термины и определения
Таблица 27 Термины и определения
|
№ |
Термин |
Общепринятое определение |
|---|---|---|
|
1 |
Low-code платформа | Среда разработки, позволяющая создавать приложения с минимальным объёмом ручного программирования, используя визуальные конструкторы и готовые модули. |
|
2 |
BPMN (Business Process Model and Notation) | Стандарт нотации для моделирования бизнес-процессов, понятный как техническим специалистам, так и бизнес-аналитикам. |
|
3 |
Kubernetes (K8s) | Платформа с открытым исходным кодом для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. |
|
4 |
Кластер | Группа взаимосвязанных компьютеров (узлов), работающих как единая система для обеспечения высокой доступности и масштабируемости. |
|
5 |
Control-plane | Набор компонентов Kubernetes, управляющих состоянием кластера (планировщик, API-сервер, менеджер контроллеров). |
|
6 |
Worker узел (нода) | Сервер в составе Kubernetes-кластера, на котором выполняются контейнеры приложений (поды). |
|
7 |
High Availability (HA) | Свойство системы сохранять работоспособность при отказе одного или нескольких её компонентов. |
|
8 |
Persistent Volume (PV) | Ресурс в Kubernetes, предоставляющий абстракцию для хранения данных с жизненным циклом, независимым от пода. |
|
9 |
Persistent Volume Claim (PVC) | Запрос пользователя на выделение определённого объёма и типа хранилища из Persistent Volume. |
|
10 |
Ingress | Объект Kubernetes, управляющий внешним доступом к сервисам кластера (маршрутизация HTTP/HTTPS). |
|
11 |
Ingress Controller | Реализация (компонент), которая выполняет правила, заданные в Ingress (например, Traefik). |
|
12 |
CNI (Container Network Interface) | Стандарт и набор плагинов для конфигурации сетевого взаимодействия контейнеров (например, Cilium, Calico). |
|
13 |
etcd | Распределённое высоконадёжное хранилище типа «ключ-значение» для данных о состоянии кластера Kubernetes. |
|
14 |
TLS (Transport Layer Security) | Криптографический протокол для шифрования и аутентификации при передаче данных (HTTPS). |
|
15 |
CA (Certificate Authority) | Доверенный центр сертификации, выпускающий цифровые сертификаты. |
|
16 |
cert-manager | Инструмент Kubernetes для автоматического управления и выпуска TLS-сертификатов. |
|
17 |
ClusterIssuer | Ресурс cert-manager, определяющий способ выпуска сертификатов для всего кластера. |
|
18 |
Docker Registry | Хранилище для образов контейнеров Docker (приватное или публичное). |
|
19 |
Helm | Пакетный менеджер для Kubernetes, использующий «чарты» для развёртывания приложений. |
|
20 |
Helm-чарт (chart) | Набор файлов с шаблонами Kubernetes-ресурсов, описывающий приложение для установки через Helm. |
|
21 |
GitOps | Практика управления инфраструктурой через Git как единственный источник истины. |
|
22 |
PostgreSQL | Реляционная система управления базами данных с открытым исходным кодом. |
|
23 |
PgBouncer | Лёгкий менеджер пула соединений для PostgreSQL. |
|
24 |
Operator (Kubernetes Operator) | Паттерн автоматизации — программный контроллер, управляющий сложными приложениями (например, CloudNativePG Operator). |
|
25 |
Kafka | Распределённая платформа для потоковой передачи сообщений (брокер сообщений). |
|
26 |
Брокер сообщений | Промежуточное ПО для асинхронного обмена сообщениями между сервисами. |
|
27 |
Топик (topic) | Логический канал в Kafka для сообщений (производители → потребители). |
|
28 |
Consumer lag | Отставание потребителя в Kafka — разница между последним сообщением и прочитанным. |
|
29 |
KRaft mode | Режим работы Kafka без ZooKeeper (координация самими брокерами). |
|
30 |
MinIO | Реализация объектного хранилища, совместимого с Amazon S3. |
|
31 |
S3 (Simple Storage Service) | Стандарт объектного хранилища (Amazon S3 API). |
|
32 |
ELK Stack (Elasticsearch, Logstash, Kibana) | Набор инструментов для централизованного логирования: сбор, хранение/поиск, визуализация. |
|
33 |
Filebeat | Лёгкий сборщик логов для пересылки файлов логов в Elasticsearch (часто как DaemonSet). |
|
34 |
DaemonSet | Тип ресурса Kubernetes, обеспечивающий запуск пода на каждом узле кластера. |
|
35 |
ILM (Index Lifecycle Management) | Механизм управления жизненным циклом индексов в Elasticsearch (ролловер, удаление). |
|
36 |
Jaeger | Инструмент для распределённой трассировки запросов. |
|
37 |
Распределённая трассировка | Метод отслеживания выполнения запроса через множество микросервисов. |
|
38 |
Prometheus | Система мониторинга и сбора метрик с временными рядами (PromQL). |
|
39 |
Grafana | Платформа для визуализации данных и построения дашбордов. |
|
40 |
Node Exporter | Экспортёр метрик ОС (CPU, память, диск, сеть) для Prometheus. |
|
41 |
kube-state-metrics | Сервис метрик о состоянии объектов Kubernetes (подов, деплойментов). |
|
42 |
Argo CD | Инструмент непрерывной доставки (CD) для Kubernetes (GitOps). |
|
43 |
Rancher | Веб-интерфейс для управления несколькими Kubernetes-кластерами. |
|
44 |
Keycloak | Платформа для управления идентификацией и доступом (аутентификация, SSO). |
|
45 |
Realm (Keycloak) | Изолированное пространство в Keycloak для пользователей, клиентов, ролей. |
|
46 |
ImagePullBackOff | Состояние пода при неудачной загрузке образа из Docker Registry. |
|
47 |
CrashLoopBackOff | Состояние, при котором контейнер постоянно падает при запуске. |
|
48 |
RollingUpdate | Стратегия обновления с постепенной заменой старых подов новыми (zero-downtime). |
|
49 |
ReplicaCount | Количество идентичных реплик (экземпляров) пода. |
|
50 |
Zero-downtime обновление | Обновление без прерывания обслуживания пользователей. |
|
51 |
Probes (startup/liveness/readiness) | Механизмы проверки здоровья контейнеров (запуск, жив ли, готов ли принимать трафик). |
|
52 |
ConfigMap | Объект Kubernetes для хранения конфигурационных данных (пары ключ-значение). |
|
53 |
Secret | Объект Kubernetes для хранения конфиденциальных данных (пароли, токены, ключи). |
|
54 |
Node Affinity | Механизм указания правил размещения подов на определённых узлах. |
|
55 |
StorageClass | Ресурс Kubernetes, определяющий классы хранилищ с разными характеристиками. |
|
56 |
Snapshot (etcd/БД) | Моментальный снимок состояния системы для восстановления после сбоя. |
|
57 |
RPO (Recovery Point Objective) | Максимально допустимый объём потери данных (время между бэкапом и сбоем). |
|
58 |
pg_dump / pg_dumpall | Утилиты PostgreSQL для создания логических резервных копий. |
|
59 |
RKE2 | Дистрибутив Kubernetes, сертифицированный CNCF, для безопасных production-сред. |
|
60 |
Talos Linux | Специализированный минималистичный Linux-дистрибутив только для Kubernetes. |
|
61 |
API Gateway | Единая точка входа для клиентских запросов к микросервисам (маршрутизация, аутентификация). |
|
62 |
WebSocket Gateway | Шлюз для двустороннего асинхронного обмена по протоколу WebSocket. |
|
63 |
CORS (Cross-Origin Resource Sharing) | Механизм, разрешающий или запрещающий запросы к ресурсам с другого домена. |
|
64 |
Middleware (в Traefik) | Промежуточный слой в Traefik, модифицирующий запрос/ответ (CORS, перезапись пути). |
|
65 |
TrustStore | Хранилище доверенных сертификатов в Java (JVM) для проверки TLS-соединений. |
|
66 |
Spring Boot Actuator | Подпроект Spring Boot с production-готовыми endpoint’ами для мониторинга (health, metrics). |
|
67 |
Blockly | Библиотека Google для создания визуальных редакторов программирования с блоками. |
|
68 |
Camunda | Платформа для управления BPMN-процессами и рабочими потоками. |
|
69 |
Deployment (Kubernetes) | Ресурс Kubernetes, описывающий желаемое состояние приложения (образ, реплики, стратегия). |
|
70 |
Pod | Наименьший развёртываемый объект в Kubernetes (один или несколько контейнеров). |
|
71 |
Namespace | Виртуальный кластер внутри физического Kubernetes для изоляции ресурсов. |
|
72 |
StatefulSet | Контроллер для приложений с состоянием (требуют стабильных идентификаторов и хранилища). |
|
73 |
Managed Kubernetes | Сервис облачного провайдера с управляемым Kubernetes-кластером (например, Yandex Cloud Managed Kubernetes). |