Compare commits
21 Commits
9633fe3a10
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 726b3ee544 | |||
| 13309b26e0 | |||
| eddc256bed | |||
| 52f821cbba | |||
| 0dbc2fff13 | |||
| 91ec83bc1c | |||
| 9fec1dae39 | |||
| e5626b7b2d | |||
| 8fb12a2176 | |||
| fe0c7067b6 | |||
| d0f0843774 | |||
| 81a5b207ac | |||
| e3d5970ae3 | |||
| 85f05c26cb | |||
| 68630eb773 | |||
| dad9cf2104 | |||
| 60886e8be2 | |||
| 4528321225 | |||
| b246a3dea1 | |||
| 4c59a2d2fe | |||
| fcc7b0d611 |
@@ -1,9 +1,6 @@
|
|||||||
name: deploy
|
name: deploy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
name: deploy
|
name: deploy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ traefik/dynamic/fileservers.yml
|
|||||||
traefik/dynamic/*.local.y*ml.*
|
traefik/dynamic/*.local.y*ml.*
|
||||||
traefik/dynamic/*.external.y*ml
|
traefik/dynamic/*.external.y*ml
|
||||||
traefik/k8s/fileservers.y*ml
|
traefik/k8s/fileservers.y*ml
|
||||||
|
traefik/k8s/aliasHeadersStrategy.md
|
||||||
|
|
||||||
traefik/logs/*
|
traefik/logs/*
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,12 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
app: checkmk
|
app: checkmk
|
||||||
ports:
|
ports:
|
||||||
- port: 5000
|
- name: web
|
||||||
|
port: 5000
|
||||||
targetPort: 5000
|
targetPort: 5000
|
||||||
|
- name: agent-receiver
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
---
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
@@ -34,7 +38,10 @@ spec:
|
|||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: checkmk-config
|
name: checkmk-config
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5000
|
- name: web
|
||||||
|
containerPort: 5000
|
||||||
|
- name: agent-receiver
|
||||||
|
containerPort: 8000
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: sites
|
- name: sites
|
||||||
mountPath: /omd/sites
|
mountPath: /omd/sites
|
||||||
|
|||||||
@@ -16,6 +16,22 @@ spec:
|
|||||||
certResolver: letsencrypt
|
certResolver: letsencrypt
|
||||||
---
|
---
|
||||||
apiVersion: traefik.io/v1alpha1
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRouteTCP
|
||||||
|
metadata:
|
||||||
|
name: checkmk-agent-receiver
|
||||||
|
namespace: checkmk
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
- checkmk-agent
|
||||||
|
routes:
|
||||||
|
- match: HostSNI(`*`)
|
||||||
|
services:
|
||||||
|
- name: checkmk-service
|
||||||
|
port: 8000
|
||||||
|
tls:
|
||||||
|
passthrough: true
|
||||||
|
---
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
kind: IngressRoute
|
kind: IngressRoute
|
||||||
metadata:
|
metadata:
|
||||||
name: checkmk-local
|
name: checkmk-local
|
||||||
|
|||||||
@@ -9,5 +9,6 @@ WEBINAR_CHECK_INTERVAL=60
|
|||||||
REDIS_HOST=redis
|
REDIS_HOST=redis
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
PLAYWRIGHT_WS=ws://playwright-service:3000/ws
|
PLAYWRIGHT_WS=ws://playwright-service:3000/ws
|
||||||
|
TZ=Europe/Kyiv
|
||||||
WEBINAR_TELEGRAM_TOKEN=your_telegram_bot_token_here
|
WEBINAR_TELEGRAM_TOKEN=your_telegram_bot_token_here
|
||||||
WEBINAR_ADMIN_ID=123456789
|
WEBINAR_ADMIN_ID=123456789
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: redis
|
name: redis
|
||||||
namespace: edu-master
|
namespace: edu-master
|
||||||
labels:
|
labels:
|
||||||
app: edu-master-redis
|
app: edu-master-redis
|
||||||
spec:
|
spec:
|
||||||
|
serviceName: redis
|
||||||
replicas: 1
|
replicas: 1
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
# Разовый Job для переноса состояния redis из docker compose в k8s (maintenance window).
|
# One-time Job to migrate redis state from docker compose to k8s (maintenance window).
|
||||||
# Файл .example -> deploy-пайплайн его не применяет (маска *.example.yaml).
|
# The .example file is not applied by the deploy pipeline (mask *.example.yaml).
|
||||||
#
|
#
|
||||||
# Runbook:
|
# Runbook:
|
||||||
# 1. docker compose -f <repo>/edu_master/compose.yaml stop # SIGTERM -> redis сбросит dump.rdb
|
# 1. docker compose -f <repo>/edu_master/compose.yaml stop # SIGTERM -> redis will flush dump.rdb
|
||||||
# 2. docker run --rm -v edu_master_redis-data:/data \
|
# 2. docker run --rm -v edu_master_redis-data:/data \
|
||||||
# -v /tmp/edu-master-backup:/backup \
|
# -v /tmp/edu-master-backup:/backup \
|
||||||
# redis:alpine sh -c "cp /data/dump.rdb /backup/ && ls -la /backup"
|
# redis:alpine sh -c "cp /data/dump.rdb /backup/ && ls -la /backup"
|
||||||
# 3. kubectl apply -f edu_master/k8s/namespace.yaml
|
# 3. kubectl apply -f edu_master/k8s/namespace.yaml
|
||||||
# 4. kubectl apply -f <только PVC из redis.yaml> # seed строго ДО старта redis-пода
|
# 4. kubectl apply -f <only the PVC from redis.yaml> # seed must come BEFORE redis pod starts
|
||||||
# 5. kubectl apply -f edu_master/k8s/restore-seed-job.yaml.example
|
# 5. kubectl apply -f edu_master/k8s/restore-seed-job.yaml.example
|
||||||
# kubectl wait --for=condition=complete job/redis-restore-seed -n edu-master --timeout=120s
|
# kubectl wait --for=condition=complete job/redis-restore-seed -n edu-master --timeout=120s
|
||||||
# 6. kubectl delete job redis-restore-seed -n edu-master
|
# 6. kubectl delete job redis-restore-seed -n edu-master
|
||||||
# 7. kubectl apply -f edu_master/k8s/ -R # остальные манифесты
|
# 7. kubectl apply -f edu_master/k8s/ -R # apply remaining manifests
|
||||||
apiVersion: batch/v1
|
apiVersion: batch/v1
|
||||||
kind: Job
|
kind: Job
|
||||||
metadata:
|
metadata:
|
||||||
@@ -47,4 +47,4 @@ spec:
|
|||||||
- name: backup
|
- name: backup
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /tmp/edu-master-backup
|
path: /tmp/edu-master-backup
|
||||||
type: DirectoryOrCreate
|
type: DirectoryOrCreate
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ metadata:
|
|||||||
namespace: edu-master
|
namespace: edu-master
|
||||||
type: Opaque
|
type: Opaque
|
||||||
stringData:
|
stringData:
|
||||||
# PHPSESSID keeper
|
# Session keeper credentials
|
||||||
KEEPER_LOGIN: ""
|
KEEPER_LOGIN: ""
|
||||||
KEEPER_PASSWORD: ""
|
KEEPER_PASSWORD: ""
|
||||||
KEEPER_INTERVAL: "10"
|
KEEPER_INTERVAL: "10"
|
||||||
@@ -23,4 +23,5 @@ stringData:
|
|||||||
WEBINAR_CHECK_INTERVAL: "60"
|
WEBINAR_CHECK_INTERVAL: "60"
|
||||||
# Database
|
# Database
|
||||||
REDIS_HOST: "redis"
|
REDIS_HOST: "redis"
|
||||||
REDIS_PORT: "6379"
|
REDIS_PORT: "6379"
|
||||||
|
TZ: "Europe/Kyiv"
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
app: edu-master-webinar-checker
|
app: edu-master-webinar-checker
|
||||||
spec:
|
spec:
|
||||||
|
# Enforces dependency order like compose depends_on:
|
||||||
|
# redis healthy -> session-keeper healthy (EXISTS EDU_PHPSESSID) -> playwright started
|
||||||
initContainers:
|
initContainers:
|
||||||
# Держит порядок зависимостей как в compose depends_on:
|
|
||||||
# redis healthy -> session-keeper healthy (EXISTS EDU_PHPSESSID) -> playwright started
|
|
||||||
- name: wait-deps
|
- name: wait-deps
|
||||||
image: redis:alpine
|
image: redis:alpine
|
||||||
command:
|
command:
|
||||||
@@ -50,6 +50,9 @@ spec:
|
|||||||
envFrom:
|
envFrom:
|
||||||
- secretRef:
|
- secretRef:
|
||||||
name: edu-master-secrets
|
name: edu-master-secrets
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
value: "Europe/Kyiv"
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 25m
|
cpu: 25m
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ hostNetwork: false
|
|||||||
image:
|
image:
|
||||||
registry: docker.io/library
|
registry: docker.io/library
|
||||||
repository: traefik
|
repository: traefik
|
||||||
tag: v3.7.6
|
tag: v3.7.13
|
||||||
|
|
||||||
securityContext:
|
securityContext:
|
||||||
capabilities:
|
capabilities:
|
||||||
@@ -44,6 +44,7 @@ ports:
|
|||||||
web:
|
web:
|
||||||
port: 80
|
port: 80
|
||||||
http:
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
redirections:
|
redirections:
|
||||||
entryPoint:
|
entryPoint:
|
||||||
to: websecure
|
to: websecure
|
||||||
@@ -52,32 +53,54 @@ ports:
|
|||||||
websecure:
|
websecure:
|
||||||
port: 443
|
port: 443
|
||||||
http:
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
tls:
|
tls:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
traefik:
|
||||||
|
port: 8080
|
||||||
|
exposedPort: 8080
|
||||||
|
protocol: TCP
|
||||||
|
expose:
|
||||||
|
default: false
|
||||||
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
ssh:
|
ssh:
|
||||||
port: 2221
|
port: 2221
|
||||||
exposedPort: 2221
|
exposedPort: 2221
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
expose:
|
expose:
|
||||||
default: true
|
default: true
|
||||||
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
minecraft-tcp:
|
minecraft-tcp:
|
||||||
port: 25565
|
port: 25565
|
||||||
exposedPort: 25565
|
exposedPort: 25565
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
expose:
|
expose:
|
||||||
default: true
|
default: true
|
||||||
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
minecraft-udp:
|
minecraft-udp:
|
||||||
port: 19132
|
port: 19132
|
||||||
exposedPort: 19132
|
exposedPort: 19132
|
||||||
protocol: UDP
|
protocol: UDP
|
||||||
expose:
|
expose:
|
||||||
default: true
|
default: true
|
||||||
|
checkmk-agent:
|
||||||
|
port: 8000
|
||||||
|
protocol: TCP
|
||||||
|
expose:
|
||||||
|
default: true
|
||||||
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
metrics:
|
metrics:
|
||||||
port: 9100
|
port: 9100
|
||||||
exposedPort: 9100
|
exposedPort: 9100
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
expose:
|
expose:
|
||||||
default: false
|
default: false
|
||||||
|
http:
|
||||||
|
aliasHeadersStrategy: delete
|
||||||
|
|
||||||
metrics:
|
metrics:
|
||||||
prometheus:
|
prometheus:
|
||||||
@@ -122,11 +145,6 @@ additionalArguments:
|
|||||||
- "--providers.file.directory=/etc/traefik/dynamic"
|
- "--providers.file.directory=/etc/traefik/dynamic"
|
||||||
- "--providers.file.watch=true"
|
- "--providers.file.watch=true"
|
||||||
- "--providers.kubernetesCRD.allowCrossNamespace=true"
|
- "--providers.kubernetesCRD.allowCrossNamespace=true"
|
||||||
|
- "--providers.kubernetesCRD.safeNaming=false"
|
||||||
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
|
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
|
||||||
- "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
|
- "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22,192.168.1.1,192.168.1.0/24,192.168.88.0/24,192.168.88.1"
|
||||||
|
|
||||||
log:
|
|
||||||
level: INFO
|
|
||||||
accessLog:
|
|
||||||
enabled: true
|
|
||||||
format: common
|
|
||||||
|
|||||||
Reference in New Issue
Block a user