feat(database): dragonfly-operator в ns database #13

Merged
grachevko merged 1 commits from feat/dragonfly-operator into main 2026-09-17 23:07:18 +00:00
Collaborator

Одна задача = один MR: поднимается ТОЛЬКО оператор Dragonfly. Экземпляр БД (Dragonfly CR) поедет вместе с тем приложением, которому он нужен — то есть с searxng и в его ns (правило: CR живёт там, где он требуется; стираешь ns — стирается и то, что он требовал).

Что сделано

  • kubernetes/apps/database/namespace.yaml — ns database.
  • kubernetes/apps/database/kustomization.yaml — ns-каталог по образцу ai/security: namespace: database, компонент sops, ресурсы.
  • kubernetes/apps/database/dragonfly-operator/ks.yaml — Flux Kustomization с wait: true и healthChecks на HelmRelease: на неё будут ссылаться через dependsOn те Kustomization, которые создают Dragonfly CR, поэтому Ready должен означать «оператор реально поднялся», а не «манифесты применены».
  • kubernetes/apps/database/dragonfly-operator/app/kustomization.yaml, ocirepository.yaml, helmrelease.yaml.

Источник и почему он

  • Официальный чарт: oci://ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator, тег v1.6.1Chart.yaml и version, и appVersion записаны с префиксом v).
  • У bjw-s-labs есть репак того же оператора поверх app-template (ghcr.io/bjw-s-labs/charts/dragonfly-operator, 88 репозиториев по kubesearch против 9 у официального), но по нашей конвенции исключение — официальный и поддерживаемый чарт, и здесь он выигрывает не только формально: CRD идут шаблоном templates/crds.yaml (то есть обновляются вместе с релизом, а не только при установке), есть crds.install/crds.keep, и метку control-plane: controller-manager, без которой оператор не может выбрать primary, чарт ставит сам — в app-template-варианте её приходится добавлять руками (видно в auricom/home-ops).

Values

  • crds.install: true, crds.keep: true — при удалении релиза CRD остаются, иначе вместе с ними уехали бы все Dragonfly CR.
  • rbacProxy.enabled: false — метрики отдаются напрямую на :8080, второй контейнер (kube-rbac-proxy из quay) не нужен.
  • serviceMonitor.enabled: false, grafanaDashboard.enabled: false — Prometheus Operator в кластере нет, включённые чартом по умолчанию они бы уронили релиз на отсутствующих CRD.
  • Образ: дефолт чарта — docker.dragonflydb.io/dragonflydb/operator; берём тот же образ из ghcr и фиксируем дайджестом v1.6.1@sha256:b11411142935f92ed0ec30a5ddeb31680e09ab66beecb827cb0224f1c4238638.
  • manager.resources — requests 10m/128Mi, limits 256Mi.

Проверено

  • kubectl kustomize kubernetes/apps/database — собирается (Namespace database, Secret из sops-компонента, Flux Kustomization с namespace: database).
  • kubectl kustomize kubernetes/apps/database/dragonfly-operator/app — HelmRelease с chartRef и OCIRepository с тегом v1.6.1.

Дальше

  • MR по searxng в ns ai (app-template, settings.yml + limiter.toml, ExternalSecret из Vault kv/search/searxng) и в том же MR — Dragonfly CR в ai с dependsOn: [{name: dragonfly-operator, namespace: database}].
Одна задача = один MR: поднимается ТОЛЬКО оператор Dragonfly. Экземпляр БД (`Dragonfly` CR) поедет вместе с тем приложением, которому он нужен — то есть с searxng и в его ns (правило: CR живёт там, где он требуется; стираешь ns — стирается и то, что он требовал). **Что сделано** - `kubernetes/apps/database/namespace.yaml` — ns `database`. - `kubernetes/apps/database/kustomization.yaml` — ns-каталог по образцу `ai`/`security`: `namespace: database`, компонент `sops`, ресурсы. - `kubernetes/apps/database/dragonfly-operator/ks.yaml` — Flux Kustomization с `wait: true` и `healthChecks` на HelmRelease: на неё будут ссылаться через `dependsOn` те Kustomization, которые создают Dragonfly CR, поэтому Ready должен означать «оператор реально поднялся», а не «манифесты применены». - `kubernetes/apps/database/dragonfly-operator/app/` — `kustomization.yaml`, `ocirepository.yaml`, `helmrelease.yaml`. **Источник и почему он** - Официальный чарт: `oci://ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator`, тег `v1.6.1` (в `Chart.yaml` и `version`, и `appVersion` записаны с префиксом `v`). - У bjw-s-labs есть репак того же оператора поверх app-template (`ghcr.io/bjw-s-labs/charts/dragonfly-operator`, 88 репозиториев по kubesearch против 9 у официального), но по нашей конвенции исключение — официальный и поддерживаемый чарт, и здесь он выигрывает не только формально: CRD идут шаблоном `templates/crds.yaml` (то есть обновляются вместе с релизом, а не только при установке), есть `crds.install`/`crds.keep`, и метку `control-plane: controller-manager`, без которой оператор не может выбрать primary, чарт ставит сам — в app-template-варианте её приходится добавлять руками (видно в auricom/home-ops). **Values** - `crds.install: true`, `crds.keep: true` — при удалении релиза CRD остаются, иначе вместе с ними уехали бы все Dragonfly CR. - `rbacProxy.enabled: false` — метрики отдаются напрямую на `:8080`, второй контейнер (kube-rbac-proxy из quay) не нужен. - `serviceMonitor.enabled: false`, `grafanaDashboard.enabled: false` — Prometheus Operator в кластере нет, включённые чартом по умолчанию они бы уронили релиз на отсутствующих CRD. - Образ: дефолт чарта — `docker.dragonflydb.io/dragonflydb/operator`; берём тот же образ из ghcr и фиксируем дайджестом `v1.6.1@sha256:b11411142935f92ed0ec30a5ddeb31680e09ab66beecb827cb0224f1c4238638`. - `manager.resources` — requests 10m/128Mi, limits 256Mi. **Проверено** - `kubectl kustomize kubernetes/apps/database` — собирается (Namespace `database`, Secret из sops-компонента, Flux Kustomization с `namespace: database`). - `kubectl kustomize kubernetes/apps/database/dragonfly-operator/app` — HelmRelease с `chartRef` и OCIRepository с тегом `v1.6.1`. **Дальше** - MR по `searxng` в ns `ai` (app-template, `settings.yml` + `limiter.toml`, ExternalSecret из Vault `kv/search/searxng`) и в том же MR — Dragonfly CR в `ai` с `dependsOn: [{name: dragonfly-operator, namespace: database}]`.
hermes added 1 commit 2026-09-17 21:33:02 +00:00
feat(database): dragonfly-operator в ns database
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 6s
Flate / Flate (pull_request) Successful in 17s
0243dbfb9c
Официальный чарт oci://ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator v1.6.1.
CRD (dragonflydb.io) ставит сам чарт шаблоном templates/crds.yaml, crds.keep: true.
kube-rbac-proxy отключён (метрики на :8080), ServiceMonitor и дашборд Grafana не включаем
— Prometheus Operator в кластере нет. Образ взят из ghcr и зафиксирован дайджестом.
Dragonfly CR сюда не входит: экземпляр БД создаётся в ns того, кому он нужен.
grachevko merged commit 0243dbfb9c into main 2026-09-17 23:07:18 +00:00
grachevko deleted branch feat/dragonfly-operator 2026-09-17 23:07:19 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: grachevko/home-ops#13