企业 Kubernetes 平台交付与故障验收项目

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
ACK Acknowledgement 消息或数据接收确认
API Application Programming Interface 应用程序编程接口
CD Continuous Delivery / Continuous Deployment 持续交付/持续部署;是否自动上线取决于流程
CI Continuous Integration 持续集成
CLI Command-Line Interface 命令行接口
CNI Container Network Interface 容器网络接口
CRD Custom Resource Definition Kubernetes 自定义资源定义
CSI Container Storage Interface 容器存储接口
DLQ Dead-Letter Queue 死信队列
DNS Domain Name System 域名系统
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
ESO External Secrets Operator 将外部秘密系统中的值同步到 Kubernetes 的控制器
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
HPA Horizontal Pod Autoscaler Pod 水平自动扩缩容器
HTTP Hypertext Transfer Protocol 超文本传输协议
ID Identifier 标识符
IP Internet Protocol 网际协议;IP 地址是网络寻址标识
LB Load Balancer 负载均衡器
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
RBAC Role-Based Access Control 基于角色的访问控制
RPO Recovery Point Objective 恢复点目标,可接受的数据丢失时间范围
RPS Requests Per Second 每秒请求数
RTO Recovery Time Objective 恢复时间目标,可接受的恢复耗时
SA Service Account 服务账号,供程序或工作负载使用的身份
SIGTERM Termination Signal 请求进程正常终止的信号
SLO Service Level Objective 服务等级目标
SQS Simple Queue Service AWS 消息队列服务
TLS Transport Layer Security 传输层安全协议

交付目标:把真实订单 API/worker 部署到可重建、可审计、可恢复的平台,并证明发布/节点故障不会造成业务数据错误。使用已有真实业务镜像;本文提供平台整合与业务验收脚本,不把 Hello World 当企业项目。预算至少包括两个隔离集群或按需恢复集群、数据库/队列、LB、日志和备份存储。

1. 固定项目输入与仓库#

完成 实践约定与 业务基线。指定平台、业务、数据库、安全各一名负责人;固定 Git commit、镜像 digest、组件兼容矩阵、SLO/RPO/RTO与停止线。

platform-delivery/
  infrastructure/       # 集群、网络、云角色;独立 state/部署流程
  platform/             # CRD、插件、namespace、RBAC、策略、Secret 引用
  applications/orders/  # API、worker、Service、HPA/PDB、监控
  overlays/staging/     # 集群专属地址/身份,不含 Secret 值
  overlays/recovery/    # 隔离依赖与临时域名
  tests/                # 业务 API/幂等/对账
  evidence/CHANGE_ID/   # 脱敏验收、版本和恢复水位

Worker 必须实现暂停拉取、在途任务完成/续租和失败重投;Kubernetes 的退出等待不会自动替业务完成这些协议。

基础设施与 Kubernetes provider 分层,避免 Terraform 循环依赖。应用只引用平台输出,不能让建集群反过来依赖集群内业务资源。

2. 建集群与平台底座#

逐步执行以下独立文章,每项验收完成再下一项:

顺序 执行文档 本阶段交付
1 kubeadm / EKS / GKE 三选一 私网 API、至少三业务节点、可重建基础设施
2 权限、安全 人员短期身份、业务 SA、拒绝测试和审计
3 网络、CSI 跨节点访问、隔离策略、存储与 IP 容量
4 ESO、证书、Gateway 私有依赖凭据、TLS 业务入口
5 监控、日志、追踪 按请求 ID 定位业务链路、告警与值班入口
6 Argo CD 或 Flux 受限 GitOps、固定 revision、回退路径

按平台选择托管能力;不在 GKE 强装另一套 CNI,也不同时让 Argo/Flux 管理相同对象。需要自管消息服务时使用 RabbitMQ,已有 SQS/Pub/Sub 则复用业务架构。

3. 部署真实 API 与 worker#

按 Kustomize渲染实际 orders 清单;worker 需要专用 SA、专属 Secret、真实 ACK/重试/DLQ、SIGTERM 处理及队列监控。API 用 HTTP 探针,worker 使用业务提供的健康接口/命令,不能复制 API 探针制造重启循环。

下载 worker 清单,加入应用 Kustomization 的 resources,替换镜像 digest。它要求镜像提供 /app/worker 和 /app/healthcheck startup|ready|live(成功返回 0);orders-worker-runtime 由 ESO 创建。live 只判断进程/事件循环,不因队列短暂故障失败。worker 必须自己暂停拉取消息,readiness=false 不会自动停止消费。 云队列访问给该 SA 单独配置联合身份。

kubectl kustomize overlays/staging > staging-rendered.yaml
kubectl --context="$LAB_CONTEXT" apply --dry-run=server -f staging-rendered.yaml
kubectl --context="$LAB_CONTEXT" diff -f staging-rendered.yaml
# 经 GitOps 同步;首次独立实验可 apply,之后只保留一个管理者。
kubectl --context="$LAB_CONTEXT" -n orders rollout status deployment/orders-api --timeout=10m
kubectl --context="$LAB_CONTEXT" -n orders rollout status deployment/orders-worker --timeout=10m
kubectl --context="$LAB_CONTEXT" -n orders get pods,svc,pdb,hpa,pvc

确认实际域名/TLS→Gateway→API→数据库→队列→worker→结果链路。入口权限、SA 权限和网络策略做正反向验证后,才跑写入压测。

4. 执行业务门禁#

下载 k6 脚本和 请求样例 到 tests。契约:POST /orders 接受 Idempotency-Key,返回字符串 id;GET /orders/:id 返回相同 id。按真实 API 修改契约/状态码/请求体,使用合成账户与库存、隔离支付端点。这不是供生产任意接口直接运行的脚本。

通过企业密钥系统把短期业务 token 写到本机 0600 文件;不放 CLI 参数或 Git。启动 k6:

export BASE_URL='https://orders.staging.example.com'
export RUN_ID="$CHANGE_ID-$(date -u +%Y%m%dT%H%M%SZ)"
export TOKEN_FILE='/secure/orders-test-token'
export PAYLOAD_FILE="$PWD/tests/payload.example.json"
export RATE=5
export DURATION=2m
k6 run --summary-export "$EVIDENCE/k6-summary.json" tests/orders.k6.js

RATE 是每秒业务迭代数,每轮包含创建、幂等重放、查询三个 HTTP 请求,不是总 RPS。先低流量验证,再按真实容量逐步增加;示例 p95<300ms/错误率<0.1% 是需团队确认的门槛。checks 配了 threshold,失败会使退出码非零;仅输出 check 不会自动阻断 CI。

本脚本只验证 API 正确性/幂等,不证明 worker 最终完成。再按 client_reference 的 RUN_ID 前缀对账:唯一订单数、确认消息数、成功处理数、DLQ、业务金额/库存差异。待异步窗口结束仍未完成视为失败;保存脱敏统计,不输出 token/客户数据。

5. 变更与故障矩阵#

持续运行上述流量,每次只注入一个故障,恢复稳定再下一项:

场景 操作入口 必须通过
非法身份/未签镜像 权限、供应链 拒绝新访问/部署,旧业务保持正常
发布错误版本 蓝绿 preview 门禁失败不晋级,旧 active 正常
单节点维护 调度 PDB/容量有效,业务满足 SLO
镜像/调度故障 排障 告警触发、证据能定位、恢复无数据错误
密钥轮换 ESO 新凭据生效,旧凭据按窗口撤销
数据恢复/集群故障 Velero、多集群 隔离恢复、数据对账、RPO/RTO达标
平台升级 自建 / EKS / GKE API/插件/数据兼容,逐阶段有停止点

插件健康和业务健康分别记录;故障后 Running 并不意味着积压/对账已恢复。

6. 交付与清理#

验收记录至少包含:环境/版本/commit/digest、负载与样本量、错误率/p95/p99、权限拒绝证据、告警时间、恢复步骤、数据水位、实际 RPO/RTO、剩余风险与负责人。未执行的格子写“未验证”,不得写通过。

清理按 RUN_ID 用业务批准的清理/冲正流程处理测试数据,保持审计与会计一致;脚本不自动 DELETE 订单。回收临时恢复环境前保留外部备份、镜像、日志,检查孤立 LB、卷、DNS 与云费用。交付结果是可重放的 Git 仓库和证据,不是一次 kubectl 成功截图。

参考:k6 门槛与退出码。

可直接运行的配套工程#

可直接使用 企业订单参考工程 提供的 API/worker、完整 Helm/Kustomize 与并发幂等验收。该实现使用数据库事务队列;外部 broker 演练仍按相应文档选择适配。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭