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: platformnamePrefix: 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 写回 kustomization images: 块)
  • Name
    副本数
    Description
    2(kustomization replicas 与 Deployment replicas 均为 2)
  • Name
    调度
    Description
    nodeSelector: workload=app;priorityClassName: production-medium;podAntiAffinityapp=analytics + topologyKey: kubernetes.io/hostname 软反亲和(weight 100),尽量把两个副本分散到不同节点
  • Name
    端口
    Description
    容器端口 8080(name http),Service 对外 8089 转发到 targetPort 8080
  • Name
    资源
    Description
    requests cpu 50m / memory 64Mi,limits cpu 200m / memory 256Mi
  • Name
    健康探针
    Description
    livenessProbe GET /health/live(initialDelay 30s,period 10s);readinessProbe GET /health/ready(initialDelay 15s,period 5s,timeout 5s)
  • Name
    存储
    Description
    无 PVC;仅挂载两个 ConfigMap(base-config 挂到 /root/configs/base,analytics-configanalytics.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 keyVault remoteRef.keyproperty
DB_HOST / DB_PORT / DB_NAME / DB_USER / DB_PASSWORDyldm/production/analyticsdb_host / db_port / db_name / db_user / db_password
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DB / REDIS_PUBSUB_DByldm/production/analyticsredis_host / redis_port / redis_password / redis_db / redis_pubsub_db
JWT_SECRET / JWT_EXPIRES_IN / JWT_REFRESH_EXPIRES_INyldm/production/analyticsjwt_secret / jwt_expires_in / jwt_refresh_expires_in
DB_ADMIN_USER / DB_ADMIN_PASSWORDyldm/databaseuser / password

其余以明文 env 注入的关键项:ENV / ENVIRONMENT productionSERVER_MODE releaseCONFIG_FILE configs/services/analytics.yamlSWAGGER_AUTO_GEN falseSERVER_PORT 8080SERVER_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(仅给推荐不自动改),min cpu 25m / memory 32Mi,max cpu 500m / memory 512Mi
  • Name
    PDB
    Description
    有。maxUnavailable: 1,选择 app=analytics

返回 platform 服务总览

评论