现在 Kubernetes 已经没有了实际意义上的竞争对手,它的地位就如同 Linux 一样,成为了事实上的云原生操作系统,是构建现代应用的基石。
理论上讲,学习 Kubernetes 只要看资料就足够了,但实际情况却是学习起来仍然困难重重,我们会遇到很多意想不到的问题。
Kubernetes 技术栈的特点可以用四个字来概括,那就是“新、广、杂、深”。
- ”新”是指 Kubernetes 用到的基本上都是比较前沿、陌生的技术,而且版本升级很快,经常变来变去。
- “广”是指 Kubernetes 涉及的应用领域很多、覆盖面非常广,不太好找到合适的切入点或者突破口。
- “杂”是指 Kubernetes 的各种实现比较杂乱,谁都可以上来“掺和”一下,让人看的眼晕。
- “深”是指 Kubernetes 面对的每个具体问题和方向,都需要有很深的技术背景和底蕴,想要吃透很不容易。
这四个特点就导致 Kubernetes 的“门槛”相当高,学习曲线非常陡峭,学习成本非常昂贵,有可能花费了大量的时间和精力却南辕北辙、收效甚微,这点我确实是深有体会。
1、没有太多前提,不会 Go 你也可以学。
为了学习 Kubernetes 要先了解 Go 语言,有点“本末倒置”。不过如果你真想做 Kubernetes 开发,等学会了 Kubernetes 的基本概念和用法,再回头去学 Go 语言也完全来得及。
2、尽快建立一个全局观和大局观
等到你对这个陌生领域的全貌有了粗略但完整的认识之后,再挑选一个自己感兴趣的方向去研究,才是性价比最高的做法。
Kubernetes 版本更新很快,有的功能点或许一段时间之后就成了废弃的特性(比如 ComponentStatus 在 1.19 被废弃、PodSecurityPolicy 在 1.21 被废弃),如果太细,万一今后它过时无用,就实在是太尴尬了。
3、眼手脑结合,鼓励你多动手、多实际操作
Kubernetes 一般每年都会发布一个大版本,大版本又会有很多的小版本,每个版本都会持续改进功能特性,但一味求新,不符合当前的实际情况,毕竟生产环境里稳定是最重要的。
4、做减法而不是加法,聚焦知识点
因为 Kubernetes 涉及的领域太广了,它的知识结构是网状的,之间的联系很密切,在学习时稍不注意就会跳跃到其他的地方,很容易“发散”“跑题”,导致思维不集中。