Files
MessageGateway/kubernetes.yaml
Sergey Antropov b1e2f7fd22 Обновлен Kubernetes манифест с новыми возможностями
- Добавлена поддержка MAX/VK мессенджера (MAX_ACCESS_TOKEN, MAX_API_VERSION, MAX_ENABLED)
- Добавлена переменная TELEGRAM_ENABLED для управления Telegram
- Добавлена переменная DEFAULT_MESSENGER для выбора мессенджера по умолчанию
- Заменен GROUPS_ADMIN_PASSWORD на API_KEY для авторизации
- Обновлен формат groups.json в ConfigMap с поддержкой мессенджеров
- Исправлены health check endpoints (оба используют /api/v1/health)
- Улучшена структура секретов с комментариями

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-11-12 20:29:59 +03:00

411 lines
14 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
apiVersion: v1
kind: Namespace
metadata:
name: message-gateway
---
apiVersion: v1
kind: Secret
metadata:
name: message-gateway-secret
namespace: message-gateway
type: Opaque
stringData:
# Telegram настройки
telegram_bot_token: "" # Установите токен через kubectl create secret или SealedSecret
telegram_enabled: "true" # Включить Telegram (true/false)
# MAX/VK настройки
max_access_token: "" # Access Token для MAX/VK (опционально)
max_api_version: "5.131" # Версия API MAX/VK
max_enabled: "false" # Включить MAX/VK (true/false)
# Общие настройки мессенджеров
default_messenger: "telegram" # Мессенджер по умолчанию (telegram/max)
# API ключ для авторизации
api_key: "" # API ключ для авторизации (обязательно для управления группами)
# Prometheus Pushgateway настройки
pushgateway_url: "" # URL Pushgateway (опционально)
pushgateway_job: "MessageGateway"
# Grafana настройки
grafana_url: "" # URL Grafana (опционально)
# Zabbix настройки
zabbix_url: "" # URL Zabbix (опционально)
# Kubernetes кластер настройки
k8s_cluster_grafana_subdomain: "" # Поддомен Grafana для K8S кластеров (опционально)
k8s_cluster_prometheus_subdomain: "" # Поддомен Prometheus для K8S кластеров (опционально)
k8s_cluster_alertmanager_subdomain: "" # Поддомен AlertManager для K8S кластеров (опционально)
# OpenTelemetry настройки
otel_enabled: "false" # Включить OpenTelemetry (true/false)
otel_service_name: "monitoring-message-gateway"
otel_exporter_otlp_endpoint: "" # Endpoint OpenTelemetry (опционально)
otel_exporter_otlp_protocol: "http/json"
otel_traces_exporter: "otlp_proto_http"
otel_exporter_otlp_insecure: "true"
otel_python_log_correlation: "false"
# Jira настройки
jira_enabled: "false" # Включить интеграцию с Jira (true/false)
jira_url: "" # URL Jira (опционально)
jira_email: "" # Email пользователя Jira (опционально)
jira_api_token: "" # API Token Jira (опционально)
jira_project_key: "" # Ключ проекта Jira (опционально)
jira_default_assignee: "" # Email или accountId исполнителя по умолчанию (опционально)
jira_default_issue_type: "Bug" # Тип задачи по умолчанию
jira_create_on_alert: "true" # Создавать тикет при алерте (true/false)
jira_create_on_resolved: "false" # Создавать тикет при resolved (true/false)
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: message-gateway
namespace: message-gateway
labels:
app: message-gateway
spec:
replicas: 1
selector:
matchLabels:
app: message-gateway
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
name: message-gateway
labels:
app: message-gateway
spec:
imagePullSecrets:
- name: cismharbor
nodeSelector:
gpushare: "false" # Нода с ГПУ (false/true)
nodestate: "working" # Состояние ноды (working/new)
containers:
- name: message-gateway
image: hub.cism-ms.ru/library/message-gateway:v0.2.0
imagePullPolicy: "Always"
ports:
- containerPort: 8000
env:
# Telegram настройки
- name: TELEGRAM_BOT_TOKEN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: telegram_bot_token
- name: TELEGRAM_ENABLED
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: telegram_enabled
optional: true
# MAX/VK настройки
- name: MAX_ACCESS_TOKEN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: max_access_token
optional: true
- name: MAX_API_VERSION
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: max_api_version
optional: true
- name: MAX_ENABLED
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: max_enabled
optional: true
# Общие настройки мессенджеров
- name: DEFAULT_MESSENGER
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: default_messenger
optional: true
# API ключ для авторизации
- name: API_KEY
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: api_key
optional: true
# Grafana настройки
- name: GRAFANA_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: grafana_url
optional: true
# Zabbix настройки
- name: ZABBIX_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: zabbix_url
optional: true
# Kubernetes кластер настройки
- name: K8S_CLUSTER_GRAFANA_SUBDOMAIN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: k8s_cluster_grafana_subdomain
optional: true
- name: K8S_CLUSTER_PROMETHEUS_SUBDOMAIN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: k8s_cluster_prometheus_subdomain
optional: true
- name: K8S_CLUSTER_ALERTMANAGER_SUBDOMAIN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: k8s_cluster_alertmanager_subdomain
optional: true
# Prometheus Pushgateway настройки
- name: PUSHGATEWAY_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: pushgateway_url
optional: true
- name: PUSHGATEWAY_JOB
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: pushgateway_job
optional: true
# OpenTelemetry настройки
- name: OTEL_ENABLED
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_enabled
optional: true
- name: OTEL_SERVICE_NAME
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_service_name
optional: true
- name: OTEL_EXPORTER_OTLP_ENDPOINT
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_exporter_otlp_endpoint
optional: true
- name: OTEL_EXPORTER_OTLP_PROTOCOL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_exporter_otlp_protocol
optional: true
- name: OTEL_TRACES_EXPORTER
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_traces_exporter
optional: true
- name: OTEL_EXPORTER_OTLP_INSECURE
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_exporter_otlp_insecure
optional: true
- name: OTEL_PYTHON_LOG_CORRELATION
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: otel_python_log_correlation
optional: true
# Jira настройки
- name: JIRA_ENABLED
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_enabled
optional: true
- name: JIRA_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_url
optional: true
- name: JIRA_EMAIL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_email
optional: true
- name: JIRA_API_TOKEN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_api_token
optional: true
- name: JIRA_PROJECT_KEY
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_project_key
optional: true
- name: JIRA_DEFAULT_ASSIGNEE
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_default_assignee
optional: true
- name: JIRA_DEFAULT_ISSUE_TYPE
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_default_issue_type
optional: true
- name: JIRA_CREATE_ON_ALERT
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_create_on_alert
optional: true
- name: JIRA_CREATE_ON_RESOLVED
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: jira_create_on_resolved
optional: true
# Liveness проба
livenessProbe:
httpGet:
path: /api/v1/health
port: 8000
initialDelaySeconds: 15
periodSeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
# Readiness проба
readinessProbe:
httpGet:
path: /api/v1/health
port: 8000
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
volumeMounts:
- name: groups-conf
mountPath: /app/config/groups.json
subPath: groups.json
readOnly: true
- name: jira-mapping-conf
mountPath: /app/config/jira_mapping.json
subPath: jira_mapping.json
readOnly: true
volumes:
- name: groups-conf
configMap:
name: message-gateway-groups-configmap
- name: jira-mapping-conf
configMap:
name: message-gateway-jira-mapping-configmap
optional: true
---
apiVersion: v1
kind: ConfigMap
metadata:
name: message-gateway-groups-configmap
namespace: message-gateway
data:
groups.json: |
{
"kubernetes": {
"messenger": "telegram",
"chat_id": -1002108349725,
"thread_id": 0,
"config": {}
},
"monitoring": {
"messenger": "telegram",
"chat_id": -1001997464975,
"thread_id": 0,
"config": {}
},
"oldmonitoring": {
"messenger": "telegram",
"chat_id": -1001469966749,
"thread_id": 0,
"config": {}
}
}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: message-gateway-jira-mapping-configmap
namespace: message-gateway
data:
jira_mapping.json: |
{
"alertmanager": {
"default_project": "MON",
"mappings": []
},
"grafana": {
"default_project": "MON",
"mappings": []
},
"zabbix": {
"default_project": "MON",
"mappings": []
}
}
---
apiVersion: v1
kind: Service
metadata:
name: message-gateway-service
namespace: message-gateway
labels:
app: message-gateway
spec:
type: ClusterIP
selector:
app: message-gateway
ports:
- protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: message-gateway-ingress
namespace: message-gateway
spec:
tls:
- hosts:
- monitoring.cism-ms.ru
secretName: ru-cism-kube-certs
rules:
- host: "monitoring.cism-ms.ru"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: message-gateway-service
port:
number: 8000