写在开头
读者对象
- 本文的对象是想比较深入学习 Istio 机理的同学,但不清楚学习路线,想看看本文的一些所谓“经验”。
- 对于未使用过 Istio 的同学,本文可能有点不好理解。
友情提醒
- 本文未写完,只是个友情预览版本
- 本文不是技术干货,很多个人色彩和水分。但有时喝喝鸡汤也不错的。
重要:风格、样式、本文的交互阅读方式 📖
可以这样说,我写作的大部时间不是花在文字上,是在图上,所以用电脑去读图,才是本文的正确打开方法。手机与微信号,只是个引流的阳谋。
虽然不是写书,不过还是说明一下吧,不然阅读体验不太好。:
- Istio 学习地图 - 玩 Istio,而不是被 Istio 玩(友情预览版) 的原文是 SVG 图片。如果你是在其它地方看到本文,大有可为图片都不会清晰,请转回原文。
- 正确浏览 SVG 图片的姿势是浏览器中图片处右键,选择 “新 Tab 中打开图片” 。大的 SVG 图片,按下鼠标中键,自由滚动/拖动。
- SVG 图片可以点击链接,直接跳转到相应源码网页(或相关文档),有时会精确到源码行。
起点
💬 你不需要很厲害才能開始,但你需要開始才會很厲害。
Don’t Fake It Till You Make It.
今天在看一篇旧文《透過 Istio 打造企業內的 SRE》时看到这句话。回想自己在 2018 年时,自以为比人家早学几年编程,故步自封。看到 Kubernetes 时,觉得这东西复杂难懂,甚至把简单问题复杂化。于是态度上就是追追潮流,学学一些架构大饼图式的简介就算了(心里是觉得这玩意大概是个花瓶)。
到了 2020 初年开始,工作上要解决一些 Istio 相关的故障问题和性能问题,才觉得自己技术上已经跟不上,这表现在:
- 只知道问题病症,不知道问题相关的机理(机制和原理)。
- 不懂机理,无法用二分法去定位问题
- Kubernetes 的原始设计核心理念没搞清楚
- 知识缺失,无法将全技术栈流程连接起来,怎么努力学习也只是建立起一个个知识孤岛
- Linux 内核容器实现相关的知识缺失,如 namespace
- Linux 网络层面知识缺失
- CNI(Calico) 相关网络路由知识
当时,我第一反应是,年纪大了,看来要转行,程序员青春饭吃不下了。可能转什么?结果是,什么都不能转,也不想转。我问自己,40 岁就不能学?以前学的技术基础,真是一点用也没有了?难道经验和工龄在这个崇拜青春的时代,真是个负资产?
最后,一想到还欠银行半辈子的钱,马上有学习的动力了。
图来自:https://www.techtello.com/fake-it-till-you-make-it/
原则与方法学
还记得,小时候什么电器都喜欢拆拆合合的,收音机、CD机、电脑。但总有一种神奇的能力把拆散的东西整合回来,然后,就了解它的结构了。话说到这里,再看看我家娃这代,好像完全没这个兴趣和机会了,想想,哪个小孩会去拆 pad。就算拆了,也因元件太小和精密,看不出什么机理来。很难找到自驱型学习的人了。
技术学习和学习收音机的机理一样,有两种方向:
-
从大到小(或叫自顶向下)
从整体上看功能、架构组件、组件关系、对外接口、数据流。一个 HTTP 请求在 Istio 体系中的旅行。
-
从小到大(或叫自下向上,或叫从底层到高层)
举几个栗子:
- iptable/netfilter/conntrack 之于 Istio sidecar 流量拦截
- Envoy HTTP Filter / Route 之于 Istio Destination Rule 与 Istio Virtual Service
自顶向下
// 以下为结构草稿和构思,只说明本文将有什么内容。