Meilisearch · 集群内的全文搜索引擎
Meilisearch 是一个开源全文搜索引擎,在本集群中以单副本 StatefulSet 运行,对外通过 traefik Ingress 暴露 HTTP API,供 app/platform/game 以及 argo-workflows 调用进行索引和检索。
manifest 目录在 applications/data/meilisearch/,本组件没有 infrastructure/meilisearch/ 这样的拆分目录,全部资源都在 data 这一处。
部署形态
- Name
- 命名空间
- Description
meilisearch(独立 Namespace,带app.kubernetes.io/name: meilisearch标签)
- Name
- 工作负载类型
- Description
- StatefulSet
meilisearch,serviceName: meilisearch
- Name
- 镜像与版本
- Description
getmeili/meilisearch:v1.46
- Name
- 副本数
- Description
- 1(单副本)
- Name
- 调度
- Description
nodeSelector: node-role=database。按 CLAUDE.md,只有k8s-worker3带该标签,因此固定落在这台节点。
- Name
- 端口
- Description
- 容器
7700(namehttp),MEILI_HTTP_ADDR=0.0.0.0:7700
- Name
- 存储
- Description
volumeClaimTemplates申领 PVCdata,100Gi、ReadWriteOnce、storageClasslocal-path,挂载到/meili_data(即MEILI_DB_PATH)
- Name
- 资源
- Description
- requests
cpu 100m / memory 256Mi,limitscpu 1000m / memory 2Gi
由于使用 volumeClaimTemplates,数据 PVC 与 StatefulSet 绑定;同时 storageClass 是 local-path(节点本地盘),数据天然钉在调度到的那台节点上,与 node-role=database 选择器一致。
配置与依赖
主密钥通过 ExternalSecret 从 Vault 拉取,不入 git:
- Name
- ExternalSecret
- Description
meilisearch-secret,ClusterSecretStorevault-backend,refreshInterval: 1h,creationPolicy: Owner
- Name
- remoteRef.key
- Description
meilisearch/config,取property: master_key,写入 Secret 的MEILI_MASTER_KEY键
容器关键 env:
| 变量 | 值/来源 |
|---|---|
MEILI_MASTER_KEY | 取自 Secret meilisearch-secret 的 MEILI_MASTER_KEY |
MEILI_ENV | production |
MEILI_DB_PATH | /meili_data |
MEILI_HTTP_ADDR | 0.0.0.0:7700 |
命名空间级配额与限制:ResourceQuota meilisearch-quota(pods 10、requests.cpu 500m / memory 1Gi、limits.cpu 2 / memory 4Gi);LimitRange meilisearch-limits(容器 max cpu 1 / memory 2Gi,默认 request cpu 50m / memory 64Mi)。
本组件不依赖外部数据库,数据持久化完全靠自身的 /meili_data PVC。
访问与监控
- Name
- Service
- Description
meilisearch,类型ClusterIP,端口7700
- Name
- Ingress
- Description
- host
meilisearch.yldm.tech,ingressClassName: traefik,websecure 入口 + TLS,证书由 cert-managerletsencrypt-prodClusterIssuer 签发(secretmeilisearch-tls)
NetworkPolicy 方面,kustomization 当前只引入了 networkpolicies/allow-from-argo-workflows.yaml(放行 argo-workflows 命名空间的入站)。目录下另有 allow-from-app.yaml、allow-from-platform.yaml、allow-from-game.yaml、allow-prometheus-scraping.yaml、allow-dns-egress.yaml、allow-same-namespace.yaml、default-deny-ingress.yaml 等文件,但未被 kustomization 引用,因此不会下发到集群。
该应用没有 ServiceMonitor / PrometheusRule,也没有 HPA / VPA / PDB。
注意事项
按 CLAUDE.md,Meilisearch 的版本升级是踩过坑的:引擎会拒绝读取过旧的 on-disk 数据库,且不会自动迁移;无 dump 的原地升级只在 ≥v1.12 时可用,且必须逐个小版本步进。#968 那次把版本从 v1.11 直接跳到 v1.46,导致 crash-loop,最终靠清空(当时为空的)数据库解决。
这次升级和 metallb 的故障来自同一个 renovate PR(#968,一个 "minor & patch" 分组升级)。这类包在 renovate.json 里带 dependencyDashboardApproval;接受升级时要在同一个 PR 里同步移植上游 manifest 变更,或先迁移/清空数据,绝不能只合镜像 tag。
更普遍的规律是:Renovate / argocd-image-updater 只换镜像 tag,而自托管基础设施的版本升级往往是 breaking change,可能还需要 CRD、探针、env、配置或数据迁移配合,裸 tag 升级会让组件崩溃。
返回 data 服务总览