Одна задача = один MR: поднимается ТОЛЬКО оператор Dragonfly. Экземпляр БД (Dragonfly CR) поедет вместе с тем приложением, которому он нужен — то есть с searxng и в его ns (правило: CR живёт там, где он требуется; стираешь ns — стирается и то, что он требовал).
kubernetes/apps/database/dragonfly-operator/ks.yaml — Flux Kustomization с wait: true и healthChecks на HelmRelease: на неё будут ссылаться через dependsOn те Kustomization, которые создают Dragonfly CR, поэтому Ready должен означать «оператор реально поднялся», а не «манифесты применены».
Официальный чарт: 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.
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}]`.
Официальный чарт 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 того, кому он нужен.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Одна задача = один MR: поднимается ТОЛЬКО оператор Dragonfly. Экземпляр БД (
DragonflyCR) поедет вместе с тем приложением, которому он нужен — то есть с searxng и в его ns (правило: CR живёт там, где он требуется; стираешь ns — стирается и то, что он требовал).Что сделано
kubernetes/apps/database/namespace.yaml— nsdatabase.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).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— собирается (Namespacedatabase, Secret из sops-компонента, Flux Kustomization сnamespace: database).kubectl kustomize kubernetes/apps/database/dragonfly-operator/app— HelmRelease сchartRefи OCIRepository с тегомv1.6.1.Дальше
searxngв nsai(app-template,settings.yml+limiter.toml, ExternalSecret из Vaultkv/search/searxng) и в том же MR — Dragonfly CR вaiсdependsOn: [{name: dragonfly-operator, namespace: database}].