第一题 RBAC授权
问题权重: 4%

设置配置环境:
[student@node-1] $ kubectl config use-context k8s

Context
为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的namespace 的特定 ServiceAccount .

Task
创建一个名为 deployment-clusterrole 且仅允许创建以下资源类型的新ClusterRole :
Deployment
StatefulSet
DaemonSet

在现有的 namespace app-team1 中创建一个名为 cicd-token 的新ServiceAccount 。

限于 namespace app-team1 , 将新的ClusterRole deployment-clusterrole 绑定到新的 ServiceAccount cicd-token 。

解题

kubectl config use-context k8s
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create ns app-team1
kubectl create serviceaccount cicd-token -n app-team1
kubectl create rolebinding cicd-token --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
#验证
kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1
1
2
3
4
5
6
7
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/

第二题 节点设置不可用
设置配置环境:
[studentinode-1] $ kubectl config use-context ek8s

问题权重: 4%
Task
将名カek8s-node.1 的node没置カ不可用,并重新凋度该node上所有运行的pods

解题

kubectl config use-context ek8s
kubectl drain k8s21-worker01 --ignore-daemonsets
1
2
注:如果执行drain提示错误,根据提示再加上选项,例如–delete-local-data–force

第三题 升级K8s版本
问题权重: 7%
设置配置环境:
[student@node-1] $ kubectl config use- context mk8s
Task
现有的Kubernetes集群正在运行版本1.20.0。仅将主节点上的所
有Kubernetes控制平面和节点组件升级到版本1.20.1。
确保在升级之前drain主节点,并在升级后uncordon主节点。

可使用以下命令通过ssh 连接到主节点:
[student@node-1] $| ssh mk8s-master-0
可使用以下命令在该主节点上获取更高权限:
[student@mk8s-master-0] $ sudo -i
另外,在主节点升级kubelet和kubectl。

kubectl config use-context mk8s
kubectl drain mk8s-master-0 --ignore-daemonsets
ssh mk8s-master-0
sudo -i
apt install kubeadm-1.20.1-00 -y
kubeadm upgrade plan
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false # 题目要求不升级etcd
# 升级 kubelet 和 kubectl
apt install kubelet-l.20.1-00 kubectl-l.20.1-00 -y
systemctl restart kubelet
#设置为可调度
kubectl uncordon mk8s-master-0
# 查看升级结果
kubectl get node
1
2
3
4
5
6
7
8
9
10
11
12
13
14

第四题 etcd备份与恢复
问题权重: 7%
此项目无需更改配置环境。但是,在执行此项目之前,请确保您已返回初始点:
[student@nk85- master-0] $ exit
Task
首先,为运行在https://127.0.0.1:2379上的现有etcd 实例创建快照并将快照保存到/data/backup/etcd-snapshot.db
为给定实例创建快照预计能在几秒钟内完成。如果该操i作似乎挂起,则命令可能有问题。用CTRL+C 来取消
操作,然后重试。
然后还原位于/data/backup/etcd-snapshot-previous.db的现有先前快照。

提供了以下TLS证书和密钥,以通过etcdctl连接到服务
CA证书: /opt/KUIN00601/ca.crt
客户端证书: /opt/KUIN00601/etcd-client.crt
客户端密钥: /opt/KUIN00601/etcd-client.key

答题:

# 备份
ETCDCTL_API=3 etcdctl snapshot save /data/backup/etcd-snap.db --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key --endpoints=https://127.0.0.1:2379
# 恢复
systemctl stop etcd
systemctl cat etcd # 确认下数据目录(--data-dir 值)
mv /var/lib/etcd /var/lib/etcd.bak
ETCDCTL_API=3 etcdctl snapshot restore /data/backup/etcd-snapshot-previous.db --
data-dir=/var/lib/etcd
chown -R etcd:etcd /var/lib/etcd
systemctl start etcd
1
2
3
4
5
6
7
8
9
10
https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

第五题 网络策略
问题权重: 7%

设置配置环境:
[studentinode-1] $ kubectl config use-context hk8s

Task

在现有的namespace my-app中创建一个名为allow-port-from-namespace 的新NetworkPolicy 。

确保新的NetworkPolicy 允许namespace my-app 中的Pods来连 接到namespace big-corp 中的端口8080 。

进一步确保新的 NetworkPolicy : 不允许对没有在监听端口8080的Pods的访问 不允午不来自namespace my-app中的Pods的访问

解题:

kubectl config use-context hk8s
#给命名空间打标签:
kubectl label namespace big-corp name=big-corp

apiVersion: networking.k8s.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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
参考文档:https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/

第六题 SVC 暴露应用
问题权重: 7%
设置配置环境:
[student@node-1] $| kubectl config use- context k8s

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

kubectl config use-context k8s
kubectl create deployment --image=nginx --port=80 front-end
kubectl edit deployment front-end修改port的名字
.....
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
name: http
protocol: TCP
.......
kubectl expose deployment front-end --port=80 --target-port=80 --type="NodePort" --name=front-end-svc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

第七题:Ingress
问题权重: 7%
设置配置环境:
[student@mnode-1] $ kubectl config use-context k8s

Task
如下创建一个新的nginx Ingress 资源:

名称: pong
Namespace: ing-internal使用服务端口5678 在路径/hello. 上公开服务hello

可以使用以下命令检查服务hello 的可用性,该命令应返回hello :
[student@node-1] $| curl -kL <INTERNAL_ IP>/hello

# 以下考试无需要操作
kubectl create ns ing-internal
kubectl create deployment hello --image=nginx --port=80 --namespace=ing-internal
kubectl expose deployment hello --port=5678 --target-port=80 --name=hello --namespace=ing-internal
kubectl exec -it hello-8fd7d4d77-2kdv9 -- /bin/bash -n ing-internal
echo "hello" > /usr/share/nginx/html/index.html
# 以下考试操作
cat 7.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
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

第八题 扩容 Pod 数量
问题权重: 4%
设置配置环境:
[student@node-1] $ kubeotl corfig use- context k8s
Task
将deployment 从loadbalancer 扩展至 5 pods

解题:

#以下考试不需要操作
kubectl create deployment loadbalancer --image=nginx --replicas=1
#以下考试操作
kubectl config use-context k8s
kubectl scale deployment loadbalancer --replicas=5
1
2
3
4
5

第九题 nodeSelector
问题权重: 4%
设置配置环境:
[student@node-1] $ kubectl config use-context k8s
Task
按如下要求调度一个 cod:
名称: nginx-kusc00401
Image: nginx
Node selector: disk=ssd

解题:

# 以下考试无需要操作
kubectl label node k8s21-worker02 disk=ssd
# 以下考试操作
kubectl config use-context k8s

cat 9.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
disk: ssd
kubectl apply -f 9.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/

第十题统计准备就绪节点数量
问题权重: 4%
设置配置环境:
[student@node-1] $ kubectl config use-context k8s

Task
检查有多少worker nodes已准备就绪(不包括被打上Taint:
NoSchedule的节点),并将数量写入
/opt/KUSC00402/kusc00402.txt

解题:

kubectl config use-context k8s
kubectl describe nodes $(kubectl get nodes | grep Ready| awk '{print $1}') | grep Tain | grep -vc NoSchedule > /opt/KUSC00402/kusc00402.txt
1
2

第十一题 Pod 配置多容器
问题权重: 4%
设置配置环境:
[student@node-1] $ kubectl config use-context k8s
Task
创建一个名为kucc4 的pod, 在pod里面分别为以下每个images单独运行一个app container (可能会有1-4个images) :
nginx + redis + memcached

解题:

kubectl config use-context k8s
cat 11.yaml
kind: Pod
apiVersion: v1
metadata:
name: kubcc4
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
- name: memcached
image: memcached

kubectl apply -f 11.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

第十二题 创建 PV
问题权重: 4%
设置配置环境:
[student@node-1] $| kubectl config use-context hk8s
Task
创建名为app-data 的persistent volume,容量为2Gi,访问模式为ReadWriteOnce 。volume 类型为hostPath, 位于/srv/app-data

答题:

kubectl config use-context hk8s
cat 12.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-data
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/srv/app-data"

kubectl apply -f 12.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

第十三题 Pod 使用 PVC
问题权重: 7%
设置配置环境:
[student@node-1] $ kubectl config use- context ok8s
Task
创建一个新的PersistentVolumeClaim ;
名称: pv-volume
Class: csi-hostpath-sc
容量: 10Mi
创建一个新的Pod, 此Pod将作为volume挂载到
PersistentVolumeClaim :
名称: web-server
Image: nginx
挂载路径: /usr/share/nginx/html

配置新的pod,以对volume具有ReadWriteOnce权限。

最后,使用kubectl edit 或kubectl patch将PersistentVolumeClaim的容量扩展为70Mi,并记录此更改。

kubectl config use- context ok8s
# cat 12.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-volume
spec:
storageClassName: nfs-server
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: pv-volume
containers:
- name: web-server
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
kubectl apply -f 12.yaml
# 扩容 PVC 容量
kubectl edit pvc pv-volume --save-config
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
35
https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

第十四题 获取 Pod 错误日志
问题权重: 5%

设置配置环境:
[student@node-1] $ kubectl config use-context k8s

Task
监控pod bar的日志并:
提取与错误file-not-found 相对应的日志行
将这些日志行写入/opt/KUTR00101/bar

kubectl logs bar | grep file-not-found > /opt/KUTR00101/bar
1
https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/

第十五题 给 Pod 增加一个容器(边车)
问题权重: 7%
设置配置环境:
[studentnode-1] $ kubectl config use- context k8s
Context
将一个现有的Pod集成到Kubernetes的内置日志记录体系结构中(例如kubectl logs) 。添加streaning sidecar容器是实现此要求的一种好方法。
Task
使用busybox Image来将名为sidecar的sidecar容器添加到现有的Pod legacy-app 中。新的sidecar容器必须运行以下命令:
/bin/sh -c tail -n+1 -f /var/1og/legacy-app . log
使用安装在/var/log的Volume,使日志文件legacy-app.log可用于sidecar容器。
除了添加所需的volume mount以外,请勿更改现有容器的规格。

kubectl config use-context k8s
apiVersion: v1
kind: Pod
metadata:
name: legacy-app
spec:
containers:
- name: count
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/legacy-app.log;
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
volumes: # volumes 块在导出的 yaml 下面已经有了,在已有的添加下面两行即可
- name: varlog
emptyDir: {}

kubectl get pod legacy-app -o yaml > legacy-app.yaml # 导出后修改文件
kubectl delete pod legacy-app
kubectl apply -f legacy-app.yaml

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
https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/

第十六题 统计使用 CPU 最高的 Pod
问题权重: 5%

设置配置环境:
[student@node-1] $ kubectl config use- context k8s

Task
通过pod label name=cpu-utilizer,找到运行时占用大量CPU的
pod,并将占用CPU最高的pod名称写入文件
/opt/KUTR00401/KUTR00401.txt (已存在)

答题:

kubectl config use-context k8s
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" –A # 然后将第一个 Pod 名称写到文件
echo "<podname>" > /opt/KUR00401.txt
1
2
3

第十七题 节点 NotReady 处理
问题权重: 13%

设置配置环境:
[student@node-1] $ kubectl config use-context wk8s

Task
名为wk8s-node-0 的Kubernetes worker node处于NotReady状态。调查发生这种情况的原因,并采取相应措施将node恢复为Ready 状态,确保所做的任何更改永久有效。

注意:

可使用以下命令通过ssh 连接到故障node:
[student@node-1] $ ssh wk8s-node-0
可使用以下命令在该node上获取更高权限:
[student@w8ks-node-0] $ sudo -i
1
2
3
4
答题:

kubectl config use-context wk8s
kubectl get node
ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet
1
2
3
4
5
6
7

————————————————
版权声明:本文为CSDN博主「cloud_engineer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cloud_engineer/article/details/123978205

2022年Kubernetes CKA 认证真题解析完整版的更多相关文章

  1. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  2. 《PHP程序员面试笔试真题解析》——新书上线

    你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ...

  3. 蓝桥杯Java真题解析

    上个月参加蓝桥杯省赛拿了个省一,自从比赛完之后就一直没怎么写代码了,还有一个多月就要国赛了,从现在开始准备下国赛,但是我也不想学什么算法,而且我还在准备考研,所以就打算只做下历年的真题,争取国赛拿个国 ...

  4. 2021年最新字节跳动Android面试真题解析

    概述 时间过得是真TM快,回想自己是16年从学校毕业,现在是出来工作的第五个年头啦.在不同的大小公司都待过,就在前段时间顺利的完成了一次跳槽涨薪,面试了几家公司,最终选择了字节跳动.今特此前来跟大家进 ...

  5. python基础---递归函数真题解析

    方法一.有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. 即: {'k ...

  6. 2013年蓝桥杯省赛C/C++A组真题解析

    1.高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的 ...

  7. 笔试真题解析 ALBB-2015 算法project师实习生机试

    1.用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. [解析] 计算N.下3进制结果末尾有多少个0,事实上就是计算3进制中的3被进位多少次,仅仅要 ...

  8. 第七届蓝桥杯javaB组真题解析-四平方和(第八题)

    题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...

  9. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  10. 第七届蓝桥杯javaB组真题解析-分小组(第四题)

    题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...

随机推荐

  1. Elasticsearch:Smart Chinese Analysis plugin

    Smart Chinese Analysis插件将Lucene的Smart Chinese分析模块集成到Elasticsearch中,用于分析中文或中英文混合文本. 支持的分析器在大型训练语料库上使用 ...

  2. logstash处理字段样例

  3. Logstash:使用ELK堆栈进行API分析

  4. Elastic: 创建一个 Elastic 邮件警报 - 7.7 发行版

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106185321 总结: 1.elastic 免费版只有发送警报到一个索引或者到Ser ...

  5. 从nuxt开始的SEO之路

    故事从一个"美好"的早上开始...... 大清早的来到公司,打开电脑,emm, 还是熟悉的味道,鱼儿被我摸熟了的味道......就在开始准备一天的摸鱼之旅的时候,一种不详的预感涌上 ...

  6. day42-反射01

    Java反射01 1.反射(reflection)机制 1.1反射机制问题 一个需求引出反射 请看下面问题: 根据配置文件 re.properties 指定信息,创建Cat对象并调用方法hi clas ...

  7. PAT (Basic Level) Practice 1010 一元多项式求导 分数 25

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. 输出格式: ...

  8. nsis制作新版迅雷安装界面

    终于搞出来一点名堂,不借用皮肤插件,圆角,无标题栏拖动,渐隐渐显,纯nsis代码编写,相似度大概也有95%以上了. 演示程序下载

  9. Java注解(4):一个真实的Elasticsearch案例

    昨天把拼了一半的注解+Elasticsearch积木放下了,因为东西太多了拼不好,还容易乱.休息了一晚上接着来. 接着昨天,创建elasticsearch文档注解(相当于数据表的注解): /** * ...

  10. laravel config()获取null

      常规开发获取config值的是否发现获取值为null找了下文档,发现laravel是要把config注册到$app里面.   找到这个目录.加入这一行.就可以了