CKA
互联网最全cka真题解析-2022.9.9

目录
[toc]
我的CKA证书

1、CKA真题解析
kubectl自动补全及帮助信息
11、配置kubectl自动补全
2apt install bash-completion
3
4source <(kubectl completion bash)
5
62、kubectl explans 帮助信息
7
83、kubectl 命令 -h 帮助信息
9
104、官网
11https://kubernetes.io/
第1题 RBAC 授权(强制记忆,3条命令)
考点:RBAC 授权模型的理解。
考题

参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl create clusterrole -h
kubectl create serviceaccount -h
kubectl create rolebinding -h
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#command-line-utilities
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
解答
- 考题答案

11、切换环境
2kubectl config use-context kubernetes
3
42、配置
5kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
6kubectl create serviceaccount cicd-token -n app-team1
7# 题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
8kubectl create rolebinding cicd-token-rolebinding --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
9# rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。
10
113、验证
12#稍微验证下
13kubectl describe rolebinding cicd-token-rolebinding -napp-team1
注意:我们可以用describle命令看下刚才新建的rolebinding来验证下:

- 答题技巧
1#说明:
2解题三步骤:
31.创建clusterrole
42.创建serviceaccount
53.将新的clusterrole绑定到新的serviceaccount :rolebinding
6
7
81.之前我们是通过yaml文件进行创建的,这次通过命令行进行创建;(直接强制记忆就好;)
92.从书签链接可以找到一些命令,但是尽量建议熟悉记忆上面3条命令,直接敲出来即可;(直接搜索`一些命令行工具`关键字即可)
10
11
12此题注意事项:
13一般来水,如下是对应绑定的:(但是也可以rolebinding和clusterrole对应)
14role --> rolebinding 有ns之说
15clusterrole --> clusterrolebinding 无ns之说
16
17serviceaccount 有ns之说
第2题 统计使用 CPU 最高的 Pod(强制记忆,送分题)
考点:kubectl top -l 命令的使用
考题

参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl top pod -h
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods
解答

11、切换环境
2kubectl config use-context kubernetes
3
42、配置
5kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
6echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件
7
8#写完后记得检查下那个保存结果的文件
9
103、验证
11cat /opt/KUR00401.txt
- 答题技巧
1metric-server已经准备好了,我们不用管;
第3题 网络策略(拷贝yaml)📍(注意yaml位置)
(考题知识点:kubernetes安全章节/网络策略)7'
考题

双重否定就是肯定,所以最后两句话的意思就是: 仅允许端口为 8080 的 pod 访问。 仅允许 my-app命名空间中的 pod 访问。

码的,这个翻译起来真的有点别扭。。。。。
参考链接



解答
- 原课件答案

11、切换环境
2kubectl config use-context hk8s
3
42、配置
5#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
6给命名空间打标签:kubectl label namespace big-corp name=big-corp
7
8
9编写一个 yaml 文件
10vim networkpolicy.yaml
11#注意 :set paste,防止 yaml 文件空格错序。
12
13apiVersion: networking.kubernetes.io/v1
14kind: NetworkPolicy
15metadata:
16 name: allow-port-from-namespace
17 namespace: my-app #被访问者的命名空间
18spec:
19 podSelector: {}
20 policyTypes:
21 - Ingress
22 ingress:
23 - from:
24 - namespaceSelector:
25 matchLabels:
26 name: big-corp #访问者的命名空间的标签
27 ports:
28 - protocol: TCP
29 port: 8080 #被访问者公开的端口
30
31kubectl apply -f networkpolicy.yaml
32
333、验证
34kubectl get networkpolicy -nmy-app
- 答题技巧
1这个题也是争议比较大,这个题目翻译后比较模糊,先按照下面答案来做就行。这个题一直也没变过;直接从官方yaml拷贝过来,删除没用的,修改为题目要求的,就好;
- 官方yaml
1apiVersion: networking.kubernetes.io/v1
2kind: NetworkPolicy
3metadata:
4 name: test-network-policy
5 namespace: default
6spec:
7 podSelector:
8 matchLabels:
9 role: db
10 policyTypes:
11 - Ingress
12 - Egress
13 ingress:
14 - from:
15 - ipBlock:
16 cidr: 172.17.0.0/16
17 except:
18 - 172.17.1.0/24
19 - namespaceSelector:
20 matchLabels:
21 project: myproject
22 - podSelector:
23 matchLabels:
24 role: frontend
25 ports:
26 - protocol: TCP
27 port: 6379
28 egress:
29 - to:
30 - ipBlock:
31 cidr: 10.0.0.0/24
32 ports:
33 - protocol: TCP
34 port: 5978

删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。
📍 另一个版本


检查:

第4题 SVC 暴露应用(强制记忆)
考点:将现有的 deploy 暴露成 nodeport 的 service。
考题

参考链接
强制记忆即可。
解答

- 解题
11、切换环境
2kubectl config use-context kubernetes
3
4
52、配置
6kubectl edit deployment front-end
7…
8 containers:
9 - image: nginx
10 imagePullPolicy: Always
11 name: nginx
12 ports:
13 - name: http #额额,这里要加一个-横杠的。。。
14 protocol: TCP #protocol不写也是可以的,因为默认就是TCP
15 containerPort: 80
16…
17kubectl expose deployment front-end --port=80 --target-port=80 --type=NodePort --name=front-end-svc #注意:这里--name(不要忘记了。。。。)svc类型:NodePort/ClusterIP; --port是svc的端口号,--target-port是deployment里pod的容器的端口号
18
19
20#验证:(看下他们的SELECTOR标签是否一致)
21kubectl get svc front-end-svc -owide
22kubectl get deployment front-end -owide
23
24curl 节点名/节点ip:NodePort
25curl svcIP:port
- 答题技巧
1无链接,理解记忆即可;

📍 另一个版本(知道即可)








第5题 Ingress创建(拷贝yaml)📍(注意yaml位置)
考点:Ingress 的创建
考题

-k:跳过SSL证书检测 -L:跟随跳转,比如网站做了重定向,不加这个选项的话只会看到一个302的访问代码就结束了,加上的话会看到完整的跳转情况
参考链接


yaml路径:




参考资料:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/
解答
- 课件答案


11、切换环境
2kubectl config use-context k8s
3
42、配置
5vim ingress.yaml
6
7apiVersion: networking.k8s.io/v1
8kind: Ingress
9metadata:
10 name: pong
11 namespace: ing-internal
12 annotations:
13 nginx.ingress.kubernetes.io/rewrite-target: /
14spec:
15 rules:
16 - http:
17 paths:
18 - path: /hello
19 pathType: Prefix
20 backend:
21 service:
22 name: hello
23 port:
24 number: 5678
25 #如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
26 # 注意,如果等待5min后,这个还是出不来Ip时,可以看下那个hello服务类型是不是ClusterIP类型,如果不是,请修改为ClusterIp
27
283、验证
29kubectl get ingress -ning-internal
30curl -kL internal_IP/hello
- 答题技巧
11.直接从官方代码复制过来修改下即可;
22.如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
33.注意,一般自己的学习环境是看不到这个ingress 的 IP 地址的,而考试环境是可以的;
- 官方yaml代码需要修改的地方
注意:ingress资源还要加上一个namesapce的。

1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: pong
5 namespace: ing-internal
6 annotations:
7 nginx.ingress.kubernetes.io/rewrite-target: /
8spec:
9 rules:
10 - http:
11 paths:
12 - path: /hello
13 pathType: Prefix
14 backend:
15 service:
16 name: hello
17 port:
18 number: 5678
📍 另一版本





暂时忽略。。。


第6题 扩容 deployment 副本数量(强制记忆,送分题)
(考题知识点:kubernetes管理应用声明周期pod)4'
考题

参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl scale deployment -h
https://kubernetes.io/zh-cn/docs/tasks/run-application/scale-stateful-set/
解题
11、切换环境
2kubectl config use-context k8s
3
42、配置
5kubectl scale deployment loadbalancer --replicas=5
6
73、验证
8kubectl get po
9kubectl get deployment
- 这里可以先检查下pod数量哈哈

第7题 调度 pod 到指定节点(强制记忆,送分题)
考点:nodeSelect 属性的使用
考题

参考链接



解答

参考资料:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/
https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ 这个需要打开pod的链接。。。nodeSelector那里的链接不见了的。。。。
- 解题
11、切换环境
2kubectl config use-context k8s
3
42、配置
5vim nodeSelector.yaml
6
7aoiVersion: v1
8kind: Pod
9metadata:
10 name: nginx-kusc00401
11spec:
12 containers:
13 - name: nginx-kusc00401
14 image: nginx
15 nodeSelector: #这个是和containers同一级别的。
16 disk: ssd
17
18kubectl apply -f nodeSelector.yaml
19
20# kubectl label node node01 disk=ssd 打标签
21# kubectl get node --show-lables
22
233、验证
24kubectl get po -owide
- 答题技巧
1直接打开书签,拷贝yaml,删除2处内容,并修改pod名称即可,很简单;
2
3。。。注意下:这个网址是改变了的。。。

📍 另一版本


第8题 查看可用节点数量(强制记忆,送分题)
考点:检查节点角色标签,状态属性,污点属性的使用
考题考题

参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl -hD
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/
解答

11、切换环境
2kubectl config use-context k8s
3
42、配置
5kubctl describle nodes $(kubectl get node|grep Ready|awk '{print $1}')|grep Taints|grep -vc NoSchedule
6
73、验证
8cat /opt/KUSC00402/kusc00402.txt
92
- 答题技巧
11、自己测试过程
2#统计all准备就绪的节点
3[root@kubernetes-master ~]#kubectl get nodes|grep Ready
4kubernetes-master Ready control-plane,master 43d v1.21.2
5kubernetes-node1 Ready <none> 43d v1.21.2
6kubernetes-node2 Ready <none> 43d v1.21.2
7[root@kubernetes-master ~]#kubectl get nodes|grep Ready|awk '{print $1}'
8kubernetes-master
9kubernetes-node1
10kubernetes-node2
11[root@kubernetes-master ~]#
12
13
14#统计没有打上污点的节点
15[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
16Taints: node-role.kubernetes.io/master:NoSchedule
17Taints: <none>
18Taints: <none>
19[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -v NoSchedule
20Taints: <none>
21Taints: <none>
22[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -cv NoSchedule
232
24
25#最终代码
26[root@kubernetes-master ~]#kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule
272
28
29kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule > /opt/KUSC00402/kusc00402.txt
30
312.如果不熟悉shell的话,那么手动统计应该也可以;
32[root@kubernetes-master ~]#kubectl get node
33NAME STATUS ROLES AGE VERSION
34kubernetes-master Ready control-plane,master 43d v1.21.2
35kubernetes-node1 Ready <none> 43d v1.21.2
36kubernetes-node2 Ready <none> 43d v1.21.2
37[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
38Taints: node-role.kubernetes.io/master:NoSchedule
39Taints: <none>
40Taints: <none>
41[root@kubernetes-master ~]#
42
433.
44-c代表统计个数;
45污点tag也不全是NoSchedule;
📍 另一版本



第9题 创建多容器的 pod(强制记忆,送分题)
考点:pod 概念
考题

参考链接



答题

11、配置环境
2kubectl config use-context k8s
3
42、配置
5vim pod.yaml
6
7apiVersion: v1
8kind: Pod
9metadata:
10 name: kucc4
11spec:
12 containers:
13 - name: nginx
14 image: nginx
15 - name: redis
16 image: redis
17 - name: memcached
18 image: memcached
19
20kubectl apply -f pod.yaml
21
223、验证
23kuebctl get po
- 答题技巧
1这道题简单,直接写就好;
📍 另一版本


第10题 创建 PV(拷贝yaml)📍(注意yaml位置)
考点:hostPath 类型的 pv
考题

参考链接

注意:官方yaml位置
官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:




解答

参考资料:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
11、切换环境
2kubectl config use-context hk8s
3
42、配置
5vim pv.yaml
6
7apiVersion: v1
8kind: PersistentVolume
9metadata:
10 name: app-data
11spec:
12 capacity:
13 storage: 2Gi
14 accessModes:
15 - ReadWriteOnce
16 hostPath:
17 path: "/srv/app-data"
18
19kubectl appy -f pv.yaml
20
213、验证
22kubectl get pv
- 答题技巧
1这个是直接创建pv的,不需要去用;
2把标签和存储类给去掉;

📍 另一版本


第11题 创建PVC(拷贝yaml)📍(注意yaml位置)
pvc 的创建 class 属性的使用,–record 记录变更
考题

参考链接

注意:官方yaml位置
官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:





解答


参考资料:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
11、切换环境
2kubectl config use-context ok8s
3
42、配置
5vim pvc.yaml
6
7apiVersion: v1
8kind: PersistentVolumeClaim
9metadata:
10 name: pv-volume
11spec:
12 storageClassName: csi-hostpath-sc
13 accessModes:
14 - ReadWriteOnce
15 resources:
16 requests:
17 storage: 10Mi
18---
19apiVersion: v1
20kind: Pod
21metadata:
22 name: web-server
23spec:
24 volumes:
25 - name: task-pv-storage
26 persistentVolumeClaim:
27 claimName: pv-volume
28 containers:
29 - name: web-server
30 image: nginx
31 ports:
32 - containerPort: 80
33 name: "http-server"
34 volumeMounts:
35 - mountPath: "/usr/share/nginx/html"
36 name: task-pv-storage
37
38kubectl apply -f pvc.yaml
39
40
413、验证
42kubectl get pvc
43kubectl get pv
44kubectl get po
45
46#kubectl edit pvc pv-volume --config-save #淦。。。。。是--save-config ,自己写错了。。。。
47kubectl edit pvc pv-volume --save-config #可能要等个1分钟的时间才会发生变化;
48
49# kubectl edit pvc pv-volume --record 这种方法也是可以的。。。。
5070Mi
- 解题技巧
1这里会用到存储类,会动态的供给;
21.先创建一个pvc
32.再创建一个pod
4
5端口这边写不写都无所谓:在写svc时候,如果你没指定--target-port的话,那么就会以你定义的为准;
6
7volumes定义在上面和下面都无所谓,只要和container同级就好;
8
9kubectl get pvc,可能要等个1分钟的时间才会发生变化;


📍 另一版本






第12题 获取 Pod 错误日志(强制记忆,送分题)
考点:kubectl logs 命令
考题

参考链接
参考资料:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
没必要参考网址,使用-h 帮助更方便。
kubectl -h
https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#examine-pod-logs
解答

11、切换环境
2kubectl config use-context k8s
3
42、配置
5kubectl logs bar |grep file-not-found > /opt/KUTR00101/bar
6
73、验证
8cat /opt/KUTR00101/bar
- 答题技巧
1记住命令即可;

第13题 使用 sidecar 代理容器日志(边车)(强制记忆)要注意下:🌹
考点:pod 两个容器共享存储卷
考题

参考链接


解答


参考资料:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
- 注:由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply
原yaml文件:
11、切换环境
2kubectl config use-context k8s
3
42、配置
5kubectl get po leagcy-app -oyaml > sidecar.yaml #由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply
6
7kubectl delet po leagcy-app
8
9vim sidecar.yaml
10……
11metadata:
12 name: leagcy-app
13spec:
14 volumes:
15 - name: varlog
16 emptyDir: {}
17 containers:
18 - name: xx
19 image: xx
20 volumeMounts:
21 - name: varlog
22 mountPath: /var/log
23
24 - name: sidecar
25 image: busybox
26 args: [/bin/sh, -c, "tail -n+1 -f /var/log/legacy-app.log"] #。。。。里面是单引号。。。
27 volumeMounts: #要注意:volumes和volumeMounts这里都是复数。。。
28 - name: varlog #这里是有一个name的。。。
29 mountPath: /var/log
30
31kubectl apply -f sidecar.yaml
32
333、验证
34kubectl logs legacy-app
35kubectl exec legacy-app -c xx -- tail -f /var/log/legacy-app.log
36kubectl exec legacy-app -c siecar -- tail -f /var/log/legacy-app.log
解题yaml:
1apiVersion: v1
2kind: Pod
3metadata:
4 name: counter
5spec:
6 containers:
7 - name: leagcy-app
8 image: busybox
9 args:
10 - /bin/sh
11 - -c
12 - >
13 i=0;
14 while true;
15 do
16 echo "$i: $(date)" >> /var/log/legacy-app.log;
17 i=$((i+1));
18 sleep 1;
19 done
20 volumeMounts:
21 - name: varlog
22 mountPath: /var/log
23
24 - name: sidecar
25 image: busybox
26 args: [/bin/sh, -c, 'tail -n+1 -F /var/log/legacy-app.log']
27 volumeMounts:
28 - name: varlog
29 mountPath: /var/log
30
31 volumes:
32 - name: varlog
33 emptyDir: {}
- 答题技巧
1这个题目也是争议比较的大一个题目,能做出来的人很少;
2
3考题中文翻译描述的问题很奇怪。。;
4
5sidecar边车容器不是作为主容器,而是辅助主容器做一些功能;
6
7注意:kubectl get pod big-corp-app -o yaml > big-corp-app.yaml 这里面的东西一个都不要删;
8
9这个地方也容器出错;
10加这一块比较容易出错,加着加着,这个对齐方式找不到了;
11导出来,找到你的位置,然后直接粘贴过来修改即可;
12这一块,比较考验你的yaml能力;
13
14验证的话:
151.可以查看下kubectl get pod 看刚才那个pod是否有2个容器
162.用tail -f 查看下边车容器是否会有日志文件持续输出;


📍 另一版本







第14题 升级集群(强制记忆)
考点:如何离线主机,并升级控制面板和升级节点
考题

题目要求不升级 etcd,这里手动补上。
参考链接
没必要参考网址,建议多练习,背过命令就行。 记不清的,可以使用 kubectl -h 来帮助。 如果非要参考,可以按照下面方法。
依次点击 Tasks → Administer a Cluster → Administration with kubeadm → Upgrading kubeadm clusters (看不懂英文的,可右上角翻译成中文) https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/



解答
原课件答案


- 解题
11、切换环境
2kubectl config use-context mk8s
3
42、配置
5#升级kueadm
6kubectl drain mk8s-master-0 --ignore=daemonsets
7
8ssh mk8s-master-0
9sudo -i
10
11apt install kubeadm=1.20.1-00 -y
12kubeadm upgrade plan
13#这里可以先查下的:apt-cache show|grep kubeadm
14#kubeadm upgrade install v1.20.1 #。。。淦,这个写错了。。。。。。。是apply,并且要加上--ectd-ugrade=false。。。。。。题目要求不升级 etcd; 注意下这2个版本号写法的区别。。。。
15kubeadm upgrade apply v1.20.1 --etcd-upgrade=false
16
17#升级kubelt
18apt install kubelet=1.20.1-00 kubectl=1.20.1-00 -y
19systemctl restart kubelet #这里要重启下kubelt的,切记。。。
20
21exit
22exit
23
24kubectl uncordon mk8s-master-0
25
263、验证
27kubectl get node -owide
28kubectl --version
29kubelet --version
参考资料:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadmupgrade/
- 答题技巧
103 升级 kubernetes 版本; 7分 简单;有链接但 强制记忆;
2
3这个使用的是ubuntu操作系统;(唯一 一个需要用到ubuntu命令的考题;)
4ubuntu使用sudo -i 切换root,使用apt-get安装软件包;
5ununtu默认禁止root登录;
6因此,考试时,只有升级kubernetes这一道题需要用到ubuntu系统,其他都不需要用到;
7直接用sudo -i切换到root用户,再开始答题;(不需要输入密码)
8
9注意:这里切换kubernetes集群后,直接使用`kubectl drain kubernetes-master-0 --ignore-daemonsets`命令进行配置,不需要先ssh到mkubernetes-master-0节点;(这个需要注意下)
10
11确定要升级到哪个版本
12使用操作系统的包管理器找到最新的稳定 1.21:
13apt update
14apt-cache policy kubeadm
15# 在列表中查找最新的 1.21 版本
16# 它看起来应该是 1.21.x-00,其中 x 是最新的补丁版本
17
18#ubuntu和centos查看kubeadm最新版本的方法
19apt-cache policy kubeadm #ubuntu查看方式
201.20.5-00
21
22yum list --showduplicates kubeadm --disableexcludes=kubernetes #centos查看方式
231.21.2-0
24
25#注意如下的2种格式:
26ubuntu系统:1.20.5-00
27centos系统:1.21.2-0
28
29#注意:
30ubuntu中apt install kubeadm=1.20.1-00 –y或者apt-get install kubeadm=1.20.1-00 –y都是可以的;(我们这里使用apt install方式)

📍 另一版本







第15题 etcd 备份与恢复(强制记忆,2个步骤)
考点:etcd 的备份和还原命令
考题

参考链接




参 考 资 料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
解答

- 解题
如下2条命令很容易忘记呀,要多次记忆呀。。。。。(特别注意下这个题目。。。)
11、确定当前环境
2kubectl get node
3
42、配置
5#备份
6ETCDCTL_API=3 etcdctl snapshot save /data/backup/etcd-snapshot.db --endpoints=https://127.0.0.1:2379 --cacert=xx --cert=xx --key=xx
7
8#还原
9sudo -i
10systemctl stop etcd
11systemctl cat etcd #。。。。。淦:注意这里是systemctl cat etcd
12mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak # 。。。。淦:注意这里是default.etcd
13
14exit
15ll /data/backup/etcd-snapshot-previous.db
16sudo ETCDCTL_API=3 etcdctl restore /data/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd/default.etcd
17chown -R etcd:etcd /var/lib/etcd #淦。。。。注意,不要忘记了。。。。
18
19syetmctl start etcd
20
21注:执行备份命令如果提示没证书文件,exit 退回上一步操作
22参考资料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configureupgrade-etcd/
- 答题技巧
104 etcd 备份与恢复 ;7分 简单;有链接但 强制记忆;(此题可先搁置)!!!
2
3#备份etcd
4etcdctl snapshot save --cacert --cert --key
5
6#恢复etcd
7关闭etcd服务
8确认etcd数据目录:systemctl cat etcd
9etcdctl snapshot restore --data-dir
10给权限: /var/lib/etcd
11启动etcd
12
13
14恢复:这里需要给大家强调一下
15 1.这里恢复用的是已经存在的一个备份文件,而不是说我们之前备份的那个文件;
16 2.这里的etcd是二进制方式部署的,重启需要使用systemctl start etcd命令;
17 3.这个ectd的备份与恢复考题:恢复这里一直是个坑;你恢复了之后,这个etcd起不来了,这个就JJ了。。。。;
18 4.这个题是个坑:可以直接放弃,把稳起见;(可以做个etcd备份,恢复就不需要做了。。。可以看情况)
📍 另一版本




先忽略。。。。





第16题 排查集群中故障节点(强制记忆,送分题,一定要做完这道题,分值最高,最简单)
考题

参考链接
强制记忆。
解答

11、切换环境
2kubectl config use-context wk8s #考试时切到这道题的集群后,那个 node 就是异常的。 真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。
3
42、配置
5kubectl get node #查看Not Ready的node节点
6
7ssh wk8s-node-0
8sudo -i
9systemctl status kubelet
10systemctl start kubelet
11systemctl enable kubelet
12
13exit #退出root用户
14exit #退出故障节点
15
163、验证
17kubectl get node
18
19#jounarlctl -u kubelet 查看kubelet日志
- 答题技巧
1通过 get nodes 查看异常节点,登录节点查看 kubelet 等组件的 status 并判断原因。
2真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。
3
4考试时切到这道题的集群后,那个 node 就是异常的。
5
6如果systemctl start kubelet没起来的话,就要看它的日志了;(一般是会起来的)
7如果kubelt的日志没起来,该如何看kubelet的日志?
8journalctl -u kubelet
第17题 节点维护(强制记忆,送分题)
考点:cordon 和 drain 命令的使用
考题

参考链接
强制记忆就好。
解答

11、切换环境
2kubectl config use-context ek8s
3
42、配置
5#kubectl coredon ek8s-node-1 #淦:我一直把这个单词拼错。。。。。;是cordon,不是coredon。。。;
6📍 kubectl cordon ek8s-node-1 #设置次节点为不可调度
7kubectl drain ek8s-node-1 --ignore-daemonsets #设置次节点为不可调度,并且排空次节点
8
9#如果上面命令报错就加上一个 --delete-local-data --force
10kubectl drain ek8s-node-1 --ignore-daemonsets --delete-local-data --force
11kubectl drain ek8s-node-1 --ignore-daemonsets --delete-emptydir-data --force
12
133、验证
14kubectl get node
注意下就好:

- 答题技巧
1注意:
2执行`kubectl drain ekubernetes-node-1 --ignore-daemonsets`这条命令其实就包括了上面设置为不可调度,但是考试尽量按考试题目和给出的答案来;
3
4kubectl uncordon kubernetes-master #取消不可调度
2、考试注意事项
kubecctl 命令自动补全

1apt install bash-completion
2
3source <(kubectl completion bash)
能复制就不要手敲代码;
能用yaml就不要手敲代码;
要善于用考试环境的记事本的;
👉 注意:不允许访问自己的浏览器书签
2022年8月28日

如何一步步找到找官网资料
- 打开火狐浏览器
- 输入k8s官网:https://kubernetes.io/
- 点击
Docementation:


https://kubernetes.io/docs/reference/
https://kubernetes.io/zh-cn/docs/reference/


- 这里也是可以直接搜索的

考试时间及通过分数
2 个小时,17 道题目,66 分通过;
有效期。


考试房间环境
考试需要在封闭无人的房间进行,要求桌面没有其他东西;
考试前注意事项
提前 15 分钟左右就可以在倒计时页面进入考试系统了,尽量提前进入,以便监考老师我们的环境。刚开始考官会让你出示证件,然后考官会让你拿摄像头环绕考试环境一周, 再然后考官会让我们打开共享屏幕和摄像头,并且摄像头;最后考官会告诉我们一些注意事项,比如记事本功能,以及可以查阅哪些网站资料等等。考试过程中如有意外状况,可以在线与考官交流(文字),并争取你应有的权益;
开始需要出示证件,有护照最好。如果没有可以使用身份证;如果有必要确认你的英文名可以用信用卡给他们看;
考试网络问题
在线考试,考试系统国内访问速度比较慢,需要一个稳定网络环境(强烈建议考试时间约在早上,越早越好,因为早上网络比较稳定,如果你的网络访问预约考试系统很慢,建议购买可翻墙工具);中途掉一2次网是没问题的,原来做的数据会被保存的;
- 考试时间:24h都可以预约,不分节假日(但其实后面预约时就不是24小时了……)
vpn问题

考试是可以查阅k8s官网的
考试中是可以查阅 kubernestes.io 官网(主要是概念栏),并且可以使用事先定义好****的书签,来快速查找到自己之前查看过得内容;
只允许打开两个标签页,一个是考试系统,另一个建议打开官网文档 https://kubernetes.io/zh/docs/home/;
考试过程中是可以切换对照下题目要求的
在考试过程中,可以选择国家语言,选择中文,可能有的翻译不是很准确,可以切换对照下;
考试环境是用的ubuntu系统
kubernetes 集群环境采用 ubuntu 系统,不用担心,会普通用户执行 sudo -i 切 root 就行了,除 了 kubernetes 升级版本这题用了 apt 软件包管理执行安装外,其他题操作都一样。
自己的当前所在节点和登录用户

考试考试环境是多k8s集群的,切记要注意切命名空间

考试全部都是实际操作题,会给出多个 kubernetes 集群,要求你在指定集群完成指定的操作;
最后,考试环境中一定要留意 kubernetes 环境,尤其是主机名,默认可以使用 ssh 进入 node, 进入 node 做完题目后记得退出,不然节点内是无法 ssh 到下一个题目的 node 当中去。
注意:切记要注意切命名空间
考试环境中可能有4-套kubernetes集群环境,为了防止考试题目冲突,因此在每做一个题目之前,**必须先执行切kubernetes集群命令**,查看并确认后,方可开始进行答题;

注意,可通过kubectl get node输出的NAME字段和考题中设置配置环境的保持一致即可。
有时可能出现要做的这道题和上一个考题的kubernetes集群是同一套,切不切都无所谓,保险起见还是建议都要且,并确认后,开始进行答题;

要注意题干里的小细节

答题技巧
平时多敲多练习,熟练使用 kubectl,了解 kubernetes 资源 yaml 文件结构,把下面提供的真题练习好;
可以事先把官方文档示例页面放到浏览器的收藏夹里,这样遇到相关的考题就可以快速打开参考;
考试系统里有记事本,多多利用,临时存储;
考试中的终端可以使用复制黏贴,尽量避免手敲 yaml,多使用命令创建,例如 Pod、Service、Deployment;
命令参数不记得,多查看帮助信息,例如 kubectl –help,etcdctl –help 的命令,都有示例;
- 建议:要尽早考试,课程学习完后,就要马上考试;(尽量不要去拖)
- cka考试:可能做一些微调,例如某些路径或者字段,要看清楚!
- 监控摄像头问题:🍀 监控摄像头:720p,1080p以上的就可以了; 60/70快钱; 笔记本自带的摄像头可以吗?–一般都可以的,只要能看清楚你身份证上的名字就可以了; https://www.onlinemictest.com/webcam-test/ 这个是只能用来对外置摄像头测试;
- windows桌面不需要清理,因为是在web里考试的;
收藏栏不要太明显了,尽量按照技术去标记;- 注意:我们没必要去测试的,考试也没要求进行测试,只要你保证自己写的没问题就好;
- 考试:不管你是用yaml还是用命令行,只要你把提议能做出来就好;
考试系统界面

答题结束后,在 Exam Controls 里结束考试。
哈哈,还有模拟环境的

3、CKA考试感受
- 提前考试30min就可以登录考试系统了,老师会进行一系列的检查操作。
- 如果第一次你网站上填的那个报考名字,在老师核验身份时,一直核验不通过的话。不要担心,下次再拷考呗,一般问题不大;
- 最好给自己的pc配一个外置摄像头,不然你就要抱着自己的电脑然后环绕考试环境四周了,很不方便;
- 考试前会有一系列比较繁琐的事情,例如安装psi安全浏览器(如果自己电脑有vmware workstation软件,尽量要提早卸载哦,不会会检测通不过),老师核对你的姓名,检查周围环境等等,耐心按流程昨晚就好。即使超过了考试时间,后面也会给你给足2小时;
- 考试过程,etcd那个备份提,可以做下备份,还原就不要做了哈哈,安全起见;
- ingress那个题目,自己一直没出效果,很奇怪,后面也就没去排查了;
- 其他有模糊的题目,可以在terminal终端创建一个error.txt文件记录下,后面回去再看下;
- 自己把cka的17道题牢记于脑子里,一般问题不大的哈哈。
其他任何有关于cka考试题目及现场问题的话,欢迎小伙伴加微信交流哦。
附件
链接:https://pan.baidu.com/s/1sJa12MEx9vE2RUw33X-TyQ?pwd=nrl4 提取码:nrl4 –来自百度网盘超级会员V7的分享

- cka报名流程
CKA报名流程-2022.9.10(无重要数据-仅仅为自己的流程)

关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

🍀 微信公众号 《云原生架构师实战》

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

🍀 博客 www.onlyyou520.com

🍀 知乎
https://www.zhihu.com/people/foryouone

🍀 语雀
https://www.yuque.com/xyy-onlyone

最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!



文档导航
本页导航
- 互联网最全cka真题解析-2022.9.9
- 目录
- 我的CKA证书
- 1、CKA真题解析
- kubectl自动补全及帮助信息
- 第1题 RBAC 授权(强制记忆,3条命令)
- 第2题 统计使用 CPU 最高的 Pod(强制记忆,
送分题) - 第3题 网络策略(拷贝yaml)📍(注意yaml位置)
- 第4题 SVC 暴露应用(强制记忆)
- 第5题 Ingress创建(拷贝yaml)📍(注意yaml位置)
- 第6题 扩容 deployment 副本数量(强制记忆,
送分题) - 第7题 调度 pod 到指定节点(强制记忆,
送分题) - 第8题 查看可用节点数量(强制记忆,
送分题) - 第9题 创建多容器的 pod(强制记忆,
送分题) - 第10题 创建 PV(拷贝yaml)📍(注意yaml位置)
- 第11题 创建PVC(拷贝yaml)📍(注意yaml位置)
- 第12题 获取 Pod 错误日志(强制记忆,
送分题) - 第13题 使用 sidecar 代理容器日志(边车)(强制记忆)要注意下:🌹
- 第14题 升级集群(强制记忆)
- 第15题 etcd 备份与恢复(强制记忆,2个步骤)
- 第16题 排查集群中故障节点(强制记忆,
送分题,一定要做完这道题,分值最高,最简单) - 第17题 节点维护(强制记忆,
送分题)
- 2、考试注意事项
- 3、CKA考试感受
- 附件
- 关于我
- 最后