Инструкция развертывания приложения Infomaximum в KubernetesLTS
Развертывание Infomaximum Proceset в Kubernetes
Инструкция описывает базовое развертывание приложения Infomaximum и ClickHouse в Kubernetes. Все компоненты создаются в отдельном пространстве имен infomaximum, а данные и журналы сохраняются в постоянных томах.
Подготовка манифестов
Для развертывания подготовьте три YAML-файла: описание пространства имен, манифест приложения и манифест ClickHouse.
Создать файл namespace.yaml
Пространство имен объединяет ресурсы развертывания и отделяет их от остальных приложений кластера. Создайте его первым, поскольку во всех последующих манифестах явно указано пространство имен infomaximum.
apiVersion: v1
kind: Namespace
metadata:
name: infomaximum
Создать файл infomaximum-app.yaml
Этот манифест создает постоянные тома для данных и журналов, экземпляр приложения и сервис типа LoadBalancer для доступа к нему. Перед применением замените адрес proceset.example.local в переменной FE_URL на внешний адрес, по которому пользователи будут открывать приложение.
PersistentVolumeClaim для данных приложения:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: infomaximum-app-data
namespace: infomaximum
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 200Gi
PersistentVolumeClaim для журналов приложения:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: infomaximum-app-log
namespace: infomaximum
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
Deployment приложения Infomaximum:
apiVersion: apps/v1
kind: Deployment
metadata:
name: infomaximum-app
namespace: infomaximum
labels:
app: infomaximum-app
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: infomaximum-app
template:
metadata:
labels:
app: infomaximum-app
spec:
containers:
- name: app
image: registry.infomaximum.ru/infomaximum/infomaximum_app:d260305
imagePullPolicy: IfNotPresent
env:
- name: JVM_MAX_MEMORY
value: "4G"
- name: FE_URL
value: "https://proceset.example.local" # внешний адрес, по которому ОТКРЫВАЮТ приложение
- name: FE_CORS_POLICY
value: "*"
ports:
- name: http
containerPort: 8010
volumeMounts:
- name: data
mountPath: /var/lib/infomaximum/data
- name: log
mountPath: /var/log/infomaximum
readinessProbe:
tcpSocket: { port: 8010 }
initialDelaySeconds: 60
periodSeconds: 15
livenessProbe:
tcpSocket: { port: 8010 }
initialDelaySeconds: 90
periodSeconds: 20
resources:
requests: { cpu: "500m", memory: "1Gi" }
limits: { memory: "16Gi" }
volumes:
- name: data
persistentVolumeClaim: { claimName: infomaximum-app-data }
- name: log
persistentVolumeClaim: { claimName: infomaximum-app-log }
Service для доступа к приложению:
apiVersion: v1
kind: Service
metadata:
name: infomaximum-app
namespace: infomaximum
spec:
type: LoadBalancer
selector:
app: infomaximum-app
ports:
- name: http
port: 8010
targetPort: 8010
Создать файл clickhouse.yaml
Манифест разворачивает один экземпляр ClickHouse в виде StatefulSet и выделяет отдельные постоянные тома для данных и журналов. Имя пользователя и хеш пароля передаются в контейнер через Kubernetes Secrets, поэтому соответствующие секреты необходимо создать до запуска ClickHouse.
Service для доступа к ClickHouse:
apiVersion: v1
kind: Service
metadata:
name: clickhouse
namespace: infomaximum
labels:
app: clickhouse
spec:
type: ClusterIP
selector:
app: clickhouse
ports:
- { name: http, port: 8123, targetPort: 8123 }
StatefulSet ClickHouse:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: clickhouse
namespace: infomaximum
labels:
app: clickhouse
spec:
serviceName: clickhouse
replicas: 1
selector:
matchLabels:
app: clickhouse
template:
metadata:
labels:
app: clickhouse
spec:
automountServiceAccountToken: false
initContainers:
- name: fix-permissions
image: registry.infomaximum.ru/infomaximum/infomaximum-clickhouse:25.8.2.29
command: ["sh", "-c", "chown -R 101:101 /var/lib/clickhouse /var/log/clickhouse-server"]
securityContext:
runAsUser: 0
volumeMounts:
- name: data
mountPath: /var/lib/clickhouse
- name: log
mountPath: /var/log/clickhouse-server
containers:
- name: clickhouse
image: registry.infomaximum.ru/infomaximum/infomaximum-clickhouse:25.8.2.29
imagePullPolicy: IfNotPresent
env:
- name: APP_USER_ACCESS_MANAGEMENT
value: "1"
ports:
- { name: http, containerPort: 8123 }
volumeMounts:
- name: data
mountPath: /var/lib/clickhouse
- name: log
mountPath: /var/log/clickhouse-server
- name: secrets
mountPath: /run/secrets
readOnly: true
readinessProbe:
httpGet: { path: /ping, port: 8123 }
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet: { path: /ping, port: 8123 }
initialDelaySeconds: 30
periodSeconds: 15
resources:
requests: { cpu: "250m", memory: "512Mi" }
limits: { memory: "4Gi" }
volumes:
- name: secrets
projected:
sources:
- secret:
name: infomaximum-app-user
optional: true
- secret:
name: infomaximum-app-user-password-hash
optional: true
volumeClaimTemplates:
- metadata:
name: data
labels:
app: clickhouse
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 200Gi
- metadata:
name: log
labels:
app: clickhouse
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
Применение
Выполняйте команды из каталога, в котором находятся созданные YAML-файлы и файлы секретов. Сначала создайте пространство имен и секреты, затем примените манифесты приложения и ClickHouse; после развертывания проверьте состояние ресурсов и журналы приложения.
kubectl apply -f namespace.yaml
# Предварительно нужно создать файлы секретов
# внешний секрет №1 - имя пользователя
kubectl -n infomaximum create secret generic infomaximum-app-user \
--from-file=infomaximum_app_user=infomaximum_app_user.secret
# внешний секрет №2 - sha256 хэш пароля
kubectl -n infomaximum create secret generic infomaximum-app-user-password-hash \
--from-file=infomaximum_app_user_password_hash=infomaximum_app_user_password_hash.secret
# Развертывание
kubectl apply -f infomaximum-app.yaml
kubectl apply -f clickhouse.yaml
# Проверка статуса развертывания
kubectl -n infomaximum get pods
kubectl -n infomaximum get services
kubectl -n infomaximum get deployment
# Проверка логов
kubectl -n infomaximum logs -f deployment/infomaximum-app
Была ли статья полезна?