analytics · platform 命名空间下的后端微服务
analytics 是运行在 platform 命名空间的一个 Go 后端微服务(镜像 ghcr.io/yldm-tech/analytics,容器以 SERVER_MODE=release 启动),监听 HTTP 8080,启动后向 Consul 注册自己,依赖独立的 PostgreSQL 数据库与 Redis。manifest 未暴露具体业务语义,以下只描述可从清单核实的技术事实。
manifest 中没有该服务的业务文档或 CLAUDE.md 专属踩坑段,因此本页只覆盖部署、配置与监控三部分。
部署形态
- Name
- 命名空间
- Description
- platform(kustomization 设置
namespace: platform与namePrefix: platform-,生成的资源名为platform-analytics-*)
- Name
- 工作负载
- Description
- Deployment,
revisionHistoryLimit: 2,滚动更新策略maxUnavailable: 0/maxSurge: 1
- Name
- 镜像与版本
- Description
ghcr.io/yldm-tech/analytics:2.3.1(tag 由 argocd-image-updater 按 semver 写回 kustomizationimages:块)
- Name
- 副本数
- Description
- 2(kustomization
replicas与 Deploymentreplicas均为 2)
- Name
- 调度
- Description
nodeSelector: workload=app;priorityClassName: production-medium;podAntiAffinity以app=analytics+topologyKey: kubernetes.io/hostname软反亲和(weight 100),尽量把两个副本分散到不同节点
- Name
- 端口
- Description
- 容器端口 8080(name
http),Service 对外 8089 转发到 targetPort 8080
- Name
- 资源
- Description
- requests
cpu 50m/memory 64Mi,limitscpu 200m/memory 256Mi
- Name
- 健康探针
- Description
- livenessProbe
GET /health/live(initialDelay 30s,period 10s);readinessProbeGET /health/ready(initialDelay 15s,period 5s,timeout 5s)
- Name
- 存储
- Description
- 无 PVC;仅挂载两个 ConfigMap(
base-config挂到/root/configs/base,analytics-config的analytics.yaml以 subPath 挂到/root/configs/services/analytics.yaml,均 readOnly)
Deployment 标注了 reloader.stakater.com/auto: "true",挂载的 ConfigMap/Secret 变更时由 Reloader 自动触发滚动重启。
配置与依赖
服务配置来自 ConfigMap analytics-config 里的 analytics.yaml,它继承 base/production.yaml 并覆盖特定字段:数据库名 ${DB_NAME:yldm_analytics}、Redis db ${REDIS_DB:5}、tracing service_name: yldm-analytics、pubsub 前缀 yldm:analytics(pubsub Redis db ${REDIS_PUBSUB_DB:1},死信键 yldm:analytics:deadletter)。
敏感配置通过 ExternalSecret analytics-db-secret 从 ClusterSecretStore vault-backend 拉取,生成同名 Secret(creationPolicy Owner,refreshInterval 1h),再以 secretKeyRef 注入容器环境变量,实现该服务数据库凭证的隔离。
| Secret key | Vault remoteRef.key | property |
|---|---|---|
| DB_HOST / DB_PORT / DB_NAME / DB_USER / DB_PASSWORD | yldm/production/analytics | db_host / db_port / db_name / db_user / db_password |
| REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DB / REDIS_PUBSUB_DB | yldm/production/analytics | redis_host / redis_port / redis_password / redis_db / redis_pubsub_db |
| JWT_SECRET / JWT_EXPIRES_IN / JWT_REFRESH_EXPIRES_IN | yldm/production/analytics | jwt_secret / jwt_expires_in / jwt_refresh_expires_in |
| DB_ADMIN_USER / DB_ADMIN_PASSWORD | yldm/database | user / password |
其余以明文 env 注入的关键项:ENV / ENVIRONMENT production、SERVER_MODE release、CONFIG_FILE configs/services/analytics.yaml、SWAGGER_AUTO_GEN false、SERVER_PORT 8080、SERVER_NAME analytics。Consul 服务注册开启:CONSUL_ENABLED true,CONSUL_ADDR consul.consul.svc.cluster.local:8500。
依赖小结:PostgreSQL(库 yldm_analytics,凭证走 yldm/production/analytics,管理员凭证走共享路径 yldm/database)、Redis(主库 db 5,pubsub 库 db 1)、Consul(服务注册)。镜像从 GHCR 拉取,使用 imagePullSecrets: ghcr-secret。
访问与监控
Service 为默认 ClusterIP 类型(未声明 type),端口 8089 → targetPort 8080,无 Ingress,仅集群内访问(并经 Consul 注册供服务发现)。
- Name
- ServiceMonitor
- Description
- 有。抓取
http端口的/metrics,interval 30s,通过 relabel 把 pod 名、namespace、app标签分别写入pod/namespace/service标签
- Name
- PrometheusRule
- Description
- 有(组
analytics.rules,interval 30s)。覆盖 Pod 掉线(AnalyticsPodDown)、副本不足(AnalyticsInsufficientPods)、HTTP 5xx 错误率(warning >3% / critical >5%)、P95 延迟(warning >0.5s / critical >1s)、频繁重启、CPU 与内存使用率 >80%
- Name
- HPA
- Description
- 有。
analytics-hpa,minReplicas 2 / maxReplicas 5,按 CPU 利用率 70% 与内存利用率 80% 伸缩
- Name
- VPA
- Description
- 有。
analytics-vpa,updateMode: Off(仅给推荐不自动改),mincpu 25m/memory 32Mi,maxcpu 500m/memory 512Mi
- Name
- PDB
- Description
- 有。
maxUnavailable: 1,选择app=analytics
返回 platform 服务总览