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(name http),MEILI_HTTP_ADDR=0.0.0.0:7700
  • Name
    存储
    Description
    volumeClaimTemplates 申领 PVC data,100GiReadWriteOnce、storageClass local-path,挂载到 /meili_data(即 MEILI_DB_PATH)
  • Name
    资源
    Description
    requests cpu 100m / memory 256Mi,limits cpu 1000m / memory 2Gi

由于使用 volumeClaimTemplates,数据 PVC 与 StatefulSet 绑定;同时 storageClass 是 local-path(节点本地盘),数据天然钉在调度到的那台节点上,与 node-role=database 选择器一致。

配置与依赖

主密钥通过 ExternalSecret 从 Vault 拉取,不入 git:

  • Name
    ExternalSecret
    Description
    meilisearch-secret,ClusterSecretStore vault-backend,refreshInterval: 1h,creationPolicy: Owner
  • Name
    remoteRef.key
    Description
    meilisearch/config,取 property: master_key,写入 Secret 的 MEILI_MASTER_KEY

容器关键 env:

变量值/来源
MEILI_MASTER_KEY取自 Secret meilisearch-secretMEILI_MASTER_KEY
MEILI_ENVproduction
MEILI_DB_PATH/meili_data
MEILI_HTTP_ADDR0.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-manager letsencrypt-prod ClusterIssuer 签发(secret meilisearch-tls)

NetworkPolicy 方面,kustomization 当前只引入了 networkpolicies/allow-from-argo-workflows.yaml(放行 argo-workflows 命名空间的入站)。目录下另有 allow-from-app.yamlallow-from-platform.yamlallow-from-game.yamlallow-prometheus-scraping.yamlallow-dns-egress.yamlallow-same-namespace.yamldefault-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 服务总览

评论