2022年7月1号参加考试,2号就出成绩了,考试通过,可喜可贺😊。
特写此博客以帮助要准备CKA考试的同学,预祝大家考试通过!!
首先明确一下,我们的初衷:不是只想通过CKA考试,我们还是希望通过准备CKA学到Kubernetes的一些知识。(如果只想通过考试,感觉只要把模拟题和真题练习地很顺利,也可以通过,毕竟考试要求66分即可,但是这对我们并没有太大的帮助吧,只是多了一本证书而已。)
📢 说下我的备考,除快速看完购买的CKA课程外,还看了《Kubernetes in Action》。当然,如果觉得看英文的教材十分痛苦,也可以直接看这本书。
推荐书籍《Kubernetes in Action》,由浅入深地介绍了Kubernetes的几大资源,pod、ReplicationController、ReplicaSet、DasmonSet、Deployment等等。为什么会存在,怎么去使用等等,对自己理解整个Kubernetes架构有很大的帮助。

预约考试的链接处,有模拟练习入口:

📢 几点注意

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的配置。
kubectl config use-context k8s三套真题参考连接:
📢 快速说下这三套题目的特点:
namespaceSelector 才算完整。最后提醒:
真题要反复练习,千万不要觉得简单,看看就行。我考前就犯了这个错误,觉得sidecar处理日志那个题目简单,只练习了一遍。考前的几个小时,只是简单看了看,考试的时候,就遇到pod启动之后,只成功运行了一个container。
部分真题记录如下:
切换节点:
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 暴露服务
- 编辑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
YAML文件修改如下:
此题可以参考:第二套真题:2022年CKA 考试题 2022年3月1日刚过 或 第三套真题:cka考题总结2021年12月 - 第15题 Sidecar代理
📢 注意
volumeMounts。按照官网步骤升级:Upgrading kubeadm clusters
📢 几点注意:
ssh切换到需要升级的node。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-upgrade=false。kubeadm upgrade apply v1.22.0 --etcd-upgrade=falseuncordon 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
在官网Operating etcd clusters for Kubernetes文档中,可以查看 etcd备份和恢复的命令介绍。
$ export ETCDCTL_API=3
$ etcdctl --endpoints=https://127.0.0.1:2379 --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> snapshot save <backup-file-location>
$ export ETCDCTL_API=3
$ etcdctl --endpoints=https://127.0.0.1:2379 --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> snapshot restore <snapshotdb>
📢 注意
我在考试的时候,输入restore命令还原的时候,有报permission error,后面据说输入 sudo -i可以解决这个问题。