重复性运维工作的识别、量化与削减
Toil 是手动、重复、可自动化、不产生长期价值,并随服务规模增长的工作。典型例子:手工扩容、证书续期、权限开通、日志清理、重复巡检。它不等于所有运维工作,故障排查和架构改进不属于 Toil。
Google SRE 建议 Toil 控制在总工作时间的 50% 以内。超过时应该冻结新需求排期,先做自动化或消除。
Toil 清单与优先级:
| 任务 | 频率 | 单次耗时 | 月耗时 | 可自动化 | 优先级 |
|---|---|---|---|---|---|
| 证书续期 | 每月 20 次 | 30 分钟 | 10 小时 | 高 | P1 |
| 扩容审批 | 每周 5 次 | 20 分钟 | 6.7 小时 | 高 | P1 |
| 权限开通 | 每周 10 次 | 15 分钟 | 10 小时 | 中 | P1 |
| 日志清理 | 每天 | 10 分钟 | 5 小时 | 高 | P2 |
| 版本升级 | 每季度 | 8 小时 | 2.7 小时 | 中 | P3 |
量化公式:
# 月 Toil 占比 = Toil 小时 / 总工作小时
awk 'BEGIN {printf "Toil 占比: %.1f%%\n", 32/160*100}'
# 年化节省 = 月节省小时 × 12
awk 'BEGIN {printf "年化节省: %.0f 小时\n", 8*12}'
优先级 = 年化节省小时 × 自动化确定性 / 实现人日。优先做高频、短耗时、规则明确的任务。
从工单导出聚类:
jq -r '.[] | [.title, .duration_minutes] | @tsv' tickets.json |
awk -F'\t' '{h[$1]+=$2/60; n[$1]++}
END {for (t in h) printf "%s\t%d 次\t%.1f 小时\n", t, n[t], h[t]}' |
sort -k3 -nr
把命名空间开通自动化:
#!/usr/bin/env bash
set -euo pipefail
TEAM=$1
NS="team-${TEAM}"
kubectl create namespace "$NS" --dry-run=client -o yaml | kubectl apply -f -
kubectl -n "$NS" apply -f - <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
name: default
spec:
hard:
requests.cpu: "20"
requests.memory: 40Gi
pods: "100"
EOF
自动化决策表:
| 条件 | 做法 |
|---|---|
| 每周 ≥ 1 次且单次 ≥ 15 分钟 | 优先自动化 |
| 频率低但风险高(恢复演练) | 脚本化 + runbook |
| 一次性任务 | 记录,不自动化 |
| 需要复杂判断 | 自助入口 + 策略护栏 |
合上页面,先回答,再展开对照。