feat: migrate PG/MinIO to external VM 202 #188

Merged
claude merged 1 commits from feat/vm-migration into main 2026-02-20 10:54:43 +01:00
Owner

Summary

  • Delete PG/MinIO StatefulSets from K8s (6 files removed)
  • NetworkPolicy: ipBlock 185.47.204.228/32 instead of podSelector
  • Secrets: VM PG+MinIO credentials
  • Values: VM IP, per-env DB names, increased resources for CPU-intensive workload
  • Seed v3: targeting VM databases
  • Prod HPA: 1-5 replicas, CPU 1-4, mem 1Gi-4Gi
## Summary - Delete PG/MinIO StatefulSets from K8s (6 files removed) - NetworkPolicy: ipBlock 185.47.204.228/32 instead of podSelector - Secrets: VM PG+MinIO credentials - Values: VM IP, per-env DB names, increased resources for CPU-intensive workload - Seed v3: targeting VM databases - Prod HPA: 1-5 replicas, CPU 1-4, mem 1Gi-4Gi
claude added 1 commit 2026-02-20 10:44:17 +01:00
feat: move PG/MinIO to external VM, update all manifests
All checks were successful
AI Review / AI Code Review (pull_request) Successful in 2s
PR Checks / Validate & Security Scan (pull_request) Successful in 9s
67b69c31d5
- Delete postgresql.yaml and minio.yaml (6 files) — stateful pods removed
- NetworkPolicy: replace podSelector with ipBlock 185.47.204.228/32
- Secrets: update credentials for VM PostgreSQL and MinIO
- Values: point DB_HOST/MINIO_ENDPOINT to VM, increase resources for CPU-intensive workload
- Seed jobs: v3 targeting VM databases (reports_dev/staging/prod)
- Prod: HPA 1-5 replicas, CPU req 1/lim 4, mem req 1Gi/lim 4Gi

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Owner

AI Code Review

Обзор PR: Миграция PG/MinIO на внешнюю VM

Критические проблемы

1. Утечка credentials в networkpolicy.yaml

  • Hardcoded IP 185.47.204.228/32 в NetworkPolicy — это система управления (VM 202). Должна быть в ConfigMap или Secret, синхронизирована через OpenBao.
  • Потребует пересоздания всех 3 NP при смене VM.

2. Отсутствие health checks

  • Seed job не имеет livenessProbe / readinessProbe. Долгая вставка (50 батчей × 100k строк) может привести к kill контейнера.
  • Нужен timeoutSeconds или увеличение activeDeadlineSeconds в Job spec.

3. DNS resolution для external host

  • Удалены DNS egress policies для PG/MinIO. Но seed job использует hardcoded IP — это ok.
  • Однако: если приложение будет использовать DNS-имя VM (например, pg.vm202.internal), текущий NetworkPolicy заблокирует порт 53 → DNS timeout.
  • Рекомендация: добавить DNS egress явно для safety.
# Seed Job DNS egress (к external VM, если потребуется)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-seed-dns-external
  namespace: dev
spec:
  podSelector:
    matchLabels:
      app: report-generator-seed
  policyTypes: [Egress]
  egress:
    - to:
        - namespaceSelector: {}
      ports:
        - port: 53
          protocol: UDP
        - port: 53
          protocol: TCP

4. Database credentials в plain stringData

  • secrets.yaml хранит пароли в Git (даже в stringData). Должны быть injected от OpenBao в CI/CD.
  • Staging/Prod имеют разные credentials → риск смешивания окружений.

5. Resource requests для seed job отсутствуют

  • Job с 5М вставок × 50 батчей может требовать >1Gi памяти → OOMKilled.
  • Добавить:
resources:
  requests:
    cpu: 500m
    memory: 2Gi
  limits:
    cpu: "1"
    memory: 4Gi

Замечания

  • Версии образов: PostgreSQL 17.6.0-debian-12-r0 (нет :latest) — хорошо.
  • Pod Security Standards: securityContext с runAsNonRoot: true, allowPrivilegeEscalation: false — соответствует restricted.
  • Prod HPA: 1-5 replicas, CPU 1-4 — адекватно для CPU-intensive.
  • Seed job versioning: v2 → v3 — помогает отслеживанию, но нужна стратегия очистки старых Job.

Действия перед merge

  1. Перенести IP в ConfigMap/Secret, синхронизировать с OpenBao
  2. Добавить DNS egress для seed job
  3. Injected credentials (не Git)
  4. Добавить resource requests/limits в seed job
  5. Документировать VM202 IP в /srv/server-manifest/state/ (или использовать service discovery)

Automated review by Claude Haiku | advisory, does not block merge

## AI Code Review # Обзор PR: Миграция PG/MinIO на внешнюю VM ## Критические проблемы **1. Утечка credentials в networkpolicy.yaml** - Hardcoded IP `185.47.204.228/32` в NetworkPolicy — это система управления (VM 202). Должна быть в ConfigMap или Secret, синхронизирована через OpenBao. - Потребует пересоздания всех 3 NP при смене VM. **2. Отсутствие health checks** - Seed job не имеет `livenessProbe` / `readinessProbe`. Долгая вставка (50 батчей × 100k строк) может привести к kill контейнера. - Нужен `timeoutSeconds` или увеличение `activeDeadlineSeconds` в Job spec. **3. DNS resolution для external host** - Удалены DNS egress policies для PG/MinIO. Но seed job использует hardcoded IP — это ok. - **Однако:** если приложение будет использовать DNS-имя VM (например, `pg.vm202.internal`), текущий NetworkPolicy заблокирует порт 53 → DNS timeout. - Рекомендация: добавить DNS egress явно для safety. ```yaml # Seed Job DNS egress (к external VM, если потребуется) apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-seed-dns-external namespace: dev spec: podSelector: matchLabels: app: report-generator-seed policyTypes: [Egress] egress: - to: - namespaceSelector: {} ports: - port: 53 protocol: UDP - port: 53 protocol: TCP ``` **4. Database credentials в plain stringData** - `secrets.yaml` хранит пароли в Git (даже в `stringData`). Должны быть injected от OpenBao в CI/CD. - Staging/Prod имеют разные credentials → риск смешивания окружений. **5. Resource requests для seed job отсутствуют** - Job с 5М вставок × 50 батчей может требовать >1Gi памяти → OOMKilled. - Добавить: ```yaml resources: requests: cpu: 500m memory: 2Gi limits: cpu: "1" memory: 4Gi ``` ## Замечания - **Версии образов:** PostgreSQL `17.6.0-debian-12-r0` (нет `:latest`) — хорошо. - **Pod Security Standards:** securityContext с `runAsNonRoot: true`, `allowPrivilegeEscalation: false` — соответствует restricted. - **Prod HPA:** 1-5 replicas, CPU 1-4 — адекватно для CPU-intensive. - **Seed job versioning:** v2 → v3 — помогает отслеживанию, но нужна стратегия очистки старых Job. ## Действия перед merge 1. Перенести IP в ConfigMap/Secret, синхронизировать с OpenBao 2. Добавить DNS egress для seed job 3. Injected credentials (не Git) 4. Добавить resource requests/limits в seed job 5. Документировать VM202 IP в `/srv/server-manifest/state/` (или использовать service discovery) --- _Automated review by Claude Haiku | advisory, does not block merge_
admin approved these changes 2026-02-20 10:54:18 +01:00
claude merged commit 1dc41e5fdc into main 2026-02-20 10:54:43 +01:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: claude/k8s-apps#188
No description provided.