跳转至

CKA 实战培训教程

适用目标

这篇教程的目标不是只帮你“看懂 CKA 是什么”,而是尽量让你通过一套可执行的训练路径,掌握 CKA 所覆盖的核心知识点,尤其是操作题部分。

如果你是下面这类人,这篇内容会比较适合:

  • 已经有一些 Kubernetes 使用经验,但实操不够系统
  • 平时更多在用 Helm、Argo CD、平台工具,对底层命令不够熟
  • 想尽快补齐 CKA 的考试思维,而不是只零散刷题

先理解考试

根据 Linux Foundation 官方说明,CKA 是一场在线、监考、基于命令行的实操考试,考试时长 2 小时,当前考试环境基于 Kubernetes v1.34。题目不是选择题,而是在给定集群环境里完成实际任务。
当前官方能力域可以概括为:

  • Cluster Architecture, Installation & Configuration:25%
  • Workloads & Scheduling:15%
  • Services & Networking:20%
  • Storage:10%
  • Troubleshooting:30%

从备考收益看,TroubleshootingCluster ArchitectureServices & Networking 最值得优先投入。

备考总策略

正确思路

CKA 不是比“谁背得多”,而是比:

  • 能不能快速定位题意
  • 能不能用最短命令完成任务
  • 改完之后会不会验证
  • 卡住时能不能及时跳题

训练原则

你做每一道练习题时,建议固定遵守这个顺序:

  1. 先看题目要求,确认是在“创建、修改、排查”哪一类任务
  2. 先切到正确上下文和命名空间
  3. 优先用最熟的 kubectl 原生命令完成
  4. 完成后立刻验证,不要凭感觉交卷
  5. 超过 5 分钟没进展就先跳题

考试环境准备

先练熟这些习惯

alias

alias k=kubectl
complete -o default -F __start_kubectl k

高频命令脑内模板

k get pods -A
k get pod <pod-name> -n <ns> -o wide
k describe pod <pod-name> -n <ns>
k logs <pod-name> -n <ns>
k logs <pod-name> -n <ns> --previous
k get events -A --sort-by=.lastTimestamp
k get all -n <ns>
k explain <resource>
k api-resources
k api-versions

快速生成 YAML

k create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yaml
k run test --image=busybox --restart=Never --dry-run=client -o yaml -- sh

这类命令的价值非常大,因为 CKA 操作题很多时候不是从零默写 YAML,而是先生成骨架再修改。

训练路线图

建议你按下面顺序练:

  1. 先搭好一套接近考场的练习环境
  2. 再练 kubectl 基本操作和 YAML 修改速度
  3. 再练工作负载、调度、Service、Ingress、PVC
  4. 再练 kubeadm、RBAC、NetworkPolicy、CoreDNS
  5. 最后重点练故障排查和限时模拟

  6. CKA 类考场环境部署教程

  7. CKA 高频命令速查表
  8. CKA 模拟考题与标准解法
  9. CKA 30 道操作题训练营

一、Cluster Architecture, Installation & Configuration

这部分在考试里经常不是“纯理论”,而是带有明显操作色彩的集群管理题。

你必须掌握的知识点

  • Kubernetes 控制面和工作节点的组成
  • kubeadm 初始化、加入节点、升级集群
  • RBAC
  • kubeconfig / context 切换
  • Helm 和 Kustomize 基本使用
  • CRD / Operator 的基本认知
  • CNI / CSI / CRI 的职责边界
  • 高可用控制面基本设计

你要会做的操作

1. 查看和切换上下文

k config get-contexts
k config use-context <context-name>
k config current-context

这是考试最容易丢分的地方之一。很多人不是不会,而是改错集群。

2. 创建和授权 ServiceAccount / Role / RoleBinding

k create serviceaccount app-sa -n dev
k create role pod-reader --verb=get,list,watch --resource=pods -n dev
k create rolebinding read-pods \
  --role=pod-reader \
  --serviceaccount=dev:app-sa \
  -n dev

然后验证:

k auth can-i get pods --as=system:serviceaccount:dev:app-sa -n dev

3. 使用 kubeadm 管理集群

你至少要知道这些动作怎么做:

  • kubeadm init
  • kubeadm join
  • kubeadm token create --print-join-command
  • kubeadm upgrade plan
  • kubeadm upgrade apply

考试视角的操作重点

  • 不要求你把 HA 架构完全从零搭到生产级,但要理解 HA 的基本结构
  • 常见考点更偏向 kubeadm 生命周期、证书、节点加入和升级
  • RBAC 一定要练到“看到题就能秒出命令”

建议练习题

练习 1

team-a 命名空间创建一个 ServiceAccount,只允许读取 Pod 列表。

练习 2

给出一个 kubeconfig 文件,切换到指定集群后查询某个 namespace 的 Pod。

练习 3

在一台控制面节点上查看 kubeadm upgrade plan,并说出升级前的检查项。

二、Workloads & Scheduling

这部分是 CKA 的基础操作区,要求你非常熟悉工作负载对象和调度策略。

你必须掌握的知识点

  • Pod、Deployment、DaemonSet、StatefulSet、Job、CronJob
  • labels / selectors
  • rolling update / rollback
  • ConfigMap / Secret
  • requests / limits
  • nodeSelector / affinity / anti-affinity
  • taint / toleration
  • autoscaling 基础

你要会做的操作

1. 创建 Deployment 并暴露镜像

k create deployment web --image=nginx:1.25
k set image deployment/web nginx=nginx:1.26
k rollout status deployment/web
k rollout history deployment/web
k rollout undo deployment/web

2. 修改副本数

k scale deployment web --replicas=3

3. 用 ConfigMap 配置环境变量

k create configmap app-config --from-literal=env=prod

然后在 Pod 里通过 envFromvalueFrom 引用。

4. 为 Pod 指定调度约束

k label node node1 disktype=ssd

Pod 中写:

nodeSelector:
  disktype: ssd

或者使用:

  • nodeAffinity
  • podAntiAffinity
  • tolerations

高频易错点

  • selectortemplate.labels 不一致
  • Deployment 改了镜像但没验证 rollout
  • Secret 值需要 base64 编码
  • 把调度失败误判成容器启动失败

建议练习题

练习 1

创建一个 Deployment,副本数 3,镜像 nginx:1.25,然后滚动升级到 1.26,最后回滚。

练习 2

让一个 Pod 只能调度到带 gpu=true 标签的节点。

练习 3

创建一个 CronJob,每 5 分钟执行一次 busybox 输出时间。

三、Services & Networking

这部分经常会出操作题和排障题,很多人不是不会概念,而是不会验证链路。

你必须掌握的知识点

  • Pod 网络模型
  • ClusterIP / NodePort / LoadBalancer
  • Ingress
  • Gateway API 基本认知
  • Endpoints / EndpointSlice
  • CoreDNS
  • NetworkPolicy
  • kube-proxy 基本工作方式

你要会做的操作

1. 暴露 Deployment

k expose deployment web --port=80 --target-port=80 --name=web-svc

2. 创建 NodePort Service

apiVersion: v1
kind: Service
metadata:
  name: web-nodeport
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080

3. 查看 Endpoints

k get svc,endpoints,endpointslices

这个动作非常关键。Service 不通时,先看它有没有正确关联到后端 Pod。

4. 编写 NetworkPolicy

典型场景:

  • 只允许某个 namespace 访问某个 Pod
  • 只允许 80 端口流量进入
  • 默认拒绝所有 ingress

Service 不通时的排查顺序

  1. Pod 是否 Running 且 Ready
  2. labels 是否匹配 Service selector
  3. Endpoints 是否生成
  4. 容器监听端口和 Service targetPort 是否一致
  5. 是否存在 NetworkPolicy 限制
  6. CoreDNS、kube-proxy、CNI 是否异常

建议练习题

练习 1

部署一个 nginx Pod,用 ClusterIP 暴露,然后用临时 Pod 访问它。

练习 2

给某个 namespace 写一条默认拒绝 ingress 的 NetworkPolicy,再单独放通某个 Pod 的 80 端口访问。

练习 3

排查一个“Service 有对象但访问失败”的场景,确认问题在 selector、port 还是网络策略。

四、Storage

Storage 在 CKA 里权重不算最高,但它很容易因为不熟导致白白丢分。

你必须掌握的知识点

  • Volume / PV / PVC / StorageClass
  • access modes
  • reclaim policy
  • 动态供给
  • 常见 Volume 类型

你要会做的操作

1. 创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

2. 在 Pod 中挂载 PVC

volumes:
  - name: data
    persistentVolumeClaim:
      claimName: data-pvc
containers:
  - name: app
    image: nginx
    volumeMounts:
      - name: data
        mountPath: /usr/share/nginx/html

3. 查看绑定情况

k get pv
k get pvc
k describe pvc data-pvc

排障思路

PVC 一直 Pending 时,优先看:

  • 是否存在可用 PV
  • StorageClass 是否配置正确
  • 请求容量是否匹配
  • access mode 是否匹配
  • 动态供给驱动是否正常

建议练习题

练习 1

创建一个 PVC,让指定 Pod 挂载到 /data

练习 2

给一个 PVC 故意写错 StorageClass,然后排查它为什么 Pending。

五、Troubleshooting

这是 CKA 权重最高的一块,也是最能体现操作能力的部分。

你必须掌握的知识点

  • 集群组件故障排查
  • 节点故障排查
  • Pod 故障排查
  • 容器日志和事件查看
  • 资源使用监控
  • Service 和网络排障
  • CoreDNS 问题排查

统一排障顺序

任何 Kubernetes 故障题,建议先走这条主线:

  1. 明确影响面
  2. 看资源状态
  3. describe
  4. logs
  5. events
  6. 看关联资源
  7. 修复后验证

高频排障题模板

1. Pod Pending

先查:

k describe pod <pod-name> -n <ns>

重点看:

  • FailedScheduling
  • 资源不足
  • taint / toleration
  • affinity / anti-affinity
  • PVC 绑定失败

2. CrashLoopBackOff

先查:

k logs <pod-name> -n <ns>
k logs <pod-name> -n <ns> --previous
k describe pod <pod-name> -n <ns>

重点看:

  • 应用启动报错
  • 探针失败
  • 配置错误
  • OOMKilled

3. Node NotReady

先查:

k get nodes
k describe node <node-name>

再看:

  • kubelet 状态
  • container runtime 状态
  • 磁盘空间
  • 网络连通性

4. Service 不通

先查:

k get svc,endpoints -n <ns>
k get pod -o wide -n <ns>

再确认:

  • selector 是否匹配
  • Pod 是否 Ready
  • targetPort 是否正确
  • NetworkPolicy 是否阻断

考试里最值钱的排障命令

k get events -A --sort-by=.lastTimestamp
k describe pod <pod>
k describe node <node>
k logs <pod> --previous
k top nodes
k top pods -A
k get endpoints -A
k get networkpolicy -A
k get pvc,pv

高频操作技巧

技巧 1:先生成再修改

能用 --dry-run=client -o yaml 就不要手写整份 YAML。

技巧 2:优先改最小范围

如果题目要求“修复某个 Deployment”,不要顺手改一堆无关资源。

技巧 3:完成后立刻验证

例如:

  • Deployment:k rollout status deployment/<name>
  • Service:curl 或临时 Pod 测试
  • PVC:k get pvc
  • RBAC:k auth can-i

技巧 4:善用临时测试 Pod

k run tmp --image=busybox:1.36 -it --rm --restart=Never -- sh

这在测试 DNS、Service、端口连通性时非常好用。

技巧 5:不会 YAML 字段时先 explain

k explain deployment.spec.template.spec
k explain networkpolicy.spec

30 天训练计划

第 1 周

  • 熟悉 kubectl、context、namespace
  • 练 Pod、Deployment、Service、ConfigMap、Secret
  • 练 YAML 快速生成与修改

第 2 周

  • 练调度、资源限制、Job、CronJob
  • 练 RBAC、NetworkPolicy、PVC、StorageClass
  • 每天做 3 到 5 道小题

第 3 周

  • 练 kubeadm、节点维护、升级思路
  • 练 CoreDNS、Service、网络排障
  • 开始做限时题

第 4 周

  • 重点刷 Troubleshooting
  • 做整套模拟
  • 整理自己的错题命令模板

临考前检查清单

  • 我能快速切换 context 和 namespace
  • 我能熟练生成 Deployment / Pod / PVC YAML
  • 我能独立完成 RBAC 授权
  • 我能排查 Pending / CrashLoopBackOff / Service 不通
  • 我知道如何验证每一道题是否完成
  • 我能在 2 小时内合理跳题和回头做题

这篇教程怎么继续用

如果你想把这篇教程真正变成“可过证”的训练材料,下一步最值得补的是这 3 类内容:

  1. CKA 高频命令速查表
  2. CKA 模拟考题与标准解法
  3. CKA 30 道操作题训练营

这三部分补齐之后,这套内容就会从“教程”升级成“完整备考手册”。