云原生技术学习方法

在学习一门综合性技术时,不应该着急看源代码,理清自己的定位才是最重要的。

0.1. 开发人员

如果是纯粹的开发人员,无论是前端、后端、还是应用和游戏开发,首先应该明白两个道理:

  1. kubernetes和容器技术主要解决的是代码编写完成之后的事情,这不单单是发布或者CI/CD,而是从执行完git commit 和 git push 之后开始,都应该进入容器化管理流程,当然包括后续发布、运维、升级、回滚等阶段

  2. kubernetes体系的核心是为开发者提供编写代码过程中的微服务编程范式

作为开发人员,最应该关注的是:

  • kubernetes API 对象的细节
  • 容器设计模式
  • kubernetes API 编程范式

开发者应该习惯把服务想象成容器,把应用想象成Pod,把基于容器和kubernetes的设计思想和架构方式融入到平常的工程实践中,大量实践这些思想和设计模式,编写各类CRD和Controller,并想办法提高编写自定义Controller项目的性能和服务能力。

开发者可以尝试扮演公司或者组织中推广微服务和云原生体系的倡导者,热心帮助团队成员共同学习 Kubernetes 的设计思想和 API,全力帮助 Istio 或者 Knative 这样的Service Mesh 和 PaaS 平台在组织中落地。

0.2. 编程人员

如果是专注服务器端的编程人员,或者运维工程师,更应该关注的是 Kubernetes 项目背后的实现原理

此外,Kubernetes 项目的各个可扩展性接口,也是需要重点关注和理解的对象,比如CNI和网络插件的工作方式、CSI 和存储插件的设计、Kubernetes Volume 管理的完整流程,以及 CRI 设计和各种 container runtime 的异同。

从这个角度来说,Kubernetes 项目就是当前云计算平台层开源项目的事实标准,熟悉其思想、架构、实现细节甚至核心组件源码,不仅是学习这项技术的必经之路,也是传统后端技术人员向云端转型的最佳途径。

0.3. 学生

作为学生或者刚入行的初学者,建议关注项目和平台背后更深层的基础和底盘部分,了解操作系统硬件的实际工作方式,甚至根据需要重新实现或绕过某些部分,这是进行系统性能优化的关键。理解“所有系统都是分布式系统”的这句话的意思,了解分布式系统设计思想,这也是 Kubernetes 分布式项目构建的基础。

一旦明确定位,抓到精髓和主线,接下来的学习过程其实就是“无招胜有招”,可以随心所欲地按照实际项目、所关心的领域逐步展开,完全不必拘泥于某种特定套路。

上次修改: 14 April 2020