对容器构建和 CI 流水线的明确偏好。
# Dockerfile 与 CI 偏好 - 使用多阶段构建,最终阶段只交付运行时产物。置信度: 0.95 - 基础镜像固定到具体版本标签,生产环境固定到 digest。置信度: 0.90 - 最终镜像优先选用 slim 或 distroless,而不是完整 OS 镜像。置信度: 0.85 - 以非 root 用户运行容器。置信度: 0.95 - 合理安排层顺序,让依赖清单在源代码之前被复制和安装。置信度: 0.95 - 始终保留 .dockerignore,排除 node_modules、.git 和本地 env 文件。置信度: 0.95 - 添加 HEALTHCHECK 或等效的就绪探针。置信度: 0.80 - 使用 BuildKit 缓存挂载来缓存包管理器缓存。置信度: 0.80 - 绝不把密钥烘焙进镜像;在运行时传入或使用 build secrets。置信度: 0.95 - 使用 exec 形式的 CMD,让进程能正确接收信号。置信度: 0.90 - 在 CI 中用 Trivy 扫描镜像,遇到严重漏洞即失败。置信度: 0.80 - 在 GitHub Actions 中以 lockfile 哈希为键缓存依赖。置信度: 0.85 - 把 lint、类型检查和测试作为独立的并行 CI 任务运行。置信度: 0.80 - 用 git SHA 标记镜像,部署绝不依赖 latest 标签。置信度: 0.90 - 保持工作流简短,把重复步骤抽成可复用工作流。置信度: 0.70
在 Kubernetes 集群上部署、保护和运维工作负载的有主见约定。
# 一个平台团队的 Kubernetes 品味 - 所有东西都通过 GitOps(Argo CD 或 Flux)部署;没有人手工对生产环境跑 kubectl apply。置信度:0.90 - 用 Helm 或 Kustomize 打包共享服务,但让每个环境各自的 overlay 保持小巧易读。置信度:0.80 - 给每个容器都设置 CPU 和内存 requests,并把内存 limit 设置成与 request 相等。置信度:0.90 - 对延迟敏感的服务不要设置 CPU limit;靠 requests 和节点规格来避免被限流。置信度:0.70 - 给每个 Deployment 都加 readiness probe;只有应用真的可能死锁时才加 liveness probe。置信度:0.85 - 启动慢的应用用 startup probe,而不是在 liveness 上设一个很长的 initialDelaySeconds。置信度:0.80 - 任何用户依赖的服务,都在 PodDisruptionBudget 后面至少跑两个副本。置信度:0.90 - 用 topologySpreadConstraints 把副本分散到各个可用区。置信度:0.80 - 用 digest 或不可变的版本 tag 固定镜像,绝不用 latest。置信度:0.95 - 容器以非 root 运行,根文件系统只读,并丢弃所有 capabilities。置信度:0.90 - 在应用命名空间上强制执行 restricted Pod Security Standard。置信度:0.80 - 每个命名空间都从一个默认拒绝的 NetworkPolicy 开始,只开放你需要的流量。置信度:0.80 - 给每个工作负载配自己的 ServiceAccount,当它从不调用 API server 时关闭 token 自动挂载。置信度:0.85 - 别把 secret 放进 Git;用 External Secrets 从 secret manager 同步,或者用 Sealed Secrets。置信度:0.90 - 每个团队或每个应用一个命名空间,并带上 ResourceQuota 和 LimitRange。置信度:0.80 - 给每个资源都打上标准的 app.kubernetes.io 标签。置信度:0.75 - 处理 SIGTERM,并加一个短暂的 preStop 休眠,让在途请求在关停前排空。置信度:0.85 - 用 HorizontalPodAutoscaler 基于 CPU 或真实的请求速率指标来扩缩无状态服务。置信度:0.75 - 数据库跑在托管的云服务上,而不是 StatefulSets,除非有很强的理由。置信度:0.80 - 在 CI 中用 kubeconform 以及 Kyverno 或 OPA Gatekeeper 之类的策略引擎校验 manifest。置信度:0.80 - 让集群保持在最新 Kubernetes 版本的两个 minor 版本以内,并按计划升级。置信度:0.75 - HTTP 服务通过一个共享的 ingress 或 Gateway API controller 暴露,而不是每个服务一个 LoadBalancer。置信度:0.75