myetc · app 命名空间下的 HTTP 微服务
myetc 是 app 类目下的一个无状态 HTTP 微服务,容器监听 8080,对外暴露 /health/live、/health/ready 健康检查与 /metrics 指标端点。
从 manifest 可确认的技术角色:它通过 pgbouncer 连接 PostgreSQL、连接 Redis(含独立的 pub/sub DB),并在启动时向 Consul 注册服务发现条目,签发/校验 JWT。这里只描述可从清单验证的技术事实,不臆测其业务语义。
部署形态
- Name
- 命名空间
- Description
- app(kustomization 设
namespace: app+namePrefix: app-,生成的资源为app-myetc-*)
- Name
- 工作负载
- Description
- Deployment(无状态,无 PVC)
- Name
- 镜像
- Description
ghcr.io/yldm-tech/myetc:2.3.1(tag 由 argocd-image-updater 按 semver 写回 kustomizationimages:,勿手动 pin)
- Name
- 副本数
- Description
- 2(kustomization
replicas与 deploymentreplicas均为 2,HPA 下限同为 2)
- Name
- 调度
- Description
nodeSelector: workload=app;podAntiAffinity按kubernetes.io/hostname软反亲和(preferred,weight 100),尽量把两个副本分散到不同节点
- Name
- 优先级
- Description
priorityClassName: production-medium
- Name
- 端口
- Description
- containerPort
8080(name http)
- Name
- 资源
- Description
- requests cpu 50m / memory 64Mi,limits cpu 200m / memory 256Mi
- Name
- 滚动更新
- Description
maxUnavailable: 0,maxSurge: 1;revisionHistoryLimit: 2
- Name
- 探针
- Description
- liveness
GET /health/live(initialDelay 30s,period 10s),readinessGET /health/ready(initialDelay 15s,period 5s,timeout 5s),均指向 8080
配置与依赖
配置以挂载方式注入:ConfigMap myetc-config 把 myetc.yaml 挂到 /root/configs/services/myetc.yaml(subPath),另有共享 ConfigMap base-config 挂到 /root/configs/base,容器以 CONFIG_FILE=configs/services/myetc.yaml 读取。Deployment 带 reloader.stakater.com/auto: "true" 注解,ConfigMap/Secret 变更时由 Reloader 自动滚动。
myetc-config 中的服务配置覆盖了 database ${DB_NAME:yldm_myetc}、redis db ${REDIS_DB:6}、tracing service_name: yldm-myetc、pubsub prefix: yldm:myetc(pub/sub redis db ${REDIS_PUBSUB_DB:1},死信键 yldm:myetc:deadletter),并启用 Consul。
敏感凭证来自 ExternalSecret myetc-db-secret(ClusterSecretStore vault-backend,refreshInterval 1h),生成同名 Secret 注入到 env。服务专属项取自 Vault 路径 yldm/production/myetc: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 管理员凭证 DB_ADMIN_USER/DB_ADMIN_PASSWORD 取自共享路径 yldm/database。
明文 env(非密文)方面:DB_HOST 固定为 pgbouncer.postgres.svc.cluster.local(DB 连接走 pgbouncer),CONSUL_ENABLED=true、CONSUL_ADDR=consul.consul.svc.cluster.local:8500,以及 ENV/ENVIRONMENT=production、SERVER_MODE=release、SERVER_PORT=8080、SERVER_NAME=myetc、SWAGGER_AUTO_GEN=false。镜像拉取用 imagePullSecrets: ghcr-secret。
依赖小结:PostgreSQL(经 postgres 命名空间的 pgbouncer)、Redis、Consul(服务注册与发现)。
访问与监控
Service myetc 为默认 ClusterIP,port 80 → targetPort 8080(name http),仅集群内访问,无 Ingress。
监控:ServiceMonitor myetc 抓取 http 端口 /metrics,interval 30s,并 relabel 出 pod/namespace/service 标签。PrometheusRule myetc.rules 覆盖 Pod 掉线(MyetcPodDown,up==0 持续 1m)、副本不足(MyetcInsufficientPods,运行副本 < 1)、HTTP 5xx 错误率(warning >3% / critical >5%,基于 http_requests_total)、P95 延迟(warning >0.5s / critical >1s,基于 http_request_duration_seconds_bucket)、频繁重启、CPU/内存超 80% limits 等告警。
弹性与可用性:HPA myetc-hpa 以 CPU 70% / 内存 80% 为目标,minReplicas 2、maxReplicas 5。VPA myetc-vpa 为 updateMode: "Off"(仅给建议,不自动改资源),区间 cpu 25m–500m、memory 32Mi–512Mi。PDB myetc 设 maxUnavailable: 1,保证节点 drain 时至少留一个副本。
返回 app 服务总览