很长一段时间里,我对 CKA 这类认证都持观望态度。直到一位做后端开发的同事,姑且叫他 A 同学,因为团队要做容器化改造,硬着头皮报了名,结果第一场就挂了。他没考过不是不会用 kubectl,而是压根没弄清楚这场考试跟以前考过的所有证书都不一样——没有选择题,没有"背题库就能过"的路子,考试全程在真实集群里敲命令。我从他的教训里才真正搞明白,CKA 的备考逻辑完全不同于传统认证。这篇文章,我就把报名、备考、考场实战的完整经验,以及帮 A 同学复盘踩过的坑,一次性写清楚。
凡是准备考 CKA,或者已经报名但不知道从哪下手的读者,这篇文章应该能帮你少走不少弯路。下面我按"决定要不要考 → 认清考试形态 → 拆解复习重点 → 实操路线 → 考场技巧 → 考后复盘"的顺序来写。
1. 决定考CKA之前,先把这几件事想明白
1.1 这个认证考什么、适合谁
CKA 是 Kubernetes 官方推出的管理员认证,全称是 Certified Kubernetes Administrator。它最大的特点就是没有选择题、没有填空题,考试给你一个或多个真实的集群环境,你在命令行里完成一系列实操任务,系统根据你最终留下的集群状态自动打分。也就是说,你不仅要懂概念,还要能真的把事情做出来。
这个认证跟"看视频、背题库就能过"的证书有本质区别。可以这么理解:它像驾考里的路考,而不是科目一。考官不会问"离合器的作用是什么",而是让你把车从起点开到终点,倒个库、侧方停车,过程中操作错了就扣分。所以备考核心思路非常清晰:大量实操,把关键命令练成肌肉记忆。
至于哪些人值得考,我观察下来主要是三类:
- 运维工程师、SRE、平台工程师:日常跟集群打交道,证书是能力外化的抓手。
- 后端开发:虽然不直接管理集群,但负责服务部署和排障,考过 CKA 对理解整个发布链路帮助很大。
- 想往云原生方向转的人:这算是市场上辨识度比较高的容器相关认证。
如果是完全没接触过容器的小白,我不建议直接冲 CKA,最好先在实际项目里用上一段时间,知道 namespace、Pod、Deployment 这些概念大概是怎么回事,再来啃考试内容。
1.2 报名、费用与备考周期的实际状况
报名走的是 Kubernetes 官方认证平台,注册账号、预约考试时间,流程本身不复杂,但有几个细节容易忽略。一是热门考试时段——周末和晚上的名额通常排得很满,建议至少提前两周预约。二是报名政策里一般包含一次重考机会,也就是说第一场挂了还能再考一次,但具体条款每年可能调整,报名前一定看清楚。
费用方面,官方报名费在几百美元的量级,对自费考生来说不算便宜。所以我的建议是:复习到模拟考试成绩稳定在 80 分以上再去约考,不要抱着"先试试水"的心态浪费机会。我自己见过最快突击一周过的人,但那位平时就是天天用 Kubernetes 干活的老手。对大多数人来说,比较合理的备考节奏是每天投入 1 到 2 小时,坚持 4 到 6 周。太短的话,操作没有形成肌肉记忆;太长的话,前面练的又容易忘。
整个备考过程其实就是"理解 → 练习 → 模拟 → 查漏补缺"四步走。下面我就按这个顺序展开。
2. 考试的真实形态:挂第一次的人大多栽在这里
2.1 远程监考的环境准备细节
CKA 是远程在线考试,监考员通过摄像头全程盯着你。很多人第一步就栽在环境检查上。
考试开始前,系统会引导你完成一系列环境确认:摄像头画面要清晰,房间要安静,桌面上除了电脑、身份证件之外不能有杂物,手机一般会被要求放到伸手够不到的地方。监考员会在线查看周围环境,确认无误后才解锁考试。我听过有人因为桌面没清空被直接取消资格的,这一点真不是开玩笑。
网络稳定性是另一个容易被忽略的致命项。考试过程中一旦断网,虽然通常允许重连,但重连消耗的时间全部算你自己的,而且某些操作进度可能因此丢失。我的建议是:有条件就用有线网络,没有的话至少保证 Wi-Fi 信号满格,考试时段内家人不要看高清视频、下大文件。
还有一个细节:考试界面是英文的。这并不要求英语多好,但题目要能读懂。考前把常见术语过一遍,比如 taint、drain、persistent volume claim 这类,能减少很多紧张感。我陪 A 同学复盘时发现,他第一场考试就是被一个没见过的新词带偏了,误判了题目要求。
2.2 答题界面、官方文档与集群连接方式
进入考试后,你会看到题目正文和一个命令行终端。每道题都会标注它使用哪个集群,这一点极其关键。考试环境里有多个独立集群,每题对应其中一个,每个集群的 kubeconfig context 各不相同。做题的第一步永远是:确认当前 context 是不是题目要求的集群。
我见过包括 A 同学在内的很多考生,都栽在没切换 context 上。题目要求操作 cluster2,结果他在 cluster1 里敲了一堆命令,资源全部创建到了错误的集群里,系统判题时当然找不到。这个问题在后面讲到考场技巧时我会再详细说。
CKA 考试允许访问 Kubernetes 官方文档,这是一个很实用的政策。你可以直接从官方文档复制 YAML 片段,再改成自己需要的配置,能省下大量手写时间。但要注意,考试浏览器能访问的只有官方文档站点,其他网络内容基本打不开。所以平时练习就要养成查官方文档的习惯,不要指望考场上翻别的资料。
2.3 2小时的题目时间分配策略
CKA 考试时长 2 小时,题目数量一般在 16 到 20 道之间,满分 100 分,通过线是 67 分。这意味着你不需要每道题都会,但该拿的分一分都不能丢。
我的策略分三步:
第一轮,快速扫一遍全部题目,把有把握的题先做掉。这个阶段不用追求完美,按题目要求操作完就跳到下一题。 第二轮,回头处理第一轮没把握、但通过查文档和进一步分析能搞定的题。这轮是消耗时间的大头。 第三轮,留出至少 15 分钟做检查,特别是确认创建的资源状态正常,比如 Pod 是否 Running、Service 的 Endpoints 是否就绪。
单题时间控制上,熟练的考生基本能控制在 5 到 6 分钟以内。如果一道题卡了超过 10 分钟,我建议先标记跳过。考场上有时候就是脑子短路,跳过去做别的题,回来后可能突然就想到解法了。
3. 按考纲拆解复习重点:每个模块的常考形态
3.1 集群架构、安装与配置
这个模块在考纲里占的比重很大,考察的是管理员对集群生命周期的掌控能力。你需要掌握的操作包括:用 kubeadm 初始化集群、加入工作节点;管理 kubeconfig 文件,理解 context 的概念;处理证书问题,特别是 kubelet 证书;etcd 的备份与恢复;集群升级流程;节点维护操作 cordon、drain、uncordon。
我重点说两个高频且容易出错的操作。
第一个是 drain。drain 一个节点前,你经常会遇到命令报错,提示某些 DaemonSet 的 Pod 无法驱逐。这时候要认真读报错,通常加--ignore-daemonsets参数就能解决。但不能因此养成盲目加--force的习惯,因为--force会把一些本不该忽略的资源也一起驱逐掉,可能导致服务中断。做题时一定要根据实际报错选择参数。
第二个是 etcd 备份恢复。核心命令就是etcdctl snapshot save和etcdctl snapshot restore。但要注意,不同版本的 etcdctl 命令参数差异很大,考试环境里文档有明确的版本信息,照着文档执行,不要凭记忆手敲。我在练习时被旧命令格式坑过一次,从那以后每次都先确认 etcd 版本。
3.2 工作负载与调度的出题套路
工作负载模块主要考察怎么管理运行中的应用。Deployment 的创建、滚动更新、回滚几乎是必考。常见出题方式是:要求你把某个 Deployment 的镜像升级到指定版本,如果升级异常就回滚到上一个版本。这里考的是 rollout 命令族的熟练度——kubectl rollout status、kubectl rollout undo这些必须用得非常顺。
Job 和 CronJob 也常出现。建议把 CronJob 的 YAML 字段吃透,尤其是schedule的格式和jobTemplate结构,restartPolicy必须设为OnFailure或Never,否则创建会失败。这个字段很多人会漏,漏掉的直接后果是 CronJob 状态异常。
资源配额和 LimitRange 这类"限制"操作看起来简单,但考场上容易出细节问题。比如你创建了 ResourceQuota,结果后面的 Pod 因为超出配额创建不出来。这时候别怀疑集群坏了,先检查 quota 是否生效,再检查 Pod 的 request 和 limit 配置是否超出剩余额度。
调度部分通常考 nodeSelector、亲和性(affinity)、污点(taint)和容忍(toleration)。建议把这三者的关系彻底理清:污点是节点对 Pod 的限制,容忍是 Pod 对污点的豁免。考试常见场景是给节点添加污点,然后要求创建一个能调度到该节点的 Pod。理解了这个逻辑,YAML 配置就顺了。
3.3 服务发现与网络
Service 是 Kubernetes 流量入口的基本单位,考试必考。你需要非常熟悉 ClusterIP、NodePort、LoadBalancer 三种类型,并能正确配置端口映射和 selector 标签。最常见的坑是 selector 写错,导致 Endpoints 为空,Service 后面绑定的 Pod 永远无法被访问。做完题检查一下kubectl get endpoints,看是否为空,这是非常有效的验证手段。
Ingress 考点通常是创建 Ingress 资源,把特定域名和路径路由到某个 Service。要注意pathType的设置,前缀匹配和精确匹配差别很大,有时后端返回 404 就是这个问题。另外,如果题目要求 HTTPS 访问,记得先创建好对应的 Secret。
NetworkPolicy 是很多人的噩梦。我的理解方式是把它当成云防火墙规则:默认拒绝一切,显式允许才放行。考试常见要求是限制某个 Pod 只能访问特定标签 Pod 的端口。写 YAML 时,注意podSelector的标签选择范围、policyTypes的声明,以及 ingress/egress 规则的组合。一个容易忽略的细节是:如果你只写了 ingress 规则,没有写 egress,在某些网络插件下 egress 默认也是拒绝的。做题前先判断题目要求的是单向限制还是双向限制。
3.4 存储与持久化
存储模块占比不算最高,但几乎必考。PV 和 PVC 的静态供给是最基本的:创建 PV,指定容量和访问模式;创建 PVC 去绑定;再让 Pod 使用这个 PVC。关键点在于匹配,PV 和 PVC 的访问模式必须一致,比如 ReadWriteOnce、ReadOnlyMany;容量要满足 PVC 请求;storageClassName 如果不指定为空,还要注意默认 StorageClass 的情况。
动态供给这一块,要用 StorageClass 实现按需分配。考试时经常出现:要求创建指定 StorageClass 的 PVC,再让 Pod 挂载。这类题本身不复杂,但要确认 PVC 状态是 Bound,否则 Pod 会一直 Pending。我备考时就有一次,PVC 一直显示 Pending,查了半天发现是 StorageClass 名字拼错了,这种低级错误在考场上最容易让人慌乱。
还有一个小细节:Pod 挂载卷的类型。题目有时会明确要求用某种卷类型,比如 emptyDir 或 hostPath,跟着题目走,不要自己发挥。尤其要注意,hostPath 卷通常只在单节点练习环境里比较常见,多节点集群里需要关注路径在节点上是否存在。
3.5 故障排查:占分最高的实战硬仗
故障排查在考纲里占比最高,也最考验真实能力。这部分的题目通常给你一个已经出问题的集群或应用,要求定位并修复。常见场景包括:Pod 一直 Pending、CrashLoopBackOff、ImagePullBackOff;Service 无法访问;节点 NotReady;控制平面组件异常。
我的排查思路是固定的,可以给读者参考:先看 Pod 状态,再看详情和事件,然后看日志,最后检查依赖的底层资源,比如 PVC、ConfigMap、Secret 是否存在且内容正确。
以 CrashLoopBackOff 为例,第一件事绝对不是重启 Pod,而是看日志。日志会告诉你应用启动失败的确切原因,可能是环境变量没传、ConfigMap 挂载路径不对、或者命令参数写错。如果是 ImagePullBackOff,优先检查镜像名是否拼错、镜像仓库是否需要认证(imagePullSecrets)。如果 Pod 一直 Pending,重点看节点资源是否充足,以及有没有 PVC 绑定问题。
控制平面组件的排查更多属于系统层面。比如发现 kubelet 没起来,就要用systemctl status kubelet查看服务状态和日志。这类题目套路有限,多练几遍就能掌握。我的经验是:千万不要一上来就重启所有组件,盲目重启不仅浪费时间,还可能让原本能保留的现场信息丢失。
3.6 安全与RBAC
RBAC 是 CKA 的高频考点,几乎每次都会出现,很多人却在这上面失分。创建 Role、RoleBinding、ClusterRole、ClusterRoleBinding 这四类对象,关键是要分清楚作用范围:Role 和 RoleBinding 是命名空间级别的,ClusterRole 和 ClusterRoleBinding 是集群级别的。考试常见要求是:为某个用户创建一个只能管理特定命名空间内 Deployment 的角色,却把 Binding 写成了 ClusterRoleBinding,导致权限范围大大超出预期。
ServiceAccount 也要掌握。考试可能会要求为 Pod 指定某个 ServiceAccount,或者为 ServiceAccount 创建访问 API 所需的 Secret。这部分知识点不复杂,关键是理清 ServiceAccount、Secret、Pod 三者之间的关系。
安全上下文(SecurityContext)的考点包括:指定容器以某个 UID 运行、禁止特权模式、设置只读根文件系统等。这部分的 YAML 字段不复杂,但经常和其他准入控制内容混在一起考。安全模块的精髓不是死记硬背,而是理解每条规则生效的范围和对象。
4. 备考实操路线:从搭环境到模拟冲刺
4.1 为什么建议用kubeadm搭一套虚拟集群
备考最忌讳的是只在文档里看概念、只在模拟器里点鼠标。CKA 考的就是命令行操作,练习环境必须是一个真实集群。
最简单的方案是 minikube 或者 kind,安装快、占用资源少,适合刚入门时练手。但我强烈建议,考前至少用 kubeadm 手动搭建一次多节点集群,哪怕用虚拟机。原因有三:
第一,考试环境是一个带多个节点的标准集群,你需要熟练处理多个 context 的切换。如果平时只玩单节点 minikube,考试时面对多节点会非常不习惯。
第二,kubeadm 搭建过程本身就是对集群架构最好的复习。你会亲历kubeadm init、安装网络插件、kubeadm join,做完一遍,集群组件之间的协作关系就清楚了。
第三,etcd 备份恢复、节点维护、集群升级这些考点,在单节点 minikube 上很难模拟。
如果手头机器性能有限,用虚拟化软件创建两台各配 2GB 内存的虚拟机就够用了,一台作为控制平面节点,一台作为工作节点。这台练习集群建议一直保留到考试结束,后面复习还会用到,不用每次重新搭。
4.2 刷题的效率方法
刷题不等于背题库。CKA 的题目往往带变种,甚至多个知识点揉在一起。比如一道题可能同时要求你创建 PV、挂载到指定 Pod、再配置 NetworkPolicy——三个知识点串起来考。
我用的方法是"三遍法":
第一遍,对着参考答案或课程讲义,把题目做一遍,重点理解每一步为什么这么做。这一遍不要求速度,关键是搞清楚逻辑。
第二遍,合上讲义重做同一道题,允许查官方文档,但不允许看答案。这一遍关注操作流畅度,哪里卡壳就重点标记。
第三遍,限时模拟,每道题给自己设一个期限,尽量不查笔记,靠肌肉记忆完成。
三遍下来,一道题基本能形成长期记忆。要提醒的是,别只挑自己喜欢的模块练。故障排查和网络这类容易犯错的地方要多分配时间。我给自己定的比例是:工作负载与网络占 40%,故障排查占 30%,存储和 RBAC 占 20%,其余概念类占 10%。
市面上有一些模拟考试平台,提供接近真实考试的界面和评分机制。我建议考前一周至少做两三场完整的模拟考。模拟考的价值不只是练题,更是帮你适应紧张状态下的时间分配。我第一次模拟考成绩不理想,只拿了 60 多分,但也正是那次让我彻底看清问题:前面几道难题花了太久,后面的简单题反而没时间做。
4.3 模拟考试与查漏补缺
模拟考结束后,最重要的事情是逐题复盘。把每道题错在哪、为什么错、正确做法是什么,全部记下来。这个复盘过程比做题本身更有价值。
举我自己的例子:有一道题要求创建带特定标签的 Service,我当时用了--tcp=80:80,但没确认 selector 标签与后端 Pod 完全一致。模拟平台提示 Endpoints 为空,我才意识到标签选择器写错了。这个错误被记进了错题本,考试前又翻了一遍,确保不再犯。
考前最后两三天,不建议再碰新题。新题容易制造焦虑,而且学到的内容没有时间消化。这个阶段该做的是:把官方文档里常用页面的 URL 收藏好,浏览各模块的经典 YAML 写法,保持手感就够了。我当时还会把常用命令列在一张纸上,每天扫一遍,相当于考前热身。
5. 考场提效技巧与避坑清单
5.1 三行配置让kubectl操作效率翻倍
考场上的时间按分钟计费,能省一秒是一秒。进入考试环境后,第一件事就是配置 kubectl 的自动补全和别名。
# 配置bash自动补全 echo "source <(kubectl completion bash)" >> ~/.bashrc echo "alias k=kubectl" >> ~/.bashrc echo "complete -F __start_kubectl k" >> ~/.bashrc source ~/.bashrc配置完成后,平时用 kubectl 的地方都可以用 k 代替,输入k get pods、k create deployment会快不少。这个配置一定要提前练熟,考场上不假思索能敲出来才算合格。
另一个很关键的操作习惯是:当你需要创建资源但不想手写完整 YAML 时,先让 kubectl 生成模板。
# 生成Pod模板 kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod.yaml # 生成Deployment模板 kubectl create deployment web-app --image=nginx --replicas=2 --dry-run=client -o yaml > deploy.yaml # 生成Service(ClusterIP)模板 kubectl create service clusterip web --tcp=80:80 --dry-run=client -o yaml > svc.yaml生成模板后再按题目要求修改字段,最大的好处是避免手写 YAML 时字段拼错、缩进错乱。很多考生真正丢分的原因不是命令不会写,而是 YAML 格式问题。用模板生成的方式能从根本上杜绝这个问题。
5.2 快速生成YAML的实用命令
上面列的是最基础的三种,我再补充几个考场环境里非常实用、但很多人不一定想得到的:
# 生成指定命名空间的Pod模板 kubectl run pod1 --image=nginx --namespace=ns1 --dry-run=client -o yaml > pod1.yaml # 生成Job模板 kubectl create job myjob --image=nginx --dry-run=client -o yaml > job.yaml # 生成CronJob模板 kubectl create cronjob mycron --image=nginx --schedule="*/5 * * * *" --dry-run=client -o yaml > cronjob.yaml # 生成NodePort Service模板 kubectl create service nodeport svc1 --tcp=80:80 --node-port=30080 --dry-run=client -o yaml > svc1.yaml--dry-run=client -o yaml只会生成模板,不会真正创建资源。如果已经创建了某个资源,想查看它的完整字段,可以用kubectl get 资源名 -o yaml。这个命令在调试时很常用,比如确认某个 Pod 的完整 spec,或者检查 Service 后端 Pod 标签是不是匹配。
5.3 考场上最常见的四个翻车点
第一个:没有切换 context 就操作。这个问题前面反复强调,因为它真的高发。每道题开始前,看一眼题目里给出的集群名,然后kubectl config use-context切换到对应集群。养成习惯后,这道坎就不会再绊到你。
第二个:在错误的命名空间里创建资源。有些题目要求创建到指定 namespace,如果忘了创建 namespace 就直接创建资源,通常会失败或创建到 default。注意,创建 namespace 本身也可能就是题目的一部分,别一上来就跳过。
第三个:YAML 格式问题。用模板生成时不容易出错,但如果从官方文档复制粘贴或手写,字段对齐很容易出问题。我的经验是,从官方文档复制 YAML 后,先保存再打开确认格式,字段缩进没问题后再 apply。
第四个:做完题不验证。每道题做完后,花不超过 30 秒验证一下结果。创建了 Deployment 就kubectl get deploy -n 命名空间,确认副本数符合预期;创建了 PVC 就检查状态是不是 Bound。这个习惯能避免大量隐形扣分。
如果真遇到完全不会的题目,也不要直接放弃。先把题目要求的资源名和命名空间搞清楚,创建一个最简单的占位资源,至少能拿到一部分分数。CKA 是按点给分的,不是全对或全错。
6. 考后复盘:我的一次通过经验与后续建议
6.1 我的备考时间表复盘
我自己的备考周期是 5 周,每天平均 1.5 小时,周六周日多练一些。前两周以官方文档和基础课程为主,第三周开始系统性刷题,第四周做模拟考,最后一周查漏补缺。如果再让我来一遍,我会把模拟考提前到第三周,因为模拟考能最快暴露薄弱点,避免一直在舒适区里重复练习。
备考期间我犯过一个比较严重的错误:前期花了大量时间在存储和 RBAC 上,因为它们看起来简单,做起来有成就感。但后来模拟考发现,真正丢分最多的是网络策略和故障排查。这两个模块平常练起来比较痛苦,容易让人下意识逃避。所以我建议,制定复习计划前先自我摸底,把弱项标红,强制安排到每周固定时间里。
6.2 通过之后,别急着把命令忘了
考过 CKA 只是开始。我见过不少人考完就把 kubectl 扔到一边,过了大半年再操作集群,生疏得不行。认证的意义是证明你掌握了一套体系化的能力,但如果不用,它就只是一张纸。
我的建议是保持日常使用 Kubernetes 操作的习惯。哪怕只是自己维护一个小集群,把 Deployment、Service、Ingress、PVC 走一遍,也是对这套知识框架的持续维护。另外,CKA 证书有效期是 3 年,过期前可以关注官方续期政策,不过那是后话了。
最后再分享一个我帮 A 同学复盘时总结的收尾建议:考场上始终保持"先看题目、再切 context、再操作、最后验证"的四步流程。他第二次考试用上了这个习惯,顺利通过后跟我说,这套流程帮他在紧张状态下拦下了很多本来会丢掉的细节分。这个流程听起来很简单,但人一紧张就容易乱,只有平时练成肌肉记忆,考场上才顶得住。