social · 平台社交服务
social 是 platform 类目下的一个微服务,镜像来自 ghcr.io/yldm-tech/social,对外暴露 HTTP 8080 端口并提供 /health/live、/health/ready、/metrics 端点。从配置看它把业务数据落在 MySQL(库名默认 yldm_social),用 Redis 做缓存(REDIS_DB 默认 9)与发布订阅(独立的 REDIS_PUBSUB_DB,前缀 yldm:social,死信队列键 yldm:social:deadletter),并通过 Consul 做服务注册;签发逻辑带 JWT(JWT_SECRET / JWT_EXPIRES_IN / JWT_REFRESH_EXPIRES_IN)。镜像 tag 由 argocd-image-updater 按 semver 写回 kustomization,不要手动钉版本。
部署形态
- Name
- 命名空间
- Description
- platform(kustomization 设
namespace: platform、namePrefix: platform-,故活动对象名为platform-social-*)
- Name
- 工作负载
- Description
- Deployment
- Name
- 镜像 / 版本
- Description
- ghcr.io/yldm-tech/social:2.3.1(kustomization
images:写回目标)
- Name
- 副本数
- Description
- 2(kustomization
replicas:与 deploymentreplicas均为 2);HPA 在 2–5 间伸缩
- Name
- 滚动策略
- Description
maxUnavailable: 0、maxSurge: 1,更新期间不减少可用副本
- Name
- 调度
- Description
nodeSelector: workload=app(worker2 / worker4 两节点);priorityClassName: production-medium;按app=social标签做主机级podAntiAffinity(preferred,topologyKeykubernetes.io/hostname)
- Name
- 端口
- Description
- 容器 8080,命名
http
- Name
- 资源
- Description
- requests cpu 50m / memory 64Mi,limits cpu 200m / memory 256Mi
- Name
- 健康检查
- Description
- liveness
GET /health/live(initialDelay 20s,period 10s);readinessGET /health/ready(initialDelay 15s,period 5s,timeout 5s)
- Name
- 存储
- Description
- 无 PVC,配置以 ConfigMap 卷只读挂载
配置与依赖
容器以 CONFIG_FILE=configs/services/social.yaml 读取配置,该文件来自 social-config ConfigMap,挂载到 /root/configs/services/social.yaml(subPath);另有一个集群共享的 base-config ConfigMap 只读挂载到 /root/configs/base。social.yaml 继承 base 的 production.yaml 并覆盖少量字段:database.database 取 ${DB_NAME:yldm_social}、redis.db 取 ${REDIS_DB:9}、tracing.service_name 为 yldm-social、pubsub 前缀 yldm:social 且发布订阅走 ${REDIS_PUBSUB_DB:1}、死信键 yldm:social:deadletter。kustomization 通过 reloader.stakater.com/auto: "true" 注解让 reloader 在 ConfigMap/Secret 变更时自动滚动 Deployment。
运行环境固定为生产:ENV / ENVIRONMENT 为 production,SERVER_MODE=release,SWAGGER_AUTO_GEN=false,SERVER_PORT=8080,SERVER_NAME=social。服务注册开启 Consul:CONSUL_ENABLED=true、CONSUL_ADDR=consul.consul.svc.cluster.local:8500。
所有密钥来自 ExternalSecret social-db-secret(ClusterSecretStore vault-backend,刷新间隔 1h),合成同名 Secret 后被 deployment 以 secretKeyRef 注入。注释说明这里特意用服务独立的 Secret 实现数据库凭证隔离:
来源 Vault 路径 (remoteRef.key) | 注入的键 |
|---|---|
yldm/production/social | db_host/port/name/user/password、redis_host/port/password/db/pubsub_db、jwt_secret/expires_in/refresh_expires_in |
yldm/database | DB_ADMIN_USER、DB_ADMIN_PASSWORD(共享数据库管理员凭据) |
注意 remoteRef.key 省略了 secret/ 挂载前缀(store 会自动补上);用 vault CLI 写值时要带前缀,如 vault kv put secret/yldm/production/social ...。
访问与监控
Service 为默认 ClusterIP social,对外端口 8089 映射到容器 8080(命名 http),仅集群内访问,没有 Ingress。
ServiceMonitor social 按 app=social 选中 Service,每 30s 抓 http 端口的 /metrics,并把 pod / namespace / service 标签 relabel 进来。PrometheusRule social(组 social.rules,间隔 30s)覆盖了一组告警:SocialPodDown(up == 0 持续 1m,critical)、SocialInsufficientPods(运行 pod < 1 持续 2m,critical)、SocialHighErrorRate(5xx 占比 >3% warning / >5% critical)、SocialHighLatency(P95 >0.5s warning / >1s critical)、SocialPodRestarting(15m 重启率 >0.05 warning)、SocialHighCPU 与 SocialHighMemory(相对 limit 用量 >80% 持续 10m,warning)。
伸缩与可用性方面:HPA social-hpa 以 CPU 70% / 内存 80% 为目标在 2–5 副本间扩缩;VPA social-vpa 为 updateMode: "Off"(仅给建议,不自动改资源),区间 cpu 25m–500m、memory 32Mi–512Mi;PDB social 设 maxUnavailable: 1,保证节点排空时至少留一个副本。
返回 platform 总览