- Добавлена поддержка 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
411 lines
14 KiB
YAML
411 lines
14 KiB
YAML
---
|
||
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
|