知乎基础架构运维工程师王玉驰《用Python技术栈构建知乎系统运维平台》

介绍知乎使用基于 Python 的工具将系统运维工作产品化的经验。 主要包括:(1)知乎的系统运维平台从无到有的构建过程。我们选择 Python 技术栈以及之后的技术选型经历。(2)将分散的自动化工具比如 saltstack, fabric, pxe 整合成统一平台的过程。(3)我们在这个过程中的沉淀下来的一些系统运维工作指导原则。

1. 用 Python 技术栈构建知乎系统运维平台 王玉驰 知乎
2. A bit of History
3. A bit of History 2011年 2013年 2015年中 2015年初 2015年末 3
4. 3 个运维, 80% 时间处理理⽇日常需求。
 still…… • 交付的速度不不够快。 • 交付的结果正确性不不好。 • 数据缺失和混乱。 • 线上环境不不稳定。
5. 「知乎技术团队相信⼯工具的⼒力力量量。」
6. 1 个运维, 20% 时间处理理⽇日常需求。(on-call)
7. 为什什么⽤用 Python?
8. 为什什么⽤用 Python? • PyCon
9. 为什什么⽤用 Python? • PyCon • 知乎技术团队普遍使⽤用 Python。 • Python 学习曲线平滑,运维多少都会⼀一点 Python。 • Python 在运维/DevOps 领域⽣生态好。openstack、saltstack、 fabric、ansible、graphite……
10. 架构与实现
11. 监控系统 批处理理任务(fabric) 配置管理理(saltstack) 离线任务
 (通知等) 初始化 ⾃自动发现 装机 控制台 API 后端 前 端 任务队列列 SA/RD/供应商 第三⽅方平台
12. 控制台 • 前端 • Angular + Angular Material • 后端 (restful api server) • tornado web framework • MongoDB
13. 监控系统 批处理理任务(fabric) 配置管理理(saltstack) 离线任务
 (通知等) 初始化 ⾃自动发现 装机 控制台 API 后端 前 端 任务队列列 SA/RD/供应商 第三⽅方平台
14. 「坚持最⼩小可⽤用原则,拒绝过度设计。」 – 知乎运维刺刺客信条 #1
15. 初始化 • OS: 95% Debian, ~5% CentOS, 1-2 Windows.
16. 初始化 • OS: 95% Debian, ~5% CentOS, 1-2 Windows. • The Old Way:调整硬件配置、通知机房上架、录⼊入信息、open iDrac、装操作系统、初始配置…… • 10 台服务器器 ~ ⼀一天时间
17. 初始化 • OS: 95% Debian, ~5% CentOS, 1-2 Windows. • The Old Way:调整硬件配置、通知机房上架、录⼊入信息、open iDrac、装操作系统、 初始配置…… • 10 台服务器器 ~ ⼀一天时间 (后续还有返⼯工) • The New Way: 硬件配置标准化、供应商录⼊入信息、直接上架、⾃自动装机初始化并交付 • 50 台服务器器 ~ 三个⼩小时
18. 初始化 - 实现 • 硬件、操作系统配置标准化,相同业务内的机器器和系统都是同质的。
19. 「不不要相信默认的,⾃自动协商的配置, 重要的配置都写在标准⾥里里。」 – 知乎运维刺刺客信条 #2
20. 初始化 - 实现 • 硬件、操作系统配置标准化,相同业务内的机器器和系统都是同质的。 • 开放控制台给供应商,硬件的原始信息由供应商⼀一次录⼊入。 • 优化⾃自动装机流程。 • 机器器⾃自动发现和标准检查。
21. 初始化 - ⾃自动装机 • 优化 • ⾃自动装操作系统⽩白名单。 • 按业务需求装不不同版本的操作系统发⾏行行版。 • 按业务需求初始化不不同的配置。
22. 初始化 - ⾃自动装机 • PyPXE VS Raw-server VS Cobbler
 PyPXE Raw-server 提供核⼼心功能 Yes Yes Cobbler Yes 易易⽤用 简单 Yes Yes(300 ⾏行行 Python 代码) A little bit. Not quite easy. No No
23. 「选择简单成熟的⽅方案,⽬目标是 ⽤用合适的⼯工具解决问题。」 – 知乎运维刺刺客信条 #3
24. 初始化 - ⾃自动发现 • 发现新上线的服务器器 • 采集服务器器、操作系统的信息。IP 地址、分区、BIOS 设置等…… • 检查配置是否符合标准
25. 「Don’t repeat yourself,把经验 和能⼒力力落实在⼯工具和产品⾥里里。」 – 知乎运维刺刺客信条 #4
26. 监控系统 批处理理任务(fabric) 配置管理理(saltstack) 离线任务
 (通知等) 初始化 ⾃自动发现 装机 控制台 API 后端 前 端 任务队列列 SA/RD/供应商 第三⽅方平台
27. 配置管理理 - Saltstack • Saltstack VS Puppet • Puppet is slower。 • Saltstack 的 state ⽂文件组织起来更更简洁,Puppet 基于 Ruby DSL,配置代码库很容易易变得复杂、易易出错,对新⼈人不不友好。 • Saltstack 和 Python ⽆无缝整合,与其他组件整合起来⽐比 Puppet 便便利利许多。

28. 配置管理理 - Saltstack • 操作系统基础配置管理理 • 基础服务配置 • 命令执⾏行行 • 操作系统状态查询

29. 其他组件 • 任务队列列: Beanstalkd • 监控: collectd + graphite + grafana + Halo(内部报警系统) • 批处理理任务: fabric

30. Interruption is killer of efficiency
31. Interruption is killer of efficiency • 配置远程登录权限 • 管理理内部域名(修改记录,扩容) • 排查疑似⽹网络问题 • 分配 IP 地址 • ……
32. Interruption is killer of efficiency • 配置远程登录权限 • 管理理内部域名(修改记录,扩容) • 排查疑似⽹网络问题 • 分配 IP 地址 •每…天…中断 30+ 次,感觉身体被掏空
33. Interruption is killer of efficiency • 配置远程登录权限 • 管理理内部域名(修改记录,扩容) • 排查疑似⽹网络问题 • 分配 IP 地址 •每…天…中断 30+ 次,感觉身体被掏空
34. 「知乎技术团队相信⼯工具的⼒力力量量。」
35. 更更多的⼯工具 • ⾃自助的远程登录权限管理理。
36. 更更多的⼯工具 • ⾃自助的远程登录权限管理理。 • 内部 DNS 服务平台化。
37. 更更多的⼯工具 • ⾃自助的远程登录权限管理理。 • 内部 DNS 服务平台化。 • 内⽹网 IP 管理理,⾃自助申请和⾃自动回收。 • 简单的容量量管理理。 • ⾃自助排查内⽹网链路路上的⽹网络故障。 • ⾃自助开通云服务资源。 • ……
38. A fine tool is killer of interruption • 控制台⽇日 PV 500+ • 操作接⼝口每⽇日被单独调⽤用量量 100+ • 三个运维 80% 时间专注在⼯工具开发上。
39. 「变更更要有记录、可回滚、可追溯。 消除故障影响最有效的⼿手段是回滚。」 – 知乎运维刺刺客信条 #5
40. 「多做检查,准确交付,线上的 任何操作都要有 checklist。」 – 知乎运维刺刺客信条 #6
41. 「任何⼩小问题都会放⼤大到业务上。 蝴蝶效应和墨墨菲定律律 rules。」 – 知乎运维刺刺客信条 #7
42. 运维的刺刺客信条 & Zen of Python • 做⼯工具坚持最⼩小可⽤用原则,拒绝过度设计。 • 选择简单成熟的⽅方案,⽬目标是⽤用合适的⼯工具解决问题。 • 不不要相信默认的,⾃自动协商的配置,重要的配置都写在标准⾥里里。 • Don’t repeat yourself,把经验落实在⼯工具和产品⾥里里。 • 多做检查,准确交付,线上的任何操作都要有 checklist。 • 变更更要有记录、可回滚、可追溯。