饮墨

子安饮墨馀三斗,留与卿儿作赋来

Kueue 实战:Kubernetes 原生批处理调度器,4 步搞定 AI/ML 工作负载队列管理

15 views

痛点:AI 训练任务抢 GPU,集群资源乱成一锅粥

跑过 AI/ML 训练任务的运维都知道这个痛:团队 A 提交了一个 8 卡 GPU 的大模型微调任务,团队 B 同时提交了 20 个数据预处理 Job,结果所有任务一起抢资源,谁都跑不动。更头疼的是:

  • 原生 Job 没有排队机制kubectl apply 之后 Pod 直接创建,不管资源够不够,Pending 一堆
  • 多团队资源配额靠 ResourceQuota 太粗糙:只能限制上限,不能做公平调度和借用
  • GPU 等昂贵资源没有优先级抢占:低优先级任务占着 GPU 不释放,高优先级任务干等
  • 批处理和在线服务混部时互相干扰:没有统一的准...

Read more

Teleport 实战:3 步部署零信任访问网关,统一管理 SSH/K8s/数据库

15 views

痛点:传统堡垒机 + VPN 的三重困局

你的团队是不是也面临这样的局面?

  • SSH 密钥散落一地 — 每台服务器都有一堆 authorized_keys,员工离职后没人敢删,也不知道哪些还在用
  • VPN 一旦接入就是全网暴露 — 开发拿到 VPN 账号后能摸到生产数据库,横向移动毫无阻拦
  • 审计形同虚设 — 堡垒机只记录了"谁登录了",至于登录后执行了什么,出了事故才发现日志早就轮转没了

传统方案的核心问题是:认证和授权是割裂的。VPN 管网络层准入,堡垒机管 SSH 登录,数据库有自己的账号体系,Kubernetes 又是另一套 RBAC。每多一层基础设施,就多一套凭据要管理。

Tel...

Read more

你永远修不完所有 bug,人生也是

12 views

你永远修不完所有 bug,人生也是

凌晨三点的告警把我叫醒。

Prometheus 大盘一片红,核心服务 5xx 飙到 30%,Slack 里已经炸了。我一边 ssh 上跳板机,一边在脑子里过可能的原因:配置变更?流量突增?依赖服务挂了?

排查 40 分钟,发现上游服务连接池耗尽,级联超时。根因是两周前一次"无害"的参数调整——连接超时从 3 秒改成 10 秒,觉得"宽裕点总没错"。没人 review,因为改动太小了。

修完写完复盘,凌晨五点。躺回床上睡不着,脑子里冒出一个念头:这种事永远不会结束。

不是这个 bug,就是下一个。系统足够复杂之后,故障不是意外,而是常态。


做运维这些年...

Read more

SRE Error Budget 实战:3 步落地错误预算驱动发布决策,告别拍脑袋上线

32 views

痛点

每周五下午,运维群总有人问"这个版本能不能发"。SRE 看了看最近的告警数量,拍脑袋说"先别发吧"——但研发说 deadline 到了,最终强行上线,周末果然出事。

问题出在哪?发布决策缺乏量化依据。 没有一个客观标准告诉你:系统当前的可靠性余量还够不够"冒一次险"。

Google SRE 提出的 Error Budget 模型把这个问题量化了:SLO 是 99.9%,一个月允许 43.2 分钟不可用。本月已消耗 40 分钟,剩余预算只有 3.2 分钟——这时候发版就是在赌命。反过来,如果预算还剩 80%,说明系统很稳,正是加速迭代的好时机。

Error Budget 的核心价值:...

Read more

PostgreSQL VACUUM 调优实战:3 步解决生产环境表膨胀与 XID 回卷危机

28 views

痛点

线上 PostgreSQL 运行半年后,DBA 发现一张 2000 万行的订单表实际占用磁盘 45GB,而有效数据只有 12GB——表膨胀率超过 250%。更棘手的是,pg_stat_activity 中频繁出现 WARNING: database "order_db" must be vacuumed within 10000000 transactions 告警,意味着事务 ID(XID)回卷风险正在逼近。

这是 PostgreSQL MVCC 机制的"副作用":每次 UPDATE/DELETE 不会立即回收旧版本行(dead tuple),而是依赖 VACUUM 进程清理。一...

Read more

Coraza WAF 实战:3 步部署开源 Web 应用防火墙,拦截 SQL 注入与 XSS 攻击

22 views

痛点

Web 应用直接暴露在公网,Nginx 做反代、CDN 挡一层——但业务逻辑层面的攻击(SQL 注入、XSS、路径遍历、命令注入)依然长驱直入。传统方案是上 ModSecurity,但运维都知道它的痛:

  • C 模块绑定 Nginx/Apache 版本,升级互相牵制,编译出错是家常便饭
  • 规则调试全靠翻日志,误报处理效率极低
  • ModSecurity v3 维护趋于停滞,安全响应速度越来越慢
  • 内存随规则数线性膨胀,高并发下性能劣化明显

需要一个现代化的替代方案:Go 原生、与 ModSecurity 规则 100% 兼容、支持多种集成模式。

方案

Coraza WAF — OWASP ...

Read more

VictoriaMetrics 替代 Prometheus:单机扛住百万时序指标的生产实践

31 views

痛点

Prometheus 是云原生监控的事实标准,但当指标规模超过 50 万条活跃时序后,单机 Prometheus 开始力不从心:

  • 内存失控:Prometheus 将近 2 小时的数据全部驻留内存(Head Block),50 万时序吃掉 8-12GB RAM,100 万时序直接 OOM
  • 存储膨胀:默认 15 天保留期,日增 50GB+ 的 TSDB 数据,磁盘成本居高不下
  • 重启慢如牛:WAL replay 在百万级时序下需要 5-15 分钟,期间无法 scrape 也无法查询,告警断档
  • 高可用缺失:原生 Prometheus 没有集群模式,双副本方案数据不一致、查询结果飘忽

你...

Read more

CloudNativePG 实战:4 步在 Kubernetes 上部署生产级 PostgreSQL,告别 StatefulSet 手搓 HA

25 views

痛点

在 Kubernetes 上跑 PostgreSQL,最常见的方案是手搓 StatefulSet + PVC + 自定义脚本。看起来能跑,但真到生产环境就暴露三个致命问题:

  1. 故障转移靠人工:Primary 挂了,需要手动 promote Replica、改 Service endpoint、确认数据一致性,停机窗口轻松 10-30 分钟
  2. 备份是定时炸弹:CronJob + pg_dump 管备份,恢复时才发现 dump 文件损坏或缺了 WAL,PITR(时间点恢复)更是奢望
  3. Day-2 运维地狱:滚动升级 PostgreSQL 版本要手动 drain、重建 Pod,扩缩副本要改 ...

Read more

Argo Workflows 实战:3 步在 Kubernetes 上搭建声明式任务编排引擎,替代 Jenkins Pipeline 和 CronJob

29 views

痛点

你的 Kubernetes 集群里跑着一堆 CronJob:每小时清理日志、每天凌晨跑 ETL、定期生成报表。最初几个还好管,数量超过 30 个后问题集中爆发:

  1. 依赖关系没法表达——报表任务依赖 ETL 完成,但 CronJob 只能用"延迟 30 分钟启动"这种粗暴方式,ETL 慢了就拿到脏数据。
  2. 失败重试全靠运气——backoffLimit 只能整个 Job 重试,一个 5 步流程的第 4 步失败,得从头跑。
  3. 执行历史无法追溯——Job 跑完 Pod 就被 GC 了,排查问题时日志都找不到。

Jenkins Pipeline 能解决编排问题,但在 K8s 环境里它是个"异类...

Read more

Nuclei 漏洞扫描实战:3 步构建自动化安全巡检 Pipeline,覆盖 Web 应用到云配置

24 views

痛点

安全巡检是运维绑定死的任务,但现实往往是这样:

  • 工具碎片化:Web 漏洞用 OWASP ZAP、端口扫描用 Nmap、SSL 检查用 testssl.sh、云配置用 ScoutSuite——5 种工具 5 套配置,结果散落各处
  • 手动执行效率低:每次安全审计人工跑一遍扫描、筛结果、写报告,耗时半天起步
  • 覆盖面不稳定:全靠工程师经验和记忆,这次扫了 SQL 注入,下次忘了检查 CORS 配置
  • CI/CD 集成困难:大多数扫描工具不适合自动化,塞进 Pipeline 后要么太慢、要么误报淹没告警

你需要的是一个统一的、模板驱动的、能嵌入 CI/CD 的自动化扫描引擎

方案:Nucl...

Read more