media · platform 媒体与文件服务
media 是 platform 命名空间下的一个 Go 微服务(SERVER_NAME=media),通过统一的 production-services ApplicationSet 生成 Application platform-media,对外暴露 HTTP 8080,挂载文件上传相关配置(storage 段),并把自己注册到 Consul。它是无状态的 Deployment(文件落地依赖配置中的 storage.base_path,manifest 内未声明 PVC),按 CPU/内存自动伸缩。
部署形态
- Name
- 命名空间
- Description
- platform(kustomization 设
namespace: platform+namePrefix: platform-)
- Name
- 工作负载
- Description
- Deployment(
revisionHistoryLimit: 2,滚动更新maxUnavailable: 0/maxSurge: 1)
- Name
- 镜像
- Description
- ghcr.io/yldm-tech/media:2.3.1(tag 由 argocd-image-updater semver 写回,勿手动 pin)
- Name
- 副本数
- Description
- 2(kustomization
replicas与 deployment 均为 2,HPA 下限同样为 2)
- Name
- 调度
- Description
nodeSelector: workload=app;podAntiAffinity软反亲和(weight 100,按app=media打散到不同kubernetes.io/hostname)
- Name
- 优先级
- Description
- priorityClassName
production-medium(通过 kustomize patch 注入)
- Name
- 端口
- Description
- 容器
8080(name http);Service 以8090→ targetPort8080暴露
- Name
- 资源
- Description
- requests 50m CPU / 64Mi;limits 200m CPU / 256Mi
- Name
- 探针
- Description
- liveness
GET /health/live(initialDelay 30s);readinessGET /health/ready(initialDelay 15s,timeout 5s)
镜像拉取使用 ghcr-secret;Deployment 带 reloader.stakater.com/auto: "true" 注解(由 kustomize patch 注入),ConfigMap 变更可触发自动滚动。
配置与依赖
容器以环境变量 CONFIG_FILE=configs/services/media.yaml 读取配置,该文件来自 ConfigMap media-config(经 namePrefix 后为 platform-media-config),挂载到 /root/configs/services/media.yaml;另有共享的 base-config 挂到 /root/configs/base。
media.yaml 在继承 base/production.yaml 的基础上覆盖以下要点:
| 配置项 | 值 |
|---|---|
database.database | ${DB_NAME:yldm_media} |
redis.db | ${REDIS_DB:10} |
tracing.service_name | yldm-media |
pubsub.prefix | yldm:media(死信键 yldm:media:deadletter,pubsub redis db ${REDIS_PUBSUB_DB:1}) |
storage.base_path | ${STORAGE_BASE_PATH:uploads} |
storage.max_file_size | 10485760(10 MiB) |
storage.allowed_extensions | jpg / jpeg / png / gif / pdf / doc / docx / xls / xlsx / zip |
数据库与中间件凭证来自 ExternalSecret media-db-secret(ClusterSecretStore vault-backend,refreshInterval: 1h),生成同名 Secret 注入容器 env。绝大多数键取自 Vault 路径 yldm/production/media(db_host/db_port/db_name/db_user/db_password、redis_host/redis_port/redis_password/redis_db/redis_pubsub_db、jwt_secret/jwt_expires_in/jwt_refresh_expires_in);DB_ADMIN_USER/DB_ADMIN_PASSWORD 来自共享路径 yldm/database(user/password)。注释说明此 Secret 用于实现服务级数据库凭证隔离。
服务注册依赖 Consul:CONSUL_ENABLED=true、CONSUL_ADDR=consul.consul.svc.cluster.local:8500。其余 env 包含 ENV/ENVIRONMENT=production、SERVER_MODE=release、SWAGGER_AUTO_GEN=false、SERVER_PORT=8080、SERVER_NAME=media。
访问与监控
- Name
- Service
- Description
- ClusterIP(默认类型),
platform-media暴露端口8090→ targetPort8080;无 Ingress(manifest 目录内无 ingress 文件)
- Name
- ServiceMonitor
- Description
- 是。抓
http端口/metrics,interval 30s,relabel 出pod/namespace/service(取自applabel)
- Name
- PrometheusRule
- Description
- 是,group
media.rules
- Name
- HPA
- Description
media-hpa,min 2 / max 5,CPU 目标 70% 利用率、内存 80% 利用率
- Name
- VPA
- Description
media-vpa,updateMode: Off(仅建议不强制),min 25m/32Mi,max 500m/512Mi
- Name
- PDB
- Description
media,maxUnavailable: 1
PrometheusRule 覆盖的告警:Pod 不可用(MediaPodDown,up==0 持续 1m,critical)、副本不足(MediaInsufficientPods,运行副本 < 1 持续 2m,critical)、HTTP 5xx 错误率分级(>3% warning / >5% critical)、P95 延迟分级(>0.5s warning / >1s critical)、频繁重启(MediaPodRestarting)、CPU 与内存用量超 limits 80%(MediaHighCPU / MediaHighMemory,持续 10m warning)。告警 PromQL 以 job="media" 与命名空间 platform 为筛选条件。
返回 platform 总览