Files
MessageGateway/kubernetes.yaml
Sergey Antropov b90def35ed Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

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

341 lines
11 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_bot_token: "" # Установите токен через kubectl create secret или SealedSecret
pushgateway_url: "" # URL Pushgateway (опционально)
pushgateway_job: "MessageGateway"
grafana_url: "" # URL Grafana (опционально)
zabbix_url: "" # URL Zabbix (опционально)
k8s_cluster_grafana_subdomain: "" # Поддомен Grafana для K8S кластеров (опционально)
k8s_cluster_prometheus_subdomain: "" # Поддомен Prometheus для K8S кластеров (опционально)
k8s_cluster_alertmanager_subdomain: "" # Поддомен AlertManager для K8S кластеров (опционально)
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"
groups_admin_password: "" # Пароль для управления группами (опционально)
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 исполнителя по умолчанию (опционально)
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:
- name: TELEGRAM_BOT_TOKEN
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: telegram_bot_token
- name: GRAFANA_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: grafana_url
optional: true
- name: ZABBIX_URL
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: zabbix_url
optional: true
- 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
- 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
- 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
- name: GROUPS_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: message-gateway-secret
key: groups_admin_password
optional: true
- 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/ready
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": -1002108349725,
"monitoring": -1001997464975,
"oldmonitoring": -1001469966749
}
---
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