高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

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

  • 2019-01-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-01-31 15:516909
用户头像

发布了 40 篇内容, 共 24.3 次阅读, 收获喜欢 138 次。

关注

评论 2 条评论

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

翻译:《实用的Python编程》06_00_Overview

codists

Python

别再问我们用什么画图的了!问就是excalidraw

万俊峰Kevin

微服务 工具软件 go-zero 画架构图

产品经理训练营大作业(05)

KingSwim

ARST-日常打卡

pjw

大作业-附件5

曾烧麦

产品训练营

给你的网站文字添加黑幕-隐藏文字

依旧廖凯

28天写作 3月日更

开发人员的软实力之一:配合度

boshi

职业素养 七日更

类似GitBook的在线文档创作平台

happlyfox

28天写作 3月日更

【办公自动化--加餐】打开Excel后首先应该进行的7个操作

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data.

wjchenge

androidjson解析!跟我一起手写EventBus吧,不吃透都对不起自己

欢喜学安卓

android 程序员 面试 移动开发

作业 - 知识星球 - 新手引导

hao hao

第10周课后练习-模块分解

潘涛

架构师训练营 4 期

(28DW-S8-Day23) 《流程型组织》学习笔记:摧毁金字塔,拆掉"法约尔"桥

mtfelix

28天写作 流程型组织

IBM们的中国研究院是怎样一步步“躺平”的?

脑极体

产品0期 - 完整的产品文档(大作业)

曾烧麦

产品训练营

【LeetCode】设计哈希映射Java题解

Albert

算法 LeetCode 28天写作 3月日更

大作业-附件1

曾烧麦

产品训练营

Flink SQL 如何实现列转行?

JasonLee实时计算

flink

产品经理训练营大作业

隋泽

大作业-附件2

曾烧麦

产品训练营

Google面试题-怎样实现拼写纠错的功能?

Nick

数据结构 二分查找 数据结构与算法

散列表-hashTable

x-arts

散列函数

1.2W 字的 SQL 语法速成手册

xcbeyond

MySQL sql 3月日更

大作业-附件3

曾烧麦

产品训练营

算法攻关-序列化和反序列化二叉树O(n)_offer37

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 序列化二叉树

归并排序与快速排序以及PHP实现

一个大红包

3月日更

mybatis 配置详解

xiezhr

mybatis MyBatis标签 mybatis配置

大作业-附件4

曾烧麦

产品训练营

操作系统的内存管理(上)

Arvin

内存管理

android基础教程!字节跳动+京东+360+网易面试题整理,附答案

欢喜学安卓

android 程序员 面试 移动开发

学习Kubernetes 和容器技术体系的最佳方法_运维_张磊_InfoQ精选文章