2022年7月1号参加考试,2号就出成绩了,考试通过,可喜可贺。
特写此博客以帮助要准备CKA考试的同学,预祝大家考试通过!!
首先明确一下,我们的初衷:不是只想通过CKA考试,我们还是希望通过准备CKA学到Kubernetes的一些知识。(如果只想通过考试,感觉只要把模拟题和真题练习地很顺利,也可以通过,毕竟考试要求66分即可,但是这对我们并没有太大的帮助吧,只是多了一本证书而已。)
说下我的备考,除快速看完购买的CKA课程外,还看了《Kubernetes in Action》。当然,如果觉得看英文的教材十分痛苦,也可以直接看这本书。
推荐书籍《Kubernetes in Action》,由浅入深地介绍了Kubernetes的几大资源,pod、ReplicationController、ReplicaSet、DasmonSet、Deployment等等。为什么会存在,怎么去使用等等,对自己理解整个Kubernetes架构有很大的帮助。
预约考试的链接处,有模拟练习入口:
几点注意
- 模拟题比真题难 —— 所以一开始不会也不用特别在意,多练习几遍就行,主要是为了找到解题感觉。
- 模拟题有两次机会,每次可以练习 36 hours —— 建议考前几天就开始做模拟题,自己做一遍,按照答案再去敲一遍。
- 模拟题答案参考:CKA Simulator Kubernetes 1.22 —— 这里有题目有答案。
- 携带护照,因为预约考试的时候输入的是名字拼音,护照上有英文名字,这样可以方便考官check。
- 考试环境已发生变化,不用自己记下Kubernetes官网link,并在tab打开了,考试题目中会简单提示用到的知识点:比如Pod,这时候点击Pod会自动在考试的VRA机器里面的火狐浏览器打开。
- 提前半小时进入考试,前期需要按照步骤检查环境等,花费时间会比较久。
- 进入 root 特权账户使用:sudo -i。
– 如果进去了特权账户,退出的话,输入: exit。
– 遇到需要 ssh 切换node的时候,建议重新打开一个tab,避免自己忘记 exit出去,同时这样也不影响另一个tab所在的node (考试的时候大部分在这个node里面操作)。 - 在考试环境里,可以直接使用 k 代替 kubectl。另外,如果记住 resource type 的简写,也可以帮助考试:Command line tool (kubectl) 。
- 使用 nano edit yaml,这是因为:使用 vi 的话,在考试环境里 copy yaml内容进去后,需要处理缩进和对齐的问题。或者自己去设置下Terminal的配置。
- 如果题目要求切换 context,第一步就要切换到对应的 context
kubectl config use-context k8s - 建议把升级kubeadm,还原、备份etcd的题目放在最后做,避免出现问题影响其他题目的操作。没有做的题目可以标记起来。
三套真题参考连接:
- 第一套:2022年CKA 考试题 2022年3月1日刚过
- 第二套:k8s-cka考试题库
- 第三套:cka考题总结2021年12月
快速说下这三套题目的特点:
- 第一套题目部分答案比较仔细,代码处会说明下哪里是需要注意的点。但是有些内容比如PV、PVC等,只是留了官网链接。
- 第二套题目相对第一套来说,会详细说明在做题目的时候,参考的是官网的哪个例子,copy了哪个yaml文件来进行修改。
- 第三套题目的优点是有英文题目,可以帮助熟悉考试题目,避免考试的时候看到英文题目觉得眼生,而且每道题目都有答案。但里面的第5题:网络策略NetworkPolicy,答案建议参考第一套题目,因为觉得需要加上 namespaceSelector 才算完整。
最后提醒:
真题要反复练习,千万不要觉得简单,看看就行。我考前就犯了这个错误,觉得sidecar处理日志那个题目简单,只练习了一遍。考前的几个小时,只是简单看了看,考试的时候,就遇到pod启动之后,只成功运行了一个container。
部分真题记录如下:
2.2.1 排查集群中故障节点切换节点:
ssh node01
进入特权用户:
sudo -i
检查kubelet服务:
systemctl status kubelet
启动服务,并设置为开机启动:
systemctl restart kubelet
systemctl enable kubelet
最后检查:
systemctl status kubelet
找出label name=cpu-user CPU消耗最高的Pod,注意如果没有指明 namespace,需要使用 -A 来在查看所有 namespace。
kubectl top pod -A -l name=cpu-loader --sort-by=cpu
将 pod 名字写到文件中,注意这里的 POD_NAME字以实际名字为准:
echo "POD_NAME" >> /opt/KUTR00701/KUTR00701.txt
检查集群中有多少节点为Ready状态,记录总数为A:
kubectl get node | grep -i ready
查看节点是否包含NoSchedule污点的,注意 NODE_NAME用上面get到的节点名字依次替换。这时候记录总数为B:
kubectl describe node NODE_NAME | grep Taint | grep NoSchedule
x = A - B,将x的值写入文件中:
echo x >> /opt/KUSC00702/kusc00702.txt
注意
- 这里的 grep -i 是忽略字符大小写的差别。
- 如果要查找日志内容,也可通过 grep,如:kubectl logs foo | grep "要搜的内容"。
请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器 nginx 的端口80/tcp。
创建一个名为front-end-svc的新服务,以公开容器端口http。
配置此服务,以通过在排定的节点上的 NodePort 来公开各个 Pods。
此题可以参考:第一套真题:2022年CKA 考试题 2022年3月1日刚过 - 3 暴露服务
2.2.5 ingress - 七层负载均衡
- 编辑deployment
- 创建服务:
kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc # 这里的 --name 不要忘了。
如下创建一个新的nginx Ingress资源:
名称: ping
Namespace: ing-internal
使用服务端口 5678在路径 /hello 上公开服务 hello
可以使用以下命令检查服务 hello的可用性,该命令应返回 hello:
此题可以参考:第一套真题:2022年CKA 考试题 2022年3月1日刚过 - 4 创建Ingress
2.2.6 sidebar代理YAML文件修改如下:
此题可以参考:第二套真题:2022年CKA 考试题 2022年3月1日刚过 或 第三套真题:cka考题总结2021年12月 - 第15题 Sidecar代理
注意
- 一定要自己输入命令一步一步练习(我考试有考到这个题目)。
- sidecar container本身也需要配置volumeMounts。
按照官网步骤升级:Upgrading kubeadm clusters
几点注意:
- 考试的时候,要求升级的是 master node,所以我们直接参考Upgrading control plane nodes部分即可。
- 需要先用ssh切换到需要升级的node。
- 如果需要查看具体的version,可通过:apt-cache policy kubeadm | grep 1.22.0 #查看支持哪个版本,返回可能是:1.22.0-00。(但考题一般会具体说明需要升级的版本,所以这一步不是必须)。
- 考试环境没有hold kubeadm,所以不用run apt-mark unhold kubeadm,直接run apt-get update && apt-get install -y kubeadm=1.24.x-00 (#replace x in 1.24.x-00 with the latest patch version)即可。
- 如果标明etcd不要升级,记得添加 --etcd-upgrade=false。kubeadm upgrade apply v1.22.0 --etcd-upgrade=false
- 按步骤升级kubectl和kubelet。
- 最后不要忘记 uncordon node。
在升级完成后,可以通过如下命令,确认一下升级后的版本信息:
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.8"…
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.8"…
$ kubelet --version
Kubernetes v1.21.8
2.2.8 etcd备份恢复
在官网Operating etcd clusters for Kubernetes文档中,可以查看 etcd备份和恢复的命令介绍。
- 先备份,Backing up an etcd cluster
$ export ETCDCTL_API=3 $ etcdctl --endpoints=https://127.0.0.1:2379 --cacert=--cert= --key= snapshot save
- 还原,Restoring an etcd cluster
$ export ETCDCTL_API=3 $ etcdctl --endpoints=https://127.0.0.1:2379 --cacert=--cert= --key= snapshot restore
注意
我在考试的时候,输入restore命令还原的时候,有报permission error,后面据说输入 sudo -i可以解决这个问题。



