互联网最全cka真题解析-2022

2023-02-12,,,,

1、CKA真题解析
kubectl自动补全及帮助信息
1、配置kubectl自动补全
apt install bash-completion

source <(kubectl completion bash)

2、kubectl explans 帮助信息

3、kubectl 命令 -h 帮助信息

4、官网
https://kubernetes.io/
1
2
3
4
5
6
7
8
9
10
11
第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/

解答
考题答案

1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create serviceaccount cicd-token -n app-team1
# 题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
kubectl create rolebinding cicd-token-rolebinding --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
# rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。

3、验证
#稍微验证下
kubectl describe rolebinding cicd-token-rolebinding -napp-team1
1
2
3
4
5
6
7
8
9
10
11
12
13
注意:我们可以用describle命令看下刚才新建的rolebinding来验证下:

答题技巧
#说明:
解题三步骤:
1.创建clusterrole
2.创建serviceaccount
3.将新的clusterrole绑定到新的serviceaccount :rolebinding

1.之前我们是通过yaml文件进行创建的,这次通过命令行进行创建;(直接强制记忆就好;)
2.从书签链接可以找到一些命令,但是尽量建议熟悉记忆上面3条命令,直接敲出来即可;(直接搜索`一些命令行工具`关键字即可)

此题注意事项:
一般来水,如下是对应绑定的:(但是也可以rolebinding和clusterrole对应)
role --> rolebinding 有ns之说
clusterrole --> clusterrolebinding 无ns之说

serviceaccount 有ns之说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
第2题 统计使用 CPU 最高的 Pod(强制记忆,送分题)
考点:kubectl top -l 命令的使用

考题

参考链接
没必要参考网址,使用-h 帮助更方便。

kubectl top pod -h

https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods

解答

1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件

#写完后记得检查下那个保存结果的文件

3、验证
cat /opt/KUR00401.txt
1
2
3
4
5
6
7
8
9
10
11
答题技巧
metric-server已经准备好了,我们不用管;
1
第3题 网络策略(拷贝yaml)(注意yaml位置)
(考题知识点:kubernetes安全章节/网络策略)7’

考题

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

️ 码的,这个翻译起来真的有点别扭。。。。。

参考链接

解答
原课件答案

1、切换环境
kubectl config use-context hk8s

2、配置
#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
给命名空间打标签:kubectl label namespace big-corp name=big-corp

编写一个 yaml 文件
vim networkpolicy.yaml
#注意 :set paste,防止 yaml 文件空格错序。

apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app #被访问者的命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: big-corp #访问者的命名空间的标签
ports:
- protocol: TCP
port: 8080 #被访问者公开的端口

kubectl apply -f networkpolicy.yaml

3、验证
kubectl get networkpolicy -nmy-app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
答题技巧
这个题也是争议比较大,这个题目翻译后比较模糊,先按照下面答案来做就行。这个题一直也没变过;直接从官方yaml拷贝过来,删除没用的,修改为题目要求的,就好;
1
官方yaml
apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。

另一个版本

检查:

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

考题

参考链接
强制记忆即可。

解答

解题
1、切换环境
kubectl config use-context kubernetes

2、配置
kubectl edit deployment front-end

containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- name: http #额额,这里要加一个-横杠的。。。
protocol: TCP #protocol不写也是可以的,因为默认就是TCP
containerPort: 80

kubectl 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的容器的端口号

#验证:(看下他们的SELECTOR标签是否一致)
kubectl get svc front-end-svc -owide
kubectl get deployment front-end -owide

curl 节点名/节点ip:NodePort
curl svcIP:port

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
答题技巧
无链接,理解记忆即可;
1

另一个版本(知道即可)

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

考题

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

参考链接

️ yaml路径:

参考资料:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

解答
课件答案

1、切换环境
kubectl config use-context k8s

2、配置
vim ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pong
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
#如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
# 注意,如果等待5min后,这个还是出不来Ip时,可以看下那个hello服务类型是不是ClusterIP类型,如果不是,请修改为ClusterIp

3、验证
kubectl get ingress -ning-internal
curl -kL internal_IP/hello

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
答题技巧
1.直接从官方代码复制过来修改下即可;
2.如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
3.注意,一般自己的学习环境是看不到这个ingress 的 IP 地址的,而考试环境是可以的;
1
2
3
官方yaml代码需要修改的地方
注意:ingress资源还要加上一个namesapce的。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pong
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
另一版本

暂时忽略。。。

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

考题

参考链接
没必要参考网址,使用-h 帮助更方便。

kubectl scale deployment -h

https://kubernetes.io/zh-cn/docs/tasks/run-application/scale-stateful-set/

解题
1、切换环境
kubectl config use-context k8s

2、配置
kubectl scale deployment loadbalancer --replicas=5

3、验证
kubectl get po
kubectl get deployment
1
2
3
4
5
6
7
8
9
这里可以先检查下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那里的链接不见了的。。。。

解题

互联网最全cka真题解析-2022的相关教程结束。

《互联网最全cka真题解析-2022.doc》

下载本文的Word格式文档,以方便收藏与打印。