饮墨

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

用 SOPS + age 加密 GitOps 密钥:3 步告别明文 Secret 提交

痛点

GitOps 工作流要求「一切皆代码、一切进 Git」,但 Kubernetes Secret、数据库密码、API Token 这类敏感信息怎么办?直接明文提交是安全事故的温床;用 Vault 全托管又引入额外基础设施和运维成本。

现实中最常见的反模式:

  • .env 文件写入 .gitignore,部署时手动拷贝 —— 无法审计变更历史
  • Secret 经 CI 变量注入,YAML 里留占位符 —— 本地调试困难、CI 平台成为单点
  • 直接把 base64 编码(≠加密)后的 Secret 推进仓库 —— 等于裸奔

SOPS(Secrets OPerationS)+ age 组合恰好...

Read more

Grafana OnCall:开源值班告警管理,替代 PagerDuty 的实战方案

痛点

运维团队到了一定规模,告警值班管理就成了绕不开的问题:谁该接这条告警?升级策略怎么配?值班表怎么轮转?PagerDuty、OpsGenie 这类 SaaS 工具好用,但每人每月 $21-$49 的费用,10 人团队一年下来就是 $2500-$6000。对于已经重度使用 Grafana 栈的团队,Grafana OnCall 是一个值得认真考虑的开源替代方案。

Grafana OnCall(原 Amixr)2022 年开源后持续迭代,2024 年已合并进 Grafana OSS 核心,作为内置插件随 Grafana 一起部署。它覆盖了值班轮转、告警路由、升级策略、多渠道通知等核心需求...

Read more

CrowdSec:协作式入侵防御系统,替代 Fail2ban 的现代方案

痛点

Fail2ban 是 Linux 服务器上最经典的暴力破解防护工具,但在现代运维场景下越来越力不从心:

  • 单机视野:每台服务器独立判断,无法共享威胁情报,同一个恶意 IP 打完 A 服务器再打 B 服务器时,B 毫无防备
  • 性能瓶颈:基于正则逐行解析日志,在高流量场景下 CPU 消耗可观
  • 生态单薄:仅支持 iptables/firewalld 封禁,无法原生联动 Nginx、CDN、WAF
  • 缺乏可观测性:没有集中式仪表盘,多节点管理靠手工

CrowdSec 正是为解决这些问题而设计的现代协作式入侵防御系统(IPS)。

方案概述

CrowdSec 是一个开源(MIT 协议)的安全引擎...

Read more

Pkl:Apple 开源的配置语言,能否终结 YAML 地狱?

痛点

运维和 DevOps 工程师每天打交道最多的文件格式,恐怕就是 YAML。Kubernetes manifest、Helm values、CI/CD pipeline、Ansible playbook——全是 YAML。但 YAML 有几个致命问题:

  1. 无类型约束:一个 replicas: "3"(字符串)和 replicas: 3(整数)在语法上都合法,错误只能等到运行时才暴露
  2. 无模块化能力:大规模配置只能靠 Helm 模板的 {{ }} 或 Kustomize 的 overlay 拼接,可读性极差
  3. 无内置验证:想约束 "memory limit 必须 >= request...

Read more

Agentic RAG:让 AI Agent 自主决策检索策略的下一代架构

痛点

传统 RAG 管道是一条"固定流水线"——用户提问 → 向量检索 → 拼接上下文 → LLM 生成。这种线性模式在简单问答场景能用,但遇到以下情况就力不从心:

  1. 多跳推理:问题需要先查 A 文档,从 A 的结论出发再查 B,传统 RAG 一次检索根本覆盖不了
  2. 查询意图模糊:用户问"我们系统上个月的故障和这个月的有什么关联",需要先拆解时间范围、再分别检索、最后综合分析
  3. 检索质量不可控:召回的文档不相关时,LLM 照样硬编答案,没有"发现检索结果不够就再查一次"的能力
  4. 多数据源路由:知识可能分布在 Wiki、代码仓库、监控数据、工单系统中,固定管道无法动态选择数据源

Agentic...

Read more

Taskfile:用 go-task 替代 Makefile,DevOps 任务编排更优雅

痛点

运维和开发团队几乎都离不开 Makefile——构建镜像、跑测试、部署服务、清理资源,各种自动化任务全塞在一个 Makefile 里。但 Makefile 有几个老生常谈的痛点:

  1. 语法反直觉:Tab vs 空格、.PHONY 声明、Shell 变量转义($$)、多行命令要加 \,新人上手成本高
  2. 跨平台差异:依赖 GNU Make,macOS 自带的 BSD Make 行为不一致,Windows 更是灾难
  3. 缺乏原生任务依赖和条件执行:想实现"只在文件变更时重新构建"得写一堆 hack
  4. 可读性差:当 Makefile 超过 200 行,维护就变成考古

如果你也被这些问题折腾过,是时...

Read more

Zarf:离线/气隙环境下 Kubernetes 部署的终极方案

痛点:气隙环境部署 K8s 应用有多痛?

在金融、军工、政务、医疗等行业,生产环境往往处于完全断网的"气隙"(Air-Gapped)状态——没有外网访问,无法 docker pull,Helm chart 拉不下来,甚至 apt update 都跑不通。

传统做法是手动搬运镜像 tar 包、导出 Chart、逐一 docker load,再用 U 盘或内网传输。流程繁琐且极易出错:

  • 镜像依赖层层嵌套,漏一个就部署失败
  • Helm values 中硬编码的镜像地址需要逐个改写
  • 多版本升级时,没有可靠的差量更新机制
  • 缺乏签名验证,供应链安全无从保障

Zarf 正是为解决这类问题而生的开源工...

Read more

Chainguard Images + Wolfi OS:构建零 CVE 容器镜像实战

痛点:你的容器镜像到底有多少漏洞?

用 Trivy 扫一下你生产环境的基础镜像,结果往往触目惊心:

$ trivy image python:3.12-slim
Total: 287 (UNKNOWN: 0, LOW: 112, MEDIUM: 98, HIGH: 62, CRITICAL: 15)

即使是 -slim 变体,Debian/Ubuntu 基础镜像也天然携带大量系统级包,其中不乏已知 CVE。这些漏洞绝大多数与你的应用毫无关系,但安全审计不管——扫出来就要修,修不动就要写豁免申请。

核心矛盾:传统发行版为通用性设计,塞了太多你用不到的东西;而 scratch/distr...

Read more

Dify 自托管部署生产实践:从 Docker Compose 到高可用架构

痛点

团队要快速构建 AI 应用(RAG 知识库、Agent 工作流、对话机器人),选型时面临几个现实问题:

  1. LangChain/LangGraph 门槛高 — 纯代码方案需要后端开发持续投入,产品经理无法参与调试
  2. SaaS 方案数据不可控 — 企业敏感数据不能上传到第三方平台
  3. 内部重复造轮子 — 每个项目都写一套 prompt 管理、向量检索、模型路由逻辑

Dify 是开源的 LLM 应用开发平台(GitHub 90k+ stars),提供可视化 Workflow 编排、RAG Pipeline、Agent 框架、模型管理和 Prompt IDE,支持完全自托管。本文聚焦运维视角,...

Read more

Argo Rollouts 实战:3 步实现 Kubernetes 金丝雀与蓝绿发布

痛点

Kubernetes 原生 Deployment 只支持 RollingUpdate 和 Recreate 两种策略。对于线上核心业务,RollingUpdate 的问题很明显:

  • 无法控制流量比例 — 新版本 Pod 一起来就接收等比流量,没有渐进式验证的过程
  • 回滚不够快 — 发现问题后 kubectl rollout undo 需要等待新 Pod 重新滚动,P0 故障时每秒都在烧钱
  • 缺乏自动化判定 — 无法基于 Prometheus 指标自动判断新版本是否健康,全靠人眼盯监控

生产环境需要的是:先放 5% 流量到新版本,观察 5 分钟,指标正常再逐步加到 50%、100%;异...

Read more