迎难而上,做云原生时代的弄潮儿:搞定 Kubernetes

作者罗剑锋,网名“Chrono”,Kong 高级工程师,Nginx/OpenResty 开源项目贡献者,也是极客时间《透视HTTP协议》《罗剑锋的C++实战笔记》专栏的作者。

他专注于 C/C++、Linux、高性能编程等领域,目前供职于 Kong 公司,投身 Kong Gateway、Kong Ingress Controller 等项目的研发工作,著有《C++11/14 高级编程》《Boost 程序库完全开发指南》《Nginx 完全开发指南》《OpenResty 完全开发指南》等畅销书。


你一定听说过 Kubernetes 吧,也许更熟悉一点的,是许多人总挂在嘴边的缩写——“K8s”。

自从 2013 年 Docker 诞生以来,容器一跃成为了 IT 界最热门的话题。而 Kubernetes 则趁着容器的“东风”,借助 Google 和 CNCF 的强力“背书”,击败了 Docker Swarm 和 Apache Mesos,成为了“容器编排”领域的王者至尊。

换一个更通俗易懂的说法,那就是:现在 Kubernetes 已经没有了实际意义上的竞争对手,它的地位就如同 Linux 一样,成为了事实上的云原生操作系统,是构建现代应用的基石。

毕竟,现代应用是什么?是微服务,是服务网格,这些统统要围绕着容器来开发、部署和运行,而使用容器就必然要用到容器编排技术,在现在只有唯一的选项,那就是 Kubernetes。

毕竟,现代应用是什么?是微服务,是服务网格,这些统统要围绕着容器来开发、部署和运行,而使用容器就必然要用到容器编排技术,在现在只有唯一的选项,那就是 Kubernetes。

不管你是研发、测试、还是运维,不管你是前台、后台、还是中台,不管你用的是 C++、Java 还是 Python,不管你是搞数据库、区块链、还是人工智能,不管你是从事网站、电商、还是音视频,在这个“云原生”时代,Kubernetes 都是一个绕不过去的产品,是我们工作中迟早要面对的“坎儿”。

你也许会有疑惑:我现在的工作和“云”毫不沾边,而且 Kubernetes 都“火”了这么久,现在才开始学,会不会有点晚了?值不值呢?

这里我就要引用一句老话了:“艺多不压身”,还有另一句:“机遇总是偏爱有准备的人”。

“云原生”已经是现在 IT 界的普遍共识,是未来的大势所趋。也许这个“浪潮”暂时还没有打到你这里来,但一旦它真正来临,只有你提前做好了知识储备,才能够迎难而进,站上浪头成为“弄潮儿”,否则就可能会被“拍在沙滩上”。

我和你说一下我自己的亲身经历吧。

早在 Docker 和 Kubernetes 发布之初,我就对它们有过关注。不过因为我的主要工作语言是 C/C++,而 Docker 和 Kubernetes 用的都是 Go,当时 Go 的性能还比较差(比如垃圾回收机制导致的著名 Stop the World),所以我只是简单了解了,没有去特别研究。

过了几年,一个偶然的机会,我们要在客户的环境里部署自研应用,但依赖库差异太大,很难搞定。这个时候我又想起了 Docker,经过一个多星期的折腾,艰难地啃下了一大堆资料之后,总算是把系统正常上线了。

虽然任务完成了,但也让我意识到自己从前对 Docker 的轻视是非常错误的,于是就痛下决心,开始从头、系统地学习整理容器知识,之后也就很自然地搭上了 Kubernetes 这条“大船”。

再后来,我想换新工作,面试的时候 Boss 出了道“偏门”题,讲 Kubernetes 的容器和环境安全。虽然我不熟悉这个方向,但凭借着之前的积累,只用了一个晚上就赶出了 20 多页的 PPT,第二天面对几位评委侃侃而谈,最终顺利拿下了 Offer。

你看,如果我当时一味固执己见,只呆在自己的“舒适区”里,不主动去学习容器技术和 Kubernetes,当机遇不期而至的时候,很可能就会因为手足无措而错失了升职加薪的良机。

所以也希望你不要犯我当初的错误,我们应当看清楚时代的走向,尽可能超前于时代,越早掌握 Kubernetes,将来自己成功的几率就越大。

学习 Kubernetes 有哪些难点

那么,我们应该怎么来学习 Kubernetes 呢?

其实今天学习 Kubernetes 的难度,比起前几年来说,已经是极大地下降了,网上资料非常多,有博客、专题、视频等各种形式,而且 Kubernetes 为了推广自身,在官网上还放出了非常详细的教程和参考手册,只要你肯花时间,完全可以“自学成才”。

不过,“理想很丰满,现实很骨感”。理论上讲,学习 Kubernetes 只要看资料就足够了,但实际情况却是学习起来仍然困难重重,我们会遇到很多意想不到的问题。

这是因为 Kubernetes 是一个分布式、集群化、云时代的系统,有许多新概念和新思维方式,和我们以往经验、认知的差异很大。

我觉得,Kubernetes 技术栈的特点可以用四个字来概括,那就是“新、广、杂、深”。

  • “新”是指 Kubernetes 用到的基本上都是比较前沿、陌生的技术,而且版本升级很快,经常变来变去。
  • “广”是指 Kubernetes 涉及的应用领域很多、覆盖面非常广,不太好找到合适的切入点或者突破口。
  • “杂”是指 Kubernetes 的各种实现比较杂乱,谁都可以上来“掺和”一下,让人看的眼晕。
  • “深”是指 Kubernetes 面对的每个具体问题和方向,都需要有很深的技术背景和底蕴,想要吃透很不容易。

这四个特点就导致 Kubernetes 的“门槛”相当高,学习曲线非常陡峭,学习成本非常昂贵,有可能花费了大量的时间和精力却南辕北辙、收效甚微,这点我确实是深有体会。

比如在初学的过程中我就遇到过这些疑问,不知道你有没有同感:

  • Docker、Containerd、K8s、K3s、MicroK8s、Minikube……这么多项目,该如何选择?
  • 容器的概念太抽象了,怎么才能够快速准确地理解?
  • 镜像的命名稀奇古怪,里面的“bionic”“buster”等都是什么意思?
  • 不知道怎么搭建出 Kubernetes 环境,空有理论知识,无法联系实际。YAML 文件又长又乱,到哪里能找到说明,能否遵循什么简单规律写出来?
  • Pod、Deployment、StatefulSet……这么多的对象,有没有什么内在的脉络和联系?

遗憾的是,这些问题很难在现有的 Kubernetes 资料里找到答案。

我个人感觉,它们往往“站得太高”,没有为“零基础”的初学者考虑,总会预设一些前提,比如熟悉 Linux 系统、知道编程语言、了解网络技术等等,有时候还会因为版本过时而失效,或者是忽略一些关键的细节。

这就让我们初学者经常“卡”在一些看似无关紧要却又非常现实的难点上,这样的点越积越多,最后就让人逐渐丧失了学习 Kubernetes 的信心和勇气。

所以,我就想以自己的学习经历为基础,融合个人感悟、经验教训和心得技巧,整理出一个初学者面对 Kubernetes 这门新技术的入门路线和系统思路,让你在学习时有捷径可走,不再有迷茫和困惑,能快速高效地迈入 Kubernetes 的宏伟殿堂。

分享一张我专栏《Kubernetes入门实战》的思维导图,如果你也对 Kubernetes 感兴趣,可以保存学习:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值