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 写回 kustomization images:,勿手动 pin)
  • Name
    副本数
    Description
    2(kustomization replicas 与 deployment replicas 均为 2,HPA 下限同为 2)
  • Name
    调度
    Description
    nodeSelector: workload=apppodAntiAffinitykubernetes.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: 0maxSurge: 1revisionHistoryLimit: 2
  • Name
    探针
    Description
    liveness GET /health/live(initialDelay 30s,period 10s),readiness GET /health/ready(initialDelay 15s,period 5s,timeout 5s),均指向 8080

配置与依赖

配置以挂载方式注入:ConfigMap myetc-configmyetc.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/myetcdb_host/db_port/db_name/db_user/db_passwordredis_host/redis_port/redis_password/redis_db/redis_pubsub_dbjwt_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=trueCONSUL_ADDR=consul.consul.svc.cluster.local:8500,以及 ENV/ENVIRONMENT=productionSERVER_MODE=releaseSERVER_PORT=8080SERVER_NAME=myetcSWAGGER_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 2maxReplicas 5。VPA myetc-vpaupdateMode: "Off"(仅给建议,不自动改资源),区间 cpu 25m–500m、memory 32Mi–512Mi。PDB myetcmaxUnavailable: 1,保证节点 drain 时至少留一个副本。

返回 app 服务总览

评论