engagement · platform 微服务

engagement 运行在 platform 命名空间,是一个监听 :8080 的 HTTP 微服务,通过 yldm-services ApplicationSet 由 ArgoCD 同步,镜像由 argocd-image-updater 按 semver 策略写回 kustomization。

从 manifest 可确认的技术角色:它对外暴露 HTTP API,依赖独立的 MySQL 与 Redis,使用 JWT 做鉴权,向 Consul 注册自身,启用了基于 Redis 的 pubsub(含死信队列),并集成了 Linear。具体业务语义未在仓库中描述,本页只陈述可验证的技术事实。

部署形态

无状态 Deployment,2 副本,调度到带 workload: app 标签的节点;副本之间用软反亲和(podAntiAffinity preferred,topologyKey: kubernetes.io/hostname)尽量分散到不同主机。滚动更新采用 maxUnavailable: 0 / maxSurge: 1,先起新 Pod 再停旧 Pod。容器带 production-medium 优先级,并通过 Stakater Reloader 注解(reloader.stakater.com/auto: "true")在 ConfigMap/Secret 变更时自动重启。

  • Name
    命名空间
    Description
    platform(kustomization namePrefix: platform-)
  • Name
    工作负载
    Description
    Deployment,replicas 2,revisionHistoryLimit 2
  • Name
    镜像
    Description
    ghcr.io/yldm-tech/engagement:2.3.1(tag 由 argocd-image-updater 管理)
  • Name
    端口
    Description
    containerPort 8080,name http
  • Name
    调度
    Description
    nodeSelector workload: app;软反亲和按 hostname 分散
  • Name
    优先级
    Description
    priorityClassName production-medium
  • Name
    资源
    Description
    requests 50m / 64Mi,limits 200m / 256Mi
  • Name
    拉取凭证
    Description
    imagePullSecrets: ghcr-secret
  • Name
    存储
    Description
    无持久卷,仅挂载两个 ConfigMap(base-config、engagement-config)只读

健康探针:liveness GET /health/live(initialDelay 30s,period 10s),readiness GET /health/ready(initialDelay 15s,period 5s,timeout 5s),均打在 8080。

配置与依赖

容器以 CONFIG_FILE=configs/services/engagement.yaml 启动,运行模式为 production / release。配置分两层挂载:共享的 base-config 挂到 /root/configs/base,服务专属的 engagement-config(engagement.yaml)以 subPath 挂到 /root/configs/services/engagement.yaml。服务配置继承 base/production.yaml 并覆盖:数据库名默认 yldm_engagement、Redis 业务库 1、tracing service_name yldm-engagement、pubsub 前缀 yldm:engagement(独立 pubsub Redis 库,死信键 yldm:engagement:deadletter)。

外部服务依赖:配置中声明了对 user 服务的调用,默认 http://prod-user:80/api/v1/internal,通过 X-Service-Token 头鉴权,timeout 3s、cache_ttl 60s、stale_ttl 300s。运行时还向 Consul 注册:CONSUL_ENABLED=true,CONSUL_ADDR=consul.consul.svc.cluster.local:8500,服务名 engagement

密钥全部来自 ExternalSecret engagement-db-secret,经 ClusterSecretStore vault-backend(refresh 1h)从 Vault 拉取并以环境变量注入:

来源 Vault key注入的字段
yldm/production/engagementDB_HOST/PORT/NAME/USER/PASSWORD、REDIS_HOST/PORT/PASSWORD/DB/PUBSUB_DB、JWT_SECRET、JWT_EXPIRES_IN、JWT_REFRESH_EXPIRES_IN
yldm/databaseDB_ADMIN_USER、DB_ADMIN_PASSWORD
yldm/linearLINEAR_API_KEY、LINEAR_TEAM_ID、LINEAR_LABELS、LINEAR_PROJECTS

数据库凭证走服务独立的 Secret,实现凭证隔离。DB 与 Redis 的主机/端口/密码均由 Secret 注入,manifest 中不含明文。

访问与监控

集群内通过 Service platform-engagement(ClusterIP,默认类型)暴露:port 80 → targetPort 8080,name http。无 Ingress,仅供集群内访问。

  • Name
    Service
    Description
    ClusterIP,80 → 8080(http)
  • Name
    ServiceMonitor
    Description
    有,抓 http 端口 /metrics,interval 30s,relabel 出 pod/namespace/service 标签
  • Name
    PrometheusRule
    Description
    有,engagement.rules 共 8 条告警
  • Name
    HPA
    Description
    min 2 / max 5,CPU 70% 与 memory 80% 双指标
  • Name
    VPA
    Description
    updateMode Off(仅推荐),min 25m/32Mi,max 500m/512Mi
  • Name
    PDB
    Description
    maxUnavailable 1

PrometheusRule 覆盖:Pod 宕机(up == 0,critical)、副本不足、HTTP 5xx 错误率(warning >3% / critical >5%)、P95 延迟(warning >0.5s / critical >1s)、Pod 频繁重启、CPU 与内存使用超 limit 的 80%。告警依赖应用导出 http_requests_totalhttp_request_duration_seconds_bucket 指标。

返回 platform 总览

评论