【K8S】CKA题库练习16题知识总结,Kubernetes-1.32版,服务部署、暴露、存储、网络、集群修复

【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 对外暴露应用
  • 使用 IngressGateway 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-apiserverkube-scheduleretcdkubelet 这类基础组件

常用命令:

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 的高频大头,核心是"让流量按你想的方式进来,也按你想的方式出去":

  • ServiceClusterIPNodePort
  • IngresshostpathingressClassName
  • GatewayHTTPRoute
  • NetworkPolicy 的 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.requestslimits
  • PriorityClass
  • HPA
  • taint / toleration
  • affinity / 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 / CronJobJob 用来跑一次性任务,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 IngressingressClassName、path rewrite 会按域名路径暴露服务
3 sidecar Deployment、并置容器、日志采集 会改 Pod 模板并加 sidecar
4 StorageClass StorageClass、默认类、WaitForFirstConsumer 会创建存储类并设默认
5 Service ServiceNodePortcontainerPort 会把 Deployment 暴露成服务
6 PriorityClass PriorityClasspriorityClassName 会配置 Pod 优先级
7 Argo CD Helmrepo addtemplateinstall 会用 Helm 安装标准组件
8 PVC PVCPV、Deployment 挂载卷 会恢复有状态工作负载
9 Gateway API GatewayHTTPRoute、HTTPS 会从 Ingress 迁移到 Gateway
10 NetworkPolicy 命名空间/Pod 标签、默认拒绝策略 会写最小授权网络策略
11 CRD kubectl get crdkubectl explain 会查看自定义资源定义
12 ConfigMap NGINX 配置、immutable、重启生效 会更新配置并触发生效
13 Calico CNI 安装、NetworkPolicy 支持 会安装支持策略的 CNI
14 requests 资源 resources.requests、副本与配额 会按节点资源调 Pod 请求
15 etcd 修复 静态 Pod、etcd、kube-scheduler 会修复控制面故障
16 cri-dockerd dpkgsystemctlsysctl 会准备 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

只要你能稳定完成这些操作,再配合对 DeploymentServiceIngressPVCConfigMapNetworkPolicyHPAPriorityClassHelmCRDetcd 的理解,CKA 的题目就不会显得散。

它其实一直在考同一个能力:你是不是能用 Kubernetes 把一个应用部署起来、暴露出去、挂上存储、加上策略、调好资源、并且在故障时把它救回来。