写点什么

学习 Kubernetes 和容器技术体系的最佳方法

  • 2019 年 1 月 31 日
  • 本文字数:2094 字

    阅读完需:约 7 分钟

学习Kubernetes 和容器技术体系的最佳方法

你好,我是 Kubernetes 社区资深成员与项目维护者张磊,也是极客时间《深入剖析 Kubernetes 》的专栏作者。今天我来与你谈一谈,学习 Kubernetes 和容器技术体系的最佳方法,到底是什么。


我认为,学习一门综合性的技术,不应该着急一头扎进去看源码。理清楚自己的定位,才是最重要的。


定位一:纯粹的开发人员

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


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

  • Kubernetes 体系的核心,是为开发者提供编写代码过程中的“微服务编程范式”。


比如,在你编写代码的时候,你应该清楚地知道:我该如何划分模块,就能更方便地利用到 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 项目核心功能的“全景图”)


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


拓展阅读:「从容器到容器云:谈谈Kubernetes 的本质」


2019 年 1 月 31 日 15:516774
用户头像

发布了 39 篇内容, 共 23.2 次阅读, 收获喜欢 131 次。

关注

评论 2 条评论

发布
用户头像
不同角色的学习路径是不同的,Kubernetes 官网上也有对不同人群的学习路径入口,我建议大家能自己动手玩起来。不要眼高手低。
2020 年 04 月 27 日 20:19
回复
用户头像
买了磊神在极客时间开的《深入剖析 Kubernetes 》专栏,看了前面5章就像看小说一样上瘾了!!!
2019 年 01 月 31 日 17:19
回复
没有更多了
发现更多内容

千万不能让程序员给娃娃取名字

码农神说

程序员

为什么坐车会晕车呢

石云升

生活,随想 日常思考 晕车

第二周作业

武鹏

架构师训练营第二周作业

sunnywhy

架构师训练营-第二章-依赖倒置原则&接口隔离原则

而立

极客大学架构师训练营

Week 02 学习总结

卧石漾溪

极客大学架构师训练营

架构师训练营 - 第二周 - 学习总结

韩挺

架构师训练营 - 软件设计原则

Pontus

极客大学架构师训练营

第二次作业总结

朱月俊

ARTS打卡Week 04

teoking

ios LeetCode ARTS 打卡计划

这也太拧巴了吧?结局意想不到

非著名程序员

程序员 程序人生 提升认知

第二周学习总结

武鹏

深入理解MySQL索引

Simon郎

MySQL 索引

架构师训练营第二章总结

叮叮董董

基本的面向对象原则(Basic OO principles)

旭东(Frank)

编程思维 极客大学架构师训练营

一个包子铺看懂 I/O 模型演变

小眼睛聊技术

Java 程序员 架构 后端 nio

永远招聘:打造高绩效团队的最佳姿势

伴鱼技术团队

企业文化 管理 团队建设 绩效 团队组织

依赖倒置和案例

王锟

品软件架构原则模式之美

老姜

数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……

墨天轮

数据库

第二周作业

changtai

极客大学架构师训练营

架构师训练营 - 第二周 - 作业

韩挺

架构师训练营 - 软件设计原则

Pontus

极客大学架构师训练营

英特尔发布提升计算效率的多种新方法:将在机器人、增强现实等领域广泛应用

最新动态

小师妹学JVM之:GC的垃圾回收算法

程序那些事

JVM 小师妹 JIT GC 签约计划第二季

老大吩咐的可重入分布式锁,终于完美的实现了!!!

楼下小黑哥

Java redis 分布式锁

架构师训练营第二周

小树林

做一个有原则的码农可好?

Dawn

极客大学架构师训练营

给行动找个理由

Neco.W

行动派 决策

架构师训练营第二章课后作业

叮叮董董

架构师训练营二期作业

老姜

ShadowRealm 与微前端沙箱

ShadowRealm 与微前端沙箱

学习Kubernetes 和容器技术体系的最佳方法-InfoQ