当前位置: 首页 > news >正文

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

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

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

定位一:纯粹的开发人员

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

  • Kubernetes 和容器技术主要解决的,是代码编写完成后的事情。这不单单是发布或者 CI/CD,而是指从你执行完 git commit \u0026amp;\u0026amp; 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 的本质」

相关文章:

  • windows 服务安装脚本拾遗
  • 北极熊“梦龙”武汉相亲
  • SAP OTR 字段维护 更改SAP的字段翻译
  • ubuntu18.04 ssh 远程系统拒绝连接 解决方法
  • Java 中队列的使用
  • 金融壹账通将推动新一轮金融科技创新浪潮
  • 安卓布局修改基础常识篇之TextView属性
  • Javascript基础系列-表达式和运算符
  • 让nginx 的ssi支持include相对路径
  • 对超线程几个不同角度的解释
  • linux awk命令详解
  • 常用的math函数
  • Apache的基本使用
  • 『飞行路线 分层图最短路』
  • 操作系统
  • 网络传输文件的问题
  • @jsonView过滤属性
  • [译]CSS 居中(Center)方法大合集
  • 「译」Node.js Streams 基础
  • 5、React组件事件详解
  • bootstrap创建登录注册页面
  • java2019面试题北京
  • Java面向对象及其三大特征
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Laravel 实践之路: 数据库迁移与数据填充
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 大快搜索数据爬虫技术实例安装教学篇
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 将回调地狱按在地上摩擦的Promise
  • 前端技术周刊 2019-02-11 Serverless
  • 前端路由实现-history
  • 前端面试总结(at, md)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 入口文件开始,分析Vue源码实现
  • 深入浅出webpack学习(1)--核心概念
  • 数据仓库的几种建模方法
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Semaphore
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ###C语言程序设计-----C语言学习(3)#
  • #{}和${}的区别?
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)STL算法之比较
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (五)c52学习之旅-静态数码管
  • (一)Dubbo快速入门、介绍、使用
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Standard 支持的 .NET Framework 和 .NET Core