【K8S】CKA题库练习16题知识总结,Kubernetes-1.32版,服务部署、暴露、存储、网络、集群修复
文章目录
- 【K8S】CKA题库练习16题知识总结,Kubernetes-1.32版,服务部署、暴露、存储、网络、集群修复
-
- [一、CKA 需要掌握的核心能力](#一、CKA 需要掌握的核心能力)
-
- [1. 能做部署与交付](#1. 能做部署与交付)
- [2. 能做运维与排障](#2. 能做运维与排障)
- [3. 能做存储与配置管理](#3. 能做存储与配置管理)
- [4. 能做网络与流量治理](#4. 能做网络与流量治理)
- [5. 能理解调度与资源](#5. 能理解调度与资源)
- [二、CKA 的核心知识点清单](#二、CKA 的核心知识点清单)
-
- [1. 工作负载](#1. 工作负载)
- [2. 网络](#2. 网络)
- [3. 存储](#3. 存储)
- [4. 配置与元数据](#4. 配置与元数据)
- [5. 调度与资源管理](#5. 调度与资源管理)
- [6. 集群管理与修复](#6. 集群管理与修复)
- [三、16 题分别考什么:题型总表](#三、16 题分别考什么:题型总表)
- [四、16 题的详细笔记与常用写法](#四、16 题的详细笔记与常用写法)
-
- [1. HPA 自动扩缩容](#1. HPA 自动扩缩容)
- [2. Ingress](#2. Ingress)
- [3. sidecar](#3. sidecar)
- [4. StorageClass](#4. StorageClass)
- [5. Service](#5. Service)
- [6. PriorityClass](#6. PriorityClass)
- [7. Argo CD](#7. Argo CD)
- [8. PVC](#8. PVC)
- [9. Gateway API](#9. Gateway API)
- [10. NetworkPolicy](#10. NetworkPolicy)
- [11. CRD](#11. CRD)
- [12. ConfigMap](#12. ConfigMap)
- [13. Calico](#13. Calico)
- [14. requests 资源](#14. requests 资源)
- [15. etcd 修复](#15. etcd 修复)
- [16. cri-dockerd](#16. cri-dockerd)
- 五、复习时最值得记的操作清单
这份题库最值得带走的,不是每道题的固定答案,而是 CKA 里反复考的那套能力模型:看到题目,先判断它属于哪一类资源,再用最短路径把对象改对、验对。
CKA 题目本质上是在考你能不能用 Kubernetes 完成部署、暴露服务、存储挂载、网络控制、集群修复和基础系统准备。


参考资料:1
一、CKA 需要掌握的核心能力
CKA 考的不是"背 YAML",而是你是否具备一套完整的 Kubernetes 操作能力。把它拆开看,主要是下面这几层。
1. 能做部署与交付
你需要能把一个应用从"有镜像"变成"可运行服务":
- 创建和修改
Deployment - 调整副本数、镜像、容器端口、环境变量、资源请求
- 使用
Service对外暴露应用 - 使用
Ingress、Gateway API按域名和路径接入流量 - 使用
Helm安装标准组件
常用命令:
bash
kubectl create deployment nginx --image=nginx:1.27
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80
kubectl scale deployment nginx --replicas=3
kubectl rollout restart deployment nginx
kubectl get deployment,pod,svc -o wide
2. 能做运维与排障
你要能定位问题在"资源没建好、控制器没生效、还是节点/组件异常":
- 用
get看对象是否存在 - 用
describe看事件和调度失败原因 - 用
logs看容器输出 - 用
exec进入容器验证配置 - 用
rollout status确认发布是否完成 - 能修复
kube-apiserver、kube-scheduler、etcd、kubelet这类基础组件
常用命令:
bash
kubectl get nodes
kubectl -n kube-system get pod
kubectl describe pod <pod-name>
kubectl logs <pod-name> -c <container-name>
kubectl exec -it <pod-name> -- sh
kubectl rollout status deployment/<name>
3. 能做存储与配置管理
K8s 里最常见的"状态"不只是 Pod,还有卷和配置:
- 理解
PV / PVC / StorageClass - 会把 PVC 绑到已有 PV
- 会给 Pod 挂载持久卷
- 会更新
ConfigMap,并知道何时要重启 Pod - 会识别
ConfigMap immutable的处理方式
常用命令:
bash
kubectl get pv
kubectl get pvc -n mariadb
kubectl get storageclass
kubectl get configmap nginx-config -n nginx-static -o yaml
kubectl delete configmap nginx-config -n nginx-static
kubectl apply -f nginx-config.yaml
4. 能做网络与流量治理
这是 CKA 的高频大头,核心是"让流量按你想的方式进来,也按你想的方式出去":
Service的ClusterIP、NodePortIngress的host、path、ingressClassNameGateway、HTTPRouteNetworkPolicy的 ingress / egress 控制CNI安装与网络策略支持
常用命令:
bash
kubectl get ingressclass
kubectl get ingress -A
kubectl get networkpolicy -A
kubectl get ns frontend backend --show-labels
kubectl get pod -n frontend --show-labels
kubectl get pod -n backend --show-labels
5. 能理解调度与资源
你要知道 Pod 为什么能起、为什么起不来、为什么被挤掉:
resources.requests和limitsPriorityClassHPAtaint / tolerationaffinity / anti-affinity- 节点资源不足时如何调整请求值
常用命令:
bash
kubectl get priorityclass
kubectl describe node <node-name>
kubectl -n autoscale get hpa
kubectl -n priority edit deployment busybox-logger
二、CKA 的核心知识点清单
这部分可以当成你的复习目录。题库中的考点基本都能归到下面这些对象上。每个对象后面我都补了一个最短解释,先知道它是什么,再去看命令会更顺。
1. 工作负载
Pod:Kubernetes 里最小的运行单元,真正承载容器的地方,一个 Pod 里可以有一个或多个容器。Deployment:管理无状态应用的控制器,负责创建副本、滚动更新、回滚和自愈。ReplicaSet:负责维持固定数量的 Pod,通常由 Deployment 间接管理,考试里更多是理解它的作用。DaemonSet:保证每个节点上都跑一个 Pod,适合日志、监控、网络插件这类节点级任务。StatefulSet:用于有状态应用,Pod 名字、顺序和存储都更稳定,适合数据库、消息队列。Job / CronJob:Job用来跑一次性任务,CronJob用来按时间周期执行任务。sidecar:并置辅助容器,和主容器共享网络和存储,常用于日志收集、代理、同步文件。HPA:Horizontal Pod Autoscaler,根据 CPU 或其他指标自动调整 Pod 副本数。
重点能力:
- 改模板
- 改副本
- 改镜像
- 改端口
- 改容器挂载
- 做自动扩缩容
2. 网络
Service:给一组 Pod 提供稳定访问入口,负责服务发现和负载均衡。Ingress:基于域名和路径把外部流量转到 Service,常用于 HTTP/HTTPS 入口。Gateway:比 Ingress 更现代的流量入口模型,和HTTPRoute配合使用。HTTPRoute:定义具体路由规则,决定请求怎么转发到后端服务。NetworkPolicy:控制 Pod 之间能不能互相访问,用来做最小授权网络策略。CNI:容器网络接口插件,负责 Pod 网络连通性和是否支持 NetworkPolicy。
重点能力:
- 暴露服务
- 路由域名和路径
- 做最小授权网络访问
- 安装支持策略的网络插件
3. 存储
PV:PersistentVolume,集群级别的持久卷,表示一块真实或虚拟存储。PVC:PersistentVolumeClaim,用户对存储的申请,Pod 通常通过 PVC 间接使用 PV。StorageClass:定义动态供给存储的模板和策略,也能设置默认存储类。emptyDir:Pod 生命周期内的临时共享目录,Pod 删除后数据就没了。- 卷挂载:把存储挂到容器里的指定路径,常用于数据目录、配置目录、日志目录。
重点能力:
- 绑定已有 PV
- 修改
storageClassName - 默认 StorageClass
- 把 PVC 接到 Deployment
4. 配置与元数据
ConfigMap:保存普通配置文本,比如 NGINX 参数、环境变量、配置文件片段。Secret:保存敏感信息,比如密码、token、证书。annotations:给资源附加说明性元数据,通常不参与选择器匹配。labels:给资源打标签,方便筛选、选择器匹配和策略控制。namespace:命名空间,用来隔离资源和控制管理边界。
重点能力:
- 用标签筛选对象
- 用 namespace 隔离资源
- 更新配置并触发生效
5. 调度与资源管理
PriorityClass:定义 Pod 的优先级,决定资源紧张时谁先被调度、谁先活下来。requests / limits:资源请求和上限,请求影响调度,限制影响运行时使用。taints / tolerations:节点污点和容忍度,用来控制哪些 Pod 能上哪些节点。nodeSelector:按节点标签做简单定向调度。affinity:更灵活的亲和和反亲和规则,用来控制调度偏好。
重点能力:
- 让工作负载按优先级运行
- 给出合理资源请求
- 确保 Pod 能调度成功
6. 集群管理与修复
etcd:Kubernetes 的数据存储后端,控制面状态都依赖它。kube-apiserver:集群入口,kubectl最终都要访问它。kube-scheduler:负责决定 Pod 调度到哪个节点。kubelet:节点上的核心代理,负责让 Pod 在本机运行起来。cri-dockerd:Docker 时代的容器运行时适配层,给 kubeadm 使用。- 系统参数
sysctl:Linux 内核参数,影响转发、网络和连接跟踪。
重点能力:
- 看懂静态 Pod 清单
- 修复控制面组件
- 恢复节点和集群状态
- 准备底层系统环境
三、16 题分别考什么:题型总表
下面这张表更适合你复习时快速对照。它把 16 题拆成"考点类型 + 核心能力 + 常见操作"。
| 序号 | 题目类型 | 主要考点 | 核心能力 |
|---|---|---|---|
| 1 | HPA 自动扩缩容 | HPA、CPU 阈值、stabilization window |
会做自动扩缩容和参数调整 |
| 2 | Ingress | Ingress、ingressClassName、path rewrite |
会按域名路径暴露服务 |
| 3 | sidecar | Deployment、并置容器、日志采集 |
会改 Pod 模板并加 sidecar |
| 4 | StorageClass | StorageClass、默认类、WaitForFirstConsumer |
会创建存储类并设默认 |
| 5 | Service | Service、NodePort、containerPort |
会把 Deployment 暴露成服务 |
| 6 | PriorityClass | PriorityClass、priorityClassName |
会配置 Pod 优先级 |
| 7 | Argo CD | Helm、repo add、template、install |
会用 Helm 安装标准组件 |
| 8 | PVC | PVC、PV、Deployment 挂载卷 |
会恢复有状态工作负载 |
| 9 | Gateway API | Gateway、HTTPRoute、HTTPS |
会从 Ingress 迁移到 Gateway |
| 10 | NetworkPolicy | 命名空间/Pod 标签、默认拒绝策略 | 会写最小授权网络策略 |
| 11 | CRD | kubectl get crd、kubectl explain |
会查看自定义资源定义 |
| 12 | ConfigMap | NGINX 配置、immutable、重启生效 | 会更新配置并触发生效 |
| 13 | Calico | CNI 安装、NetworkPolicy 支持 | 会安装支持策略的 CNI |
| 14 | requests 资源 | resources.requests、副本与配额 |
会按节点资源调 Pod 请求 |
| 15 | etcd 修复 | 静态 Pod、etcd、kube-scheduler | 会修复控制面故障 |
| 16 | cri-dockerd | dpkg、systemctl、sysctl |
会准备 Kubernetes 底层系统 |
四、16 题的详细笔记与常用写法
1. HPA 自动扩缩容
典型要点:
- 在指定 namespace 创建 HPA
- 绑定已有 Deployment
- 设置 CPU 使用率目标
- 设置最小和最大副本数
- 调整
scaleDown.stabilizationWindowSeconds
常用命令:
bash
kubectl -n autoscale autoscale deployment apache-server --cpu-percent=50 --min=1 --max=4
kubectl -n autoscale edit hpa apache-server
kubectl -n autoscale describe hpa apache-server
常见 YAML 片段:
yaml
behavior:
scaleDown:
stabilizationWindowSeconds: 30
2. Ingress
核心是:域名 + 路径 + Service + 端口 + IngressClass。
bash
kubectl get ingressclass
kubectl get ingress -n sound-repeater -o yaml
kubectl apply -f ingress.yaml
curl http://example.org/echo
常见 YAML:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo
namespace: sound-repeater
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: example.org
http:
paths:
- path: /echo
pathType: Prefix
backend:
service:
name: echoserver-service
port:
number: 8080
3. sidecar
核心是给现有 Deployment 增加一个日志并置容器,通常会用 emptyDir 共享文件。
bash
kubectl get deployment synergy-leverager -o yaml > sidecar.yaml
kubectl apply -f sidecar.yaml
kubectl logs <pod-name> -c sidecar
常见 YAML:
yaml
spec:
template:
spec:
containers:
- name: app
image: ...
volumeMounts:
- name: varlog
mountPath: /var/log
- name: sidecar
image: busybox:stable
args:
- /bin/sh
- -c
- tail -n+1 -f /var/log/synergy-leverager.log
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
4. StorageClass
核心是创建新的 StorageClass,并设为默认类。
bash
kubectl get storageclass
kubectl apply -f sc.yaml
kubectl get storageclass
常见 YAML:
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ran-local-path
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
5. Service
核心是把 Deployment 暴露成可访问服务。
bash
kubectl -n spline-reticulator edit deployment front-end
kubectl -n spline-reticulator expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc
kubectl -n spline-reticulator get svc front-end-svc -o wide
常见片段:
yaml
ports:
- containerPort: 80
protocol: TCP
6. PriorityClass
先看现有用户自定义优先级,再创建一个更小一点的新类。
bash
kubectl get priorityclass
kubectl apply -f priority.yaml
kubectl -n priority edit deployment busybox-logger
常见 YAML:
yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 999999999
globalDefault: false
description: one less
Deployment 里加:
yaml
spec:
template:
spec:
priorityClassName: high-priority
7. Argo CD
核心是 Helm 安装标准组件。
bash
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm search repo argo | grep argo-cd
helm template argocd argo/argo-cd --version 5.5.22 --namespace argocd --set crds.install=false > ~/argo-helm.yaml
helm install argocd argo/argo-cd --version 5.5.22 --namespace argocd --set crds.install=false
kubectl -n argocd get pods
8. PVC
核心是根据 PV 创建 PVC,再把 PVC 挂回 Deployment。
bash
kubectl get pv
kubectl apply -f pvc.yaml
kubectl apply -f ~/mariadb-deployment.yaml
kubectl -n mariadb get pvc,pod,deploy
常见 PVC:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb
namespace: mariadb
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 250Mi
Deployment 中的卷:
yaml
volumes:
- name: mariadb-data
persistentVolumeClaim:
claimName: mariadb
9. Gateway API
核心是从 Ingress 迁移到 Gateway + HTTPRoute,同时保留 HTTPS。
bash
kubectl get ingress web -o yaml
kubectl apply -f gateway.yaml
kubectl apply -f httproute.yaml
curl -Lk https://gateway.web.k8s.local:31443
kubectl delete ingress web
Gateway 示例:
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: web-gateway
spec:
gatewayClassName: nginx
listeners:
- name: https
protocol: HTTPS
port: 443
hostname: gateway.web.k8s.local
tls:
mode: Terminate
certificateRefs:
- name: web-cert
HTTPRoute 示例:
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: web-route
spec:
parentRefs:
- name: web-gateway
hostnames:
- gateway.web.k8s.local
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: web
port: 80
10. NetworkPolicy
核心是"最小权限",通常要匹配 namespace label 和 pod label。
bash
kubectl get ns frontend backend --show-labels
kubectl -n frontend get pod --show-labels
kubectl -n backend get pod --show-labels
kubectl apply -f ~/netpol/netpol2.yaml
kubectl -n backend get networkpolicy
常见策略思路:
- 允许 frontend namespace 的 Pod 访问 backend namespace 的 Pod
- 只放行带指定 label 的 Pod
- 不能删除默认拒绝策略
11. CRD
核心是查看 CRD 列表和对象说明。
bash
kubectl get crd | grep cert-manager > ~/resources.yaml
kubectl explain certificate.spec.subject > ~/subject.yaml
cat ~/resources.yaml
cat ~/subject.yaml
12. ConfigMap
核心是修改 NGINX 配置并重启 Deployment。
bash
kubectl -n nginx-static get configmap nginx-config -o yaml > nginx-config.yaml
kubectl -n nginx-static delete configmap nginx-config
kubectl apply -f nginx-config.yaml
kubectl -n nginx-static rollout restart deployment nginx-static
curl -k --tls-max 1.2 https://web.k8snginx.local
常见配置:
nginx
ssl_protocols TLSv1.3;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
13. Calico
核心是安装支持 NetworkPolicy 的 CNI,并按集群 CIDR 配置自定义资源。
bash
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
kubectl create -f tigera-operator.yaml
kubectl cluster-info dump | grep -i cluster-cidr
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
kubectl create -f custom-resources.yaml
kubectl -n calico-system get pod
14. requests 资源
核心是计算节点剩余资源,并把请求值调到合理范围。
bash
kubectl -n relative-fawn scale deployment wordpress --replicas=0
kubectl describe node base
kubectl -n relative-fawn edit deployment wordpress
kubectl -n relative-fawn scale deployment wordpress --replicas=3
kubectl -n relative-fawn get pod
常见请求片段:
yaml
resources:
requests:
cpu: 100m
memory: 200Mi
15. etcd 修复
核心是静态 Pod 修复和组件重启。
bash
sudo -i
sh etcd-set.sh
vim /etc/kubernetes/manifests/kube-apiserver.yaml
systemctl daemon-reload
systemctl restart kubelet
vim /etc/kubernetes/manifests/kube-scheduler.yaml
kubectl get nodes
kubectl -n kube-system get pod
16. cri-dockerd
核心是系统准备、包安装和 sysctl 持久化。
bash
sudo dpkg -i ~/cri-dockerd_0.3.6.3-0.ubuntu-jammy_amd64.deb
sudo systemctl enable cri-docker
sudo systemctl start cri-docker
sudo systemctl status cri-docker
sudo vim /etc/sysctl.conf
sudo sysctl -p
常见 sysctl:
conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_max = 131072
五、复习时最值得记的操作清单
把 CKA 的能力压缩成一句话,就是你能不能熟练完成下面这些动作:
bash
kubectl get / describe / edit / apply / delete / scale / expose / logs / exec
kubectl rollout restart deployment/<name>
kubectl get ns,pod,svc,deploy,pvc,pv,sc,ingress,networkpolicy -A
kubectl explain <resource>
kubectl get <resource> -o yaml
只要你能稳定完成这些操作,再配合对 Deployment、Service、Ingress、PVC、ConfigMap、NetworkPolicy、HPA、PriorityClass、Helm、CRD、etcd 的理解,CKA 的题目就不会显得散。
它其实一直在考同一个能力:你是不是能用 Kubernetes 把一个应用部署起来、暴露出去、挂上存储、加上策略、调好资源、并且在故障时把它救回来。