你好,我是 Kubernetes 社区资深成员与项目维护者张磊,也是极客时间《深刻剖析 Kubernetes 》的专栏做者。今天我来与你谈一谈,学习 Kubernetes 和容器技术体系的最佳方法,究竟是什么。前端
我认为,学习一门综合性的技术,不该该着急一头扎进去看源码。理清楚本身的定位,才是最重要的。git
若是你是一位纯粹的开发人员,不管是前端、后端,仍是应用、游戏的开发,你首先应该明白这样两个道理:编程
好比,在你编写代码的时候,你应该清楚地知道:我该如何划分模块,就能更方便地利用到 Kubernetes 的 Pod 模型,来构建更加低耦合、高内聚的代码制品,让我后面的升级和重构工做更加容易。后端
拓展阅读「为何咱们须要pod?」设计模式
再好比,当你的代码须要与一个外部资源进行交互的时候,你应该首先想到:个人这个外部资源,是否是能够做为一个 Kubernetes 的 CRD 放到 Etcd 里面。这样,我编写的代码,就能够遵循一个自定义 Controller 或者 Operator 的编程范式,经过声明式 API 的方式来执行业务逻辑。这样写出来的代码必定会更加简单、健壮、容易维护。性能优化
这样的例子其实很是多。做为开发人员,你最应该关注的,是 Kubernetes API 对象的细节、容器设计模式以及 Kubernetes API 编程范式。
(Kubernetes里的全部API对象)服务器
你应该习惯于把你的服务想象成一个个容器,把整个应用想象成一个 Pod,学会把基于容器和 Kubernetes 的设计思想和架构方式,融入到本身日常的工程实践当中。你应该大量实践这些思想和设计模式,编写各类各样的 CRD 和 Controller,并想办法提升这些本身编写的自定义 Controller 项目的性能和服务能力。你应该尝试扮演公司或者组织中推广微服务和云原生体系倡导者,并热心地帮助团队成员共同窗习 Kubernetes 的设计思想和 API,全力帮助 Istio 或者 Knative 这样的 Service Mesh 和 PaaS 平台在组织中落地。网络
这些,都是加强你在即将到来的云计算时代竞争力的有效手段。架构
固然,若是你对 Kubernetes API 以及编程范式还不熟悉,甚至对 Kubernetes API 的普适性还有所怀疑,那么你能够阅读一下《深刻剖析 Kubernetes》的最后一篇文章「Kubernetes:赢开发者赢天下」。相信 Kubernetes API 成为云上编程标准的故事,必定会对你有所启迪。运维
而若是你是一位专一于服务器端的编程人员,或者运维工程师,那么你更应该关注的是 Kubernetes 这个项目背后的实现原理,它所体现出来的 Borg 和 Omega 项目多年来大规模集群管理的经验教训。
好比,声明式 API 的设计与实现原理,Informer、Controller 这些机制的实现方式,为何说 Etcd 最适合的场景是配置管理,集中式集群调度器的核心机制与经常使用策略都有哪些。
此外,Kubernetes 项目的各个可扩展性接口,也是你须要重点关注和理解的对象,好比 CNI 和网络插件的工做方式、CSI 和存储插件的设计、Kubernetes Volume 管理的完整流程,以及 CRI 的设计和各类 container runtime的异同。
从这个角度来讲,Kubernetes 项目就是当前云计算平台层开源项目的事实标准,熟悉它的思想、架构、实现细节甚至核心组件的源码,不只是学习这项技术的必经之路,也是传统后端技术人员向云端转型的最佳途径。
(Kubernetes经过存储插件管理容器持久化存储的原理)
你应该尝试扮演公司和组织中进行云原生和基础架构转型的关键角色,而不是充当传统和守旧那一方。你应该尝试用容器和 Kubernetes 化的思想来影响周边的每一位工程师。要记住,这个进程每前进一步,你的价值就放大一分。
而做为学生、刚刚入行的初学者,或者是对这个领域充满兴趣准备在这里做为一番的后端从业人员,我但愿你对容器和 Kubernetes 技术体系的学习和实践,更要关注这个项目和平台背后更深层的基础和底盘部分,这包括:
1.了解操做系统和硬件的实际工做方式,尤为是CPU、存储和网络。
2.充分理解操做系统的设计,甚至能够根据须要从新实现或者绕过某些部分,这是你后面进行系统性能优化的关键所在。
3.理解“全部系统都是分布式系统”的道理。了解经典的分布式系统设计的思想,并从实际的工程实践中理解这些解决思路,这也是 Kubernetes 这个分布式项目构建的基础。
只有清楚了本身的定位,你才可以在 Kubernetes 这样一个大而全的技术体系面前作到“有所放矢,有的放矢”,才可以把容器和 Kubernetes 这项技术发展浪潮,与本身的技术路线和我的成长历程,真正地关联起来。
(Kubernetes 项目核心功能的“全景图”)
一旦明确了定位,抓到了这其中的精髓和主线,那么接下来的学习过程对于你来讲,其实就是“无招胜有招”,能够为所欲为地按照你实际的项目、所关心的领域逐步展开,而彻底没必要拘泥于某种特定的套路了。