• 新鲜出炉!最新CKA备考指南!!


    写在前面

    2022年7月1号参加考试,2号就出成绩了,考试通过,可喜可贺😊。
    特写此博客以帮助要准备CKA考试的同学,预祝大家考试通过!!

    1. 备考篇

    1.1 学习

    首先明确一下,我们的初衷:不是只想通过CKA考试,我们还是希望通过准备CKA学到Kubernetes的一些知识。(如果只想通过考试,感觉只要把模拟题和真题练习地很顺利,也可以通过,毕竟考试要求66分即可,但是这对我们并没有太大的帮助吧,只是多了一本证书而已。)
    📢 说下我的备考,除快速看完购买的CKA课程外,还看了《Kubernetes in Action》。当然,如果觉得看英文的教材十分痛苦,也可以直接看这本书。

    推荐书籍《Kubernetes in Action》,由浅入深地介绍了Kubernetes的几大资源,pod、ReplicationController、ReplicaSet、DasmonSet、Deployment等等。为什么会存在,怎么去使用等等,对自己理解整个Kubernetes架构有很大的帮助。
    kubernetes in action

    1.2 模拟题

    预约考试的链接处,有模拟练习入口:
    模拟练习入口
    📢 几点注意

    • 模拟题比真题难 —— 所以一开始不会也不用特别在意,多练习几遍就行,主要是为了找到解题感觉。
    • 模拟题有两次机会,每次可以练习 36 hours —— 建议考前几天就开始做模拟题,自己做一遍,按照答案再去敲一遍。
    • 模拟题答案参考:CKA Simulator Kubernetes 1.22 —— 这里有题目有答案。

    模拟题练习页面

    2. 考试篇

    2.1 考试提醒

    1. 携带护照,因为预约考试的时候输入的是名字拼音,护照上有英文名字,这样可以方便考官check。
    2. 考试环境已发生变化,不用自己记下Kubernetes官网link,并在tab打开了,考试题目中会简单提示用到的知识点:比如Pod,这时候点击Pod会自动在考试的VRA机器里面的火狐浏览器打开。
    3. 提前半小时进入考试,前期需要按照步骤检查环境等,花费时间会比较久。
    4. 进入 root 特权账户使用:sudo -i
      – 如果进去了特权账户,退出的话,输入: exit
      – 遇到需要 ssh 切换node的时候,建议重新打开一个tab,避免自己忘记 exit出去,同时这样也不影响另一个tab所在的node (考试的时候大部分在这个node里面操作)。
    5. 在考试环境里,可以直接使用 k 代替 kubectl。另外,如果记住 resource type 的简写,也可以帮助考试:Command line tool (kubectl)
    6. 使用 nano edit yaml,这是因为:使用 vi 的话,在考试环境里 copy yaml内容进去后,需要处理缩进和对齐的问题。或者自己去设置下Terminal的配置。nano编辑YAML
    7. 如果题目要求切换 context,第一步就要切换到对应的 context
      kubectl config use-context k8s
    8. 建议把升级kubeadm,还原、备份etcd的题目放在最后做,避免出现问题影响其他题目的操作。没有做的题目可以标记起来。

    2.2 真题练习

    三套真题参考连接:

    📢 快速说下这三套题目的特点:

    • 第一套题目部分答案比较仔细,代码处会说明下哪里是需要注意的点。但是有些内容比如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

    2.2.2 找CPU消耗最高的Pod

    找出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

    2.2.3 检查Node节点的健康状态

    检查集群中有多少节点为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

    📢 注意

    1. 这里的 grep -i 是忽略字符大小写的差别。
    2. 如果要查找日志内容,也可通过 grep,如:kubectl logs foo | grep "要搜的内容"

    2.2.4 Expose service - 四层负载均衡

    请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器 nginx 的端口80/tcp。
    创建一个名为front-end-svc的新服务,以公开容器端口http。
    配置此服务,以通过在排定的节点上的 NodePort 来公开各个 Pods。

    此题可以参考:第一套真题:2022年CKA 考试题 2022年3月1日刚过 - 3 暴露服务

    1. 编辑deploymentdeployment YAML修改
    2. 创建服务:
      kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc # 这里的 --name 不要忘了。

    2.2.5 ingress - 七层负载均衡

    如下创建一个新的nginx Ingress资源:
    名称: ping
    Namespace: ing-internal
    使用服务端口 5678在路径 /hello 上公开服务 hello
    可以使用以下命令检查服务 hello的可用性,该命令应返回 hello:

    此题可以参考:第一套真题:2022年CKA 考试题 2022年3月1日刚过 - 4 创建Ingress

    YAML文件修改如下:
    Ingress YAML

    2.2.6 sidebar代理

    此题可以参考:第二套真题:2022年CKA 考试题 2022年3月1日刚过 或 第三套真题:cka考题总结2021年12月 - 第15题 Sidecar代理

    📢 注意

    • 一定要自己输入命令一步一步练习(我考试有考到这个题目)。
    • sidecar container本身也需要配置volumeMounts

    2.2.7 k8s版本升级

    按照官网步骤升级: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=falsekubeadm 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2.8 etcd备份恢复

    在官网Operating etcd clusters for Kubernetes文档中,可以查看 etcd备份和恢复的命令介绍。

    1. 先备份,Backing up an etcd cluster
    $ 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>
    
    • 1
    • 2
    1. 还原,Restoring an etcd cluster
    $ 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>
    
    • 1
    • 2

    📢 注意
    我在考试的时候,输入restore命令还原的时候,有报permission error,后面据说输入 sudo -i可以解决这个问题。

  • 相关阅读:
    从零开始学前端:DOM、BOM、焦点事件、键盘事件 --- 今天你学习了吗?(JS:Day20)
    【C语言】扫雷(递归展开 + 标记功能)
    高性能实体类转换工具MapStruct 使用教程
    JAVA ---泛型的扩展
    4_Git
    java笔记37,Lambda表达式
    HikariCP与Spring Boot的完美集成,让您的应用更高效、更可靠!
    数据趣事:历史最高温的是新疆吐鲁番?重庆45℃高温仅排全国第二
    校招失败后,在小公司熬了 2 年终于进了华为,竭尽全力....
    相机标定findCirclesGrid参数设置与选择
  • 原文地址:https://blog.csdn.net/yiyiwudian/article/details/125593943