前言:春节期间因为疫情影响只能在家,正好用来进行网上视频复习,并在1月28日完成CKAD的考试,1月29日拿到通过证书,加上去年底拿到的CKA证书,我已经通过了CNCF的两大认证,即CKA和CKAD。应LF开源软件大学的邀请,写下这篇文章,介绍我为什么考CKA以及我的备考经验,希望可以帮助到有同样想法的同学。

首先为什么要学习云原生?

2011年著名互联网企业家和投资人Marc Andreessen在《华尔街日报》上指出“Software is eating the world”,他指出很多行业的创新领先者(例如广告行业的谷歌,视频行业的netflix)其实都是软件公司。而现在这个趋势越来越明显,即所有的行业都在进行数字化改造,每个行业的创新领先公司都是技术公司,是能充分利用互联网技术优势的互联网化的公司。而互联网公司中,研发是重要的基础部门。互联网研发的两个重要特点:1.是 Agile,即快速的迭代上线;2是scale,即能低成本进行快速弹性伸缩,流量激增的时候能快速扩容扛住,容量减少的时候也能快速缩容来降低成本。能比同行业的竞争对手进行更快的迭代和更低成本的伸缩是他们胜出的关键优势之一。

而要做到agile和scale,快速迭代的研发团队流程,弹性伸缩的基础设施还有易扩展和演进的系统架构,这三者缺一不可。而这三者的演进趋势:研发流程从瀑布到Agile,再到现在的DevOps;系统架构从单体到分层, 再到微服务;基础设施从实体机到虚机,再到容器和容器编排; 都无一不深刻的体现出“唯有更好的支持Agile & Scale,才是研发演进的方向“。而工程师以后不会有开发/测试/运维之分,只会有负责上层业务开发和维护的工程师和负责下层基础设施开发和维护的工程师之分了,而且即使是业务工程师也需要了解和完成部分底层基础设施的一些工作,(虽然严格来说基层技术设施和上层业务是解耦的。)所以每个工程师要在未来的5年内保持竞争力,都需要了解云原生的一些基础知识,了解和使用Docker和Kubernetes技术。

为什么要通过CKA + CKAD考试?

而要学习一门技术,尤其是一门在不断迭代而内容和范围又非常广泛的技术(Kubernetes版本发布很快,每年4个大版本),如果不从一开始即建立一个大的picture即完整的知识体系,而是从一些细小的地方从源码开始啃起,很容易陷入“只见树木不见森林”的地步,而且学习效率也会偏低。而如何建立起一个大的picture呢?先从外到内,即先会使用,然后了解其原理和机制,必要的时候才去定制。那么如何验证我已经从使用的角度来建立起大的picture呢?感谢CNCF的组织,他们有现成的Kubernetes学习和认证体系,即通过他们的认证,那么可以比较有信心的确认已经建立起一个完整的知识体系,从而为下一步的学习和研究打下很好的基础。而这个CNCF的认证体系就是CKA和CKAD。CKA适合系统管理员,CKAD适合应用开发者,两个考试相同的部分是对Kubernetes的架构和术语都要求熟练了解, 不同的地方是CKA中会有setup cluster,debug 和fix cluster问题的内容,而CKAD会有Pod Design方面的内容。

而我在百度内部编写大纲和教材,召集志愿者作为讲师,并组织完成了10期Kubernetes Bootcamp即入门训练营。每期采用线下授课方式,使用百度云Kubernetes集群作为实际环境,采用边讲边练的方式进行大量的实操,每期5个晚上,共5门课程12个小时。已经有500+工程师参加培训,口碑反馈特别好。而通过CKA和CKAD认证更能验证我组织的大纲和培训方式是有助于学员进行云原生基础知识的学习,为之后进一步业务上云做好思想上和技能上的准备。

准备考试的心得:

  1. 首先需要了解考试的特点。CKA和CKAD都是上机考试,没有选择/填空/问答之类的题目,全是上机面对Kubernetes集群的操作,所以记住一定要在Kubernetes集群里多练习,minikube和katacoda提供的单机和网上集群可以多使用。另外因为CKA有Initial setup和TLS  bootstrapping的内容,所以去AWS或则Azure上建虚拟机,直接搭建集群也是很有帮助的,而且有些debug的操作是需要在集群的master节点和node节点上ssh进去执行的,所以多自己搭建下是很有必要的。
  2. 其次需要了解考试大纲。CKA和CKAD都有自己的大纲,比较详细,需要针对大纲的每一个内容进行有针对性的学习和准备。别觉得目的性太强,要建立起使用者的知识体系,这些大纲对应的内容是必须要掌握的。
  3. 最后需要熟悉Kubernetes的官网文档,尤其是Task部分。因为考试时间比较紧张,CKA 3个小时,CKAD2个小时,普遍反应都是时间不够。上机考试环境中是没有时间让你从头来敲键盘输入YAML文件内容的,更多都是找到Task对应的部分,Copy 现成的YAML文件下来,然后快速修改,最后完成指定操作。例如CKA和CKAD都有使用Secret的部分,即创建Secret,然后在Pod中通过环境变量或者Volume的方式来使用。建议比较省时的方法即在kubernetes.io/docs使用“inject+secret”查到第一个结果,即Task中的一个例子,然后把该例子中的YAML 内容Copy到考试使用的终端上,然后再根据题目要求修改下,最后执行,这样能节省大量的时间。
  4. 另外别忘了CNCF提供了很优秀的线上视频课程,其中面向管理员的《Kubernetes 基础课程》(LFS258)和面向开发者的《kubernetes开发员课程》(LFS 259)是很有用的。在家封闭的这几天,把这些视频内容快速重温了下,再去通过线上考试就心里有底多了。

后记:

当然呢,通过CKA和CKAD考试,对于某些同学来说增强职场竞争力,甚至作为入职某些云企业的敲门砖是很有用的,但是从我的角度来说,建立起从使用角度的整个知识体系(而这个体系是经过大企业和开源基金会认证和背书 过的),从而为下一步的更深入学习建立基础,这才是我希望达到的目的,而毫无疑问,CKA和CKAD可以帮助我,确认我已经达到一定水准。

06-14 09:38