系统在预发环境跑得好好的,到生产上遇到一个依赖超时就全线变慢。这类事发生几次后会让人意识到:正确性和韧性是两件事。前者说没有故障时行为对不对,后者说有故障时行为还能不能接受,而后者几乎不可能靠读代码确认。 实验的前提:先有假设 混沌工程的核…
DevOps
7AA7 技术博客 · DevOps 下的全部文章。
日志链路是一条数据管道:应用产生事件,采集端读取,传输层削峰,存储层建立索引,查询端再按条件检索。任何一段都可能限流或中断。设计重点不是“能看到日志”,而是在业务高峰与局部故障下,日志不反向阻塞业务,并能说明丢失、重复与延迟的边界。 两种 Age…
镜像优化不只是追求一个更小的数字。镜像会进入构建缓存、制品仓库、节点本地存储和运行时,每多一份无用数据,都可能增加传输、解压、扫描与回收成本。优化的目标应同时覆盖可重复构建、缓存命中、运行安全和排障能力。 镜像分层如何工作 Dockerfile 中多数…
基础设施即代码的核心,是把资源期望状态放进可评审的声明文件,再由工具比较现状并生成变更。命令式脚本描述“创建网络、再创建实例”,重复执行前必须自行判断对象是否存在;声明式配置描述“网络和实例应当具备这些属性”,调谐过程依据差异决定创建、更新或…
监控系统收集的数据越多,不代表故障越容易发现。有效体系需要回答三个问题:用户是否受影响、影响正在扩大吗、值班人员能采取什么动作。若一个告警没有明确的响应者与处置路径,它更接近噪声,而不是安全网。 黄金四指标、RED 与 USE 面向在线服务时,黄金…
配置与密钥都能改变应用行为,但泄露后果不同。端口、功能开关、重试次数通常可公开评审,适合进入普通配置仓库;数据库密码、签名私钥、访问令牌和加密材料不可公开,需要限制读取、轮换和审计。判断标准不是文件名,而是内容泄露后是否会赋予权限、暴露数…
Kubernetes 的滚动更新能逐步替换副本,但“Pod 已启动”与“业务可接流量”并不是同一状态。更新能否不断流,取决于探针语义、替换节奏、流量摘除和进程退出能否在一个时间窗口内配合,而不只是 Deployment 使用了 RollingUpdate。 readiness 与 liveness 不能…
一台机器上跑多个容器,用 veth pair 加网桥就能互通。跨了机器,问题就变成另一个:Pod 的 IP 是 10.244.1.5,另一台宿主机上的 Pod 要访问它,怎么知道把包发到哪里。容器网络的设计,基本都围绕这个"怎么知道"展开。 要解决的问题:跨主机 Pod 互通 Kuber…
流水线的价值不是把若干命令搬进自动化平台,而是建立一条可追溯、可重复、能在错误扩散前停下来的交付路径。设计时应从反馈速度与风险暴露顺序出发:成本低、执行快、失败概率高的检查靠前,昂贵或会改变环境状态的动作靠后。 阶段划分与快速失败 一条常见…
"这套系统能扛多少流量"很难凭直觉回答。难在两处:容量不是单一数字而是一组相互影响的参数;测算环境与真实环境总有差距,测出来的数不能直接搬用。把这两处理清楚,估算才有意义。 四个基本量与它们的换算 容量讨论里反复出现四个量:QPS、并发数、单次请…
理解 Kubernetes 的关键不在于记住命令,而在于看清声明式 API 与控制器循环。用户提交的是期望状态,例如“始终运行三个副本”,控制器持续观察实际状态,计算差异并执行创建、更新或删除,直到两者收敛。某个 Pod 被节点故障带走后,系统不会修复原 Pod,而…
事故复盘的目的是改进系统,而不是追责。它的产出也不是一份解释谁做错了的报告,而是让同类故障更难发生、发生后更快发现、更容易控制。追责导向会促使参与者隐去不确定操作和薄弱环节,系统失去真实证据。无责文化也不等于不承担改进责任:事实、决策与流…