Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
340
kubernetes.yaml
Normal file
340
kubernetes.yaml
Normal file
@@ -0,0 +1,340 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user