CKA认证考题

1.RBAC 4%

Context

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

Task

创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRule

Deployment
StatefulSet
DaemonSet
在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount
限于namespace app-team1,将新的ClusterRole deployment-clusterrole绑定到新的ServiceAccount cicd-
token

解题思路:

#第一步:命令补全
source < (kubectl completion bash)
#第二步:创建ClusterRole(通过kubectl create clusterrule -h)
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
#第三步:创建ServiceAccount
kubectl create serviceaccount cicd-token -napp-team1
#第四步:将ClusterRole和ServiceAccount进行绑定(指定ns就创建rolebinding,不指定ns就创建clusterrolebinding)
kubectl create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -napp-team1

2.驱逐节点 4%

Task
将名为ek8s-node-1的节点设置为不可用,并重新调度在其上运行的所有Pod。

解题思路:

#第一步:驱逐node上所有pod,node状态变为noschedule
Kubectl drain ek8s-node-1 --ignore-daemonsets --force

3.集群升级 7%

Task
现有的Kubernetes集群正在运行版本1.18.8.仅将主节点上的所有Kubernetes控制平面和节点组件升级到版本
1.19.0
另外,在主节点上升级Kubelet和Kubectl
确定在升级之前drain主节点,并在升级后uncordon主节点。请不要升级工作节点,etcd,container管理器,
CNI插件,DNS服务或任何其他插件。

解题思路:

#第一步:连接到master节点
ssh k8s-master
#第二步:使用root用户驱逐节点
su root
Kubectl drain k8s-master
#第三步:安装1.19版本
apt-cache show kubeadm|grep 1.19.0
apt-get install kubeadm=1.19.0-00
#第四步:使用Kubeadm升级K8s
kubeadm upgrade apply 1.19.0 --etcd-upgrade=false
#第五步:升级kubelet
apt-get install kubectl=1.19.0-00
#第六步:恢复master节点
kubectl uncordon k8s-master

4.ETCD备份恢复 7%

Task
首先,为运行在https://127.0.0.2379上的现有etcd实例创建快照并将快照保到/var/lib/backup/etcd-snapshot.db
然后还原位于 /var/lib/bakup/etcd-snapshot-previous.db
提供了以下TLS证书与密钥,以通过etcdctl连接到服务器
CA证书:/opt/KUIN00601/ca.crt
客户端证书:/opt/KUIN00601/etcd-client.crt
客户端密钥:/opt/KUIN00601/etcd-client.key

解题思路:

#第一步:指定etcdctl版本
export ETCDCTL_API=3
#第二步:给etcd做快照
etcdctl --endpoints=https://127.0.0.2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot save /var/lib/backup/etcd-snapshot.db
#第三步:查看快照是否创建成功
etcdctl --endpoints=https://127.0.0.2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot status /var/lib/backup/etcd-snapshot.db -wtable
#第四步:恢复快照
etcdctl snapshot restore /var/lib/bakup/etcd-snapshot-previous.db
#第五步:查看恢复快照状态
etcdctl snapshot status /var/lib/bakup/etcd-snapshot-previous.db -wtable

PS:做完题目之后退回work节点终端界面

5.网络策略 4%

Task
在已有的namespace foobar中创建一个名为allow-port-from-namespace的新NetworkPolicy,以允许
namespace corp-bar访问其Pods的端口9200
解题思路:

#第一步:从k8s官网拷贝yaml模板(粘贴注意格式:set paste)
vim NetworkPolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-port-from-namespacenamespace: foobar
spec:podSelector: {}policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:project: corp-barports:- protocol: TCPport: 9200
#第二步:创建NetworkPolicy
kubectl apply -f NetworkPolicy.yaml

6.SVC 4%

Task
重新配置现有的deployment front-end,并添加名为HTTP的端口规范,以暴露现有容器nginx的端口80/
tcp。
创建一个名为front-end-svc的新服务,以暴露容器端口HTTP。
配置新服务以通过调度它们的节点上的NodePort暴露各个Pod

解题思路:

#第一步:修改deployment的yaml
添加以下一行:spec.template.spec.containers
name: nginx
ports:
- containerPort: 80name: http
#第二步:创建svc
kubectl create svc front-end-svc nodeport --tcp=80:80
#第三步:检查svc和deployment的标签是否一致
kubectl get deployment front-end --show-labels
kubectl get svc front-end-svc --show-labels
#第四步:检查是否成功
kubectl get svc front-end-svc
curl $ClusterIP
curl $nodeIP+随机端口

PS:在检查时一定进入k8s集群中,考试中不能跨集群curl,ssh到任何一个work节点再curl

7.Ingress 7%

Task
创建一个名为nginx的Ingress并遵守以下规则
Name:pong
Namespace:ing-internal
Exposing service hello on path /hello 使用端口5678
验证
curl -KL <INTERNAL_IP>/hello

解题思路:

#第一步:在k8s官网拷贝ingress模板
vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: pongnamespace: ing-internalannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- http:paths:- path: /hellopathType: Prefixbackend:service:name: helloport:number: 5678
#第二步:创建ingress
kubectl apply -f ingress.yaml
#第三步:验证
kubectl get ingress pong -n ing-internal -o yaml(查看INTERNAL_IP)
curl -KL <INTERNAL_IP>/hello
#返回hello证明成功

8.扩容 4%

Task
将deployment web-server扩容到4个pods

解题思路:

kubectl get deployment -A
kubectl scale --replicas=4 deployment web-server
kubectl get pod

9.通过node标签调度pod 4%

Task
按以下规则调度pod:
name:ngux-kusc00401
image:nginx
Node selector:disk=ssd

解题思路:

#第一步:查看当前集群所有node的标签
kubectl get node --show-labels
#第二步:创建pod
kubectl run --generator=run-pod/v1 ngux-kusc00401 --image=nginx --dry-run -o yaml>nginx1.yaml (V1.17.0)
kubectl run  ngux-kusc00401 --image=nginx --dry-run=client -o yaml>nginx1.yaml (V1.20.0以上)
#第三步:编辑yaml
vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: ngux-kusc00401name: ngux-kusc00401
spec:containers:- image: nginxname: ngux-kusc00401resources: {}
#添加一行:nodeSelector:disk: ssddnsPolicy: ClusterFirstrestartPolicy: Always
#第四步:执行yaml并检查是否running
kubectl apply -f nginx.yaml

10.节点数量 4%

Task
检查并查看有多少个节点准备就绪(不包括已获得Noschedule的节点)并将其写
入/opt/KUSC00402/kusc00402.txt

解题思路:

#第一步:查看当前集群中的Node有没有污点
kubectl describe node|grep Taint
#第二步:将结果输入到文件中
echo 2>/opt/KUSC00402/kusc00402.txt

11.创建多容器pod 4%

Task
创建一个名为kucc8的pod,并且使用以下镜像(可能指定了1至4个镜像)
nginx+redis+memcached+consul

解题思路:

#第一步:创建yaml模板文件
kubectl run kucc8 --image=nginx --dry-run=client -o yaml>kucc8.yaml
#第二步:编辑yaml文件
vim kucc8.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: kucc8name: kucc8
spec:containers:- image: nginxname: nginx
#添加以下内容:- image: redisname: redis- image: memcachedname: memcached- image: consulname: consulresources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
#第四步:查看结果
kubectl apply -f kucc8.yaml

12.pv 4%

Task
创建一个名为app-config的的pv,1Gi大小,权限为ReadOnlyMany便用hostPath类型挂载本地位置
为/srv/app-config

解题思路:

#第一步:从官网复制模板
vim app-config.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: app-configlabels:type: local
spec:storageClassName: manualcapacity:storage: 1GiaccessModes:- ReadOnlyManyhostPath:path: "/srv/app-config"
#第二步:创建pv并检查
kubectl apply -f app-config.yaml
kubectl get pv

13.pvc 7%

Task
创建一个pvc满足以下要求:
Name:pv-volume
Class:csi-hostpath-sc
Capcity: 10Mi
创建一个pod并挂载PVC:
name:test
image.:nginx
Mount path:/usr/share/nginx/html
编辑pod volume权限为ReadWriteOnce
最后,使用kubectl edit或者kubectl patch将pvc大小改为70Mi

解题思路:

#创建pvc
vim pv-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pv-volume
spec:storageClassName: csi-hostpath-scaccessModes:- ReadWriteOnceresources:requests:storage: 10Mikubectl apply -f vim pv-volume.yaml
#创建pod
apiVersion: v1
kind: Pod
metadata:name: test
spec:volumes:- name: pv-volumepersistentVolumeClaim:claimName: pv-volumecontainers:- name: nginximage: nginxports:- containerPort: 80name: "http-server"volumeMounts:- mountPath: "/usr/share/nginx/html"name: pv-volume
kubectl apply -f nginx.yaml
#修改PVC大小
kubectl edit pv-volume --record

14.输出日志 5%

Task
监控bar的日志
并将error字段内容输出到 /opt/KUTR00101/bar

解题思路:

kubectl logs bar |grep error >>/opt/KUTR00101/bar

15.sidecar 13%

Task
在pod big-corp-app中增加一个busybox的sidecar,新的sidecar容器使用以下命令:
/bin/sh -c tail -n+1-f /var/log/big-corp-app.log
挂载一个卷的名字叫logs并确保/var/log/big-corp-app.log文件在sidecar中可达
不要修改已经存在的容器
不要修改日志路径与文件

解题思路:

#编辑yaml文件
kubectl get pod big-corp-app -o yaml>new.yaml
vim new.yaml
#找对位置分别添加以下内容:volumeMounts:- name: logsmountPath: /var/log- name: busyboximage: busyboxargs: [/bin/sh, -c, 'tail -n+1 -f /var/log/big-corp-app.log']volumeMounts:- name: logsmountPath: /var/logvolumes:- name: logsemptyDir: {}kubectl delete -f new.yaml
kubectl apply -f new.yaml
#检查pod状态和日志
kubectl exec big-corp-app -c busybox -- tail -f /var/log/big-corp-app.log

16.top 5%

Task
从pod标签为name=cpu-loader中找到CPU负载最大的pod名称,并输出到
/opt/KUTR00401/KUTR00401.txt(该文件已经存在)

解题思路:

kubectl top pod -A -l name=cpu-loader --sort-by='cpu'
echo ${pod_name}>>/opt/KUTR00401/KUTR00401.txt

17.kubelet 13%

Task
名为wk8s-node-0的工作节点状态为NotReady,找到并解决此问题

解题思路:

ssh wk8s-node-0
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet
exit

18. pod 的滚动更新与回滚

Task
将 deployment 的 image 更新为 v2 版本.
验证是否更新完成.
回滚到 v1 版本.
解题思路:
题目yaml:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp
spec:selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: ikubernetes/myapp:v1resources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 80
# 更新镜像版本 : kubectl set image
kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
# 查看更新过程
kubectl rollout status deployment myapp
# 版本回滚
kubectl rollout undo deployment myapp

CKA认证考题+解析相关推荐

  1. 2022年RHCE认证考题解析最新版—RH294环境

    由于本人10.17已成功考过CSA,经过两周所学的ansible并结合题库整理出来的CE解析版 我也是11月月底就要考了,不过这套解析也是可以满足今年的redhat8题库 文中可能涉及一些命令的参数解 ...

  2. CKS认证考题+解析

    目录 0. 资料 1. ServiceAccount 2. kube-benct 3. NetworkPolicy 4. PodSecurityPolicy 5. clusterrole 6. aud ...

  3. 【2022】RedHat最新RHCE中级认证考题解析

    1.安装和配置 Ansible 安装和配置 Ansible按照下方所述,在控制节点 control 上安装和配置 Ansible:安装所需的软件包创建名为 /home/greg/ansible/inv ...

  4. 天大计算机辅助设计与制造考题,2017年CAD工程师认证考题答案及解析

    2017年CAD工程师认证考题答案及解析 1.显示错误报告信息,并且可以向 Autodesk 发送错误报告.此时需要将系统变量REPROTERROR设置为 A 0 B 1 C 2 D 3 答案:B 解 ...

  5. 高分通过CKA认证考试指南

    背景 作为SRE, 工作当中接触K8S也有一段时间了. 上个月,终于花了点时间把CKA拿下了,拿到成绩有96分,差一点可以满分了,还是有点小遗憾,哈哈! CKA的考试是上机实操,难度适中,需要你熟悉k ...

  6. Kubernetes CKA认证运维工程师笔记-Kubernetes网络

    Kubernetes CKA认证运维工程师笔记-Kubernetes网络 1. Service 存在的意义 2. Pod与Service的关系 3. Service三种常用类型 4. Service代 ...

  7. 《应试捷径-典型考题解析与考点贯通_系统分析师考试》复习重点提示

    <应试捷径-典型考题解析与考点贯通_系统分析师考试>复习重点,敬请关注  ********************************************************* ...

  8. MySQL的三层架构(连接认证、解析优化和存储引擎)

    对于数据库的认识,相信很大一部分人像我一样只停留在写各种SQL.优化各种查询语句以及索引的建立之上,只是停留在"会用"的基础上.但是如果想要充分发挥MySQL的性能,就必须要了解其 ...

  9. JS 基础知识点与高频考题解析

    变量类型 1,介绍js的基本数据类型.     Undefined.Null.Boolean.Number.String 2,类型判断用到哪些方法? typeof typeof xxx得到的值有以下几 ...

  10. Kubernetes CKA认证运维工程师笔记-Docker快速入门

    Kubernetes CKA认证运维工程师笔记-Docker快速入门 1. Docker 概念与安装 1.1 Docker 是什么 1.2 Docker 基本组成 1.3 版本与支持平台 1.4 Do ...

最新文章

  1. 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
  2. iterator and iterable
  3. 算法—振兴中华(C语言版)
  4. python 包编译安装mysql_CentOS7编译安装MySQL8.0.23和Python3.1.9
  5. 分组数据方差公式_连续变量假设检验 之 单因素方差检验
  6. python 基础列表解析(十八)
  7. Debug和Release区别
  8. You need to use a Theme.AppCompat theme
  9. nsis出错_怎样解决NSIS错误
  10. 防火墙双机热备(应用场景分析及配置)
  11. sublime报错信息乱码_Sublime如何解决中文乱码问题
  12. RUOK的完整形式是什么?
  13. 人工智能研究中心快递柜——代码分析三
  14. BT之家种子连接提取
  15. Cadence(virtuoso)集成电路设计软件基本操作——库管理
  16. redis6.2.6版本配置详解
  17. PostgreSQL集群方案-Postgres-XL
  18. 关于目标跟踪SiamMask的Youtube-VOS 数据库下载
  19. python 课程设计 夏敏捷_Python课程设计 微课视频版
  20. 一个ios斗鱼app教程(链接)

热门文章

  1. 使用 JavaScript 制作一个可以弹的吉他
  2. 学科前沿讲座 神经网络,机器学习,深度学习
  3. Xmarks被GFW屏蔽后,怎么同步?
  4. MES系统的工艺管理与绩效管理
  5. 标准化、归一化等的适用范围
  6. Python使用combinations实现排列组合
  7. 路由配置:理解secondary ip address
  8. JSON 标准 ECMA-404
  9. python画椭圆形_Python易学就会(五)turtle绘制椭圆与递归
  10. 嵌入式硬件上电后,程序的运行过程剖析(CPU、FLASH、内存)