【Kubernetes理论篇】2023年最新CKA考题+解析

文章目录

    • 第一题:RBAC授权访问控制
    • 第二题:Node节点维护
    • 第三题:K8S集群版本升级
    • 第四题:ETCD数据库备份恢复
    • 第五题:NetworkPolicy网络策略
    • 第六题:Service四层负载
    • 第七题:Ingress七层负载
    • 第八题:DeployMent管理Pod扩容(送分题)
    • 第九题:Pod指定调度节点
    • 第十题:检查可用Node节点数量
    • 第十一题:Pod封装多容器(送分题)
    • 第十二题:PersistentVolume持久化存储卷
    • 第十三题:PersistentVolumeClaim
    • 第十四题:Pod日志查看(送分题)
    • 第十五题:Sidecar代理
    • 第十六题:Pod CPU资源使用率
    • 第十七题:K8S集群故障排查(送分题)

第一题:RBAC授权访问控制

官方参考地址:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/

考题:创建一个名为deploy-role的clusterrole,该clusterrole只允许对deployment、daemonset、statefulset具有create权限,基于现有的名称空间 topic-1中创建一个名为cicd-token-user的 serviceaccount。

限于名称空间 topic-1中,将clusterrole deploy-role绑定到serviceaccount cicd-token-user。

解题:

1、创建ClusteRrole角色

kubectl create clusterrole deploy-role --verb=create --resource=deployments,daemonsets,statefulsets

2、创建ServiceAccount账户

kubectl create serviceaccount cicd-token-user -n topic-1

3、创建RoleBinding将角色与账户绑定

kubectl create rolebinding cicd-token-bind --clusterrole=deploy-role --serviceaccount=topic-1:cicd-token-user  -n topic-1

4、验证绑定信息

kubectl describe rolebinding cicd-token-bind -n topic-1

在这里插入图片描述

第二题:Node节点维护

官方参考地址:https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/

考题:将k8s-node-1节点设置为不可用,然后重新调度该节点上的所有Pod

解题:

1、设置节点不可调度

kubectl cordon k8s-node-1

2、驱除k8s-node-1节点上Pod

kubectl drain k8s-node-1 --ignore-daemonsets --delete-emptydir-data --force

第三题:K8S集群版本升级

官方参考地址:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

考题:现有的Kubernetes 集群正在运行版本1.23.1。仅将master节点上的所有 Kubernetes控制平面和节点组件升级到版本1.23.2。

确保在升级之前 drain k8s-master-1节点,并在升级后 uncordon k8s-master-1节点。

另外,在主节点上升级kubelet和kubectl,请不要升级工作节点,etcd,container 管理器,CNI插件, DNS服务或任何其他插件。

解题:

1、驱除节点pod

kubectl cordon k8s-master-1
kubectl drain k8s-master-1 --delete-emptydir-data --ignore-daemonsets --force

2、将kubeadm升级到1.23.2版本

apt-cache show kubeadm|grep 1.23.2
apt-get update
apt-get install kubeadm=1.23.2-00
Do you want to continue? [Y/n] y

3、验证升级计划

kubeadm version
kubeadm upgrade plan

5、选择升级的版本 v1.23.2,忽略etcd升级

kubeadm upgrade apply v1.23.2 --etcd-upgrade
[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y

正确升级完成后会显示下图:

在这里插入图片描述

5、升级kubelet、kubectl

apt-get install kubelet=1.23.2-00 kubectl=1.23.2-00
Do you want to continue? [Y/n] y
kubelet --version
kubectl version

6、设置节点可调度

kubectl uncordon k8s-master-1
kubectl get nodes

在这里插入图片描述

第四题:ETCD数据库备份恢复

官方参考地址:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/

考题:首先,为运行在https://127.0.0.1:2379上的现有 etcd 实例创建快照并将快照保存到 /tmp/etcd-snapshot.db文件

然后还原位于/tmp/etcd-snapshot-previous.db的现有先前快照。

提供了以下TLS证书和密钥,以通过etcdctl连接到服务器。

  • CA 证书: /etc/kubernetes/pki/etcd/ca.crt
  • 客户端证书: /etc/kubernetes/pki/etcd/server.crt
  • 客户端密钥: /etc/kubernetes/pki/etcd/server.key

解题:

1、备份ETCD数据

export ETCDCTL_API=3etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save  /tmp/etcd-snapshot.db

2、恢复ETCD数据

etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot restore /tmp/etcd-snapshot-previous.db

第五题:NetworkPolicy网络策略

官方参考地址::https://kubernetes.io/docs/concepts/services-networking/network-policies/

考题:基于已经存在的 topic-5 名称空间中创建一个名为allow-port的新NetworkPolicy。

确保新的NetworkPolicy允许echo名称空间中的Pods连接到名称空间topic-5中的Pods的9900端口。

进一步确保新的NetworkPolicy:

  • 不允许对没有在监听端口9900的Pods的访问
  • 不允许非来自名称空间echo中的Pods的访问

解题:

1、给echo名称空间打一个标签

kubectl label ns echo project=echo

2、编写资源清单 && 执行资源清单

vim networkpolicy.yaml
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-portnamespace: topic-5
spec:podSelector:matchLabels: {}policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:project: echoports:- protocol: TCPport: 9900
kubectl apply -f networkpolicy.yaml

第六题:Service四层负载

官网参考地址:http://kubernetes.io/docs/concepts/workloads/controllers/deployment

https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

考题:重新配置一个已经存在的front-end的deployment,在名字为nginx的容器里面添加一个端口配置,名字为http,暴露端口号为80,然后创建一个service,名字为front-svc,暴露该deployment的http端口,并且service的类型为NodePort。

解题:

1、添加deployment暴露端口配置

kubectl edit deployment front-end

在这里插入图片描述

2、编写service资源清单 && 执行资源清单

vim front-svc.yml 
---
apiVersion: v1
kind: Service
metadata:name: front-svc
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: http
kubectl apply -f front-svc.yml 

3、验证service是否关联到Pod

kubectl describe svc front-svc

在这里插入图片描述

第七题:Ingress七层负载

官网参考地址::http://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource

考题:如下创建一个nginx Ingress资源满足一下要求:

  • 名称:ingress-topic-7

  • 名称空间:topic-7

  • 使用服务端口 6686在路径 /go 上公开服务 go

解题:

1、创建 ingressclass && 执行

vim ingressclass.yml 
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:labels:app.kubernetes.io/component: controllername: nginx-examplenamespace: topic-7annotations:ingressclass.kubernetes.io/is-default-class: "true"
spec:controller: k8s.io/ingress-nginx
kubectl apply -f ingressclass.yml 

2、创建ingress规则 && 执行

vim ingress.yml 
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress.yml namespace: topic-7annotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginx-examplerules:- http:paths:- path: /gopathType: Prefixbackend:service:name: goport:number: 6686

第八题:DeployMent管理Pod扩容(送分题)

考题:将loadbalancer的deployment管理的Pod的副本数扩容成6个

解题:

1、修改副本为6

kubectl edit deployment loadbalancer

在这里插入图片描述
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、验证副本数

kubectl get deployment loadbalancer

在这里插入图片描述

第九题:Pod指定调度节点

官方参考地址::https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes/

考题:创建一个Pod,名字为topic-9,镜像地址是nginx,调度到具有env=uat标签的节点上

解题:

vim topic-9-pods.yml 
---
apiVersion: v1
kind: Pod
metadata:name: topic-9
spec:containers:- name: nginximage: nginxnodeSelector:env: uat
kubectl apply -f topic-9-pods.yml 

第十题:检查可用Node节点数量

考题:检查集群中有多少节点为Ready状态(不包括被打上 Taint:NoSchedule 的节点),之后将数量写到/tmp/kube-node.txt文件中。

解题:

k8s_ready=$(kubectl get node|grep -w "Ready"|wc -l)
k8s_noschedule=$(kubectl describe node|grep -w Taints|grep "NoSchedule" |wc -l)
k8s_sum=$(( ${k8s_ready} - ${k8s_noschedule} ))
echo ${k8s_sum} > /tmp/kube-node.txt

第十一题:Pod封装多容器(送分题)

考题:创建一个Pod,名字为topic-11,这个Pod包含4容器,为nginx、redis、memcached、consul

解题:

1、创建Pods

cat topic-11-pods.yml 
---
apiVersion: v1
kind: Pod
metadata:name: topic-11
spec:containers:- name: nginximage: nginx- name: redisimage: redis- name: memcachedimage: memcached- name: consulimage: consul
kubectl apply -f topic-11-pods.yml 

2、验证Pods

kubectl get pods topic-11

在这里插入图片描述

第十二题:PersistentVolume持久化存储卷

官方参考地址::https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume

考题:创建一个persistentvolume,名字为nginx-config,大小为1Gi,访问权限为ReadWriteMany。Volume的类型为hostPath,路径为/tmp/nginx-config

解题:

cat pv.yaml 
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nginx-config
spec:capacity:storage: 1GiaccessModes:- ReadWriteManyhostPath:path: "/tmp/nginx-config"
kubectl apply -f pv.yaml

第十三题:PersistentVolumeClaim

官方参考地址:https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#%E5%88%9B%E5%BB%BA-persistentvolumeclaim

考题:创建一个名字为pvc-volume的pvc,指定storageClass为csi-hostpath-sc,大小为20Mi

然后创建一个Pod,名字为web-server,镜像为nginx,并且挂载该PVC至/usr/share/nginx/html,挂载的权限为ReadWriteOnce。之后通过kubectl edit或者kubectl path将pvc改成70Mi,并且记录修改记录。

解题:

1、编写PVC资源清单 && 执行

vim pvc.yaml 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-volume 
spec:accessModes:- ReadWriteOnceresources:requests:storage: 20MistorageClassName: csi-hostpath-sc
kubectl apply -f pvc.yaml

2、创建Pod,挂载PV

cat pod-pvc.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: web-server
spec:volumes:- name: pvc-volumepersistentVolumeClaim:claimName: pv-volumecontainers:- name: nginximage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: pvc-volume
kubectl apply -f pvc-pods.yaml

3、修改PVC容量为70Mi

在这里插入图片描述

第十四题:Pod日志查看(送分题)

考题:监控名为foobar的Pod的日志,并过滤出具有unable-access-website 信息的行,然后将写入到 /tmp/foobar.txt

解题:

kubectl logs foobar|grep  unable-access-website >/tmp/foobar.txt

第十五题:Sidecar代理

官方参考地址::http://kubernetes.io/docs/concepts/cluster-administration/logging

考题:使用busybox Image来将名为sidecar的sidecar容器添加到现有的Pod legacy-app上,新的sidecar容器必须运行以下命令:

/bin/sh -c tail -n+1 -f /var/log/legacy-app.log

使用volume挂载/var/log/目录,确保sidecar能访问/var/log/legacy-app.log文件

解题:

1、基于legacy-appPod添加新的sidecar容器

kubectl get pods legacy-app -o yaml > legacy-app.yml
vim legacy-app.yml

编辑后需要修改以下几个步骤

第一步:添加卷(没有则添加)
在这里插入图片描述

第二步:添加自带容器的卷挂着配置

在这里插入图片描述

第三步:添加新的容器

在这里插入图片描述

2、删除已存在的Pod,执行上面更改完成的配置清单

kubectl delete pod legacy-app --force  --grace-period=0
kubectl apply -f legacy-app.yml

3、验证,正常1s会输出一条日志

kubectl logs -f  legacy-app -c  sidecar

在这里插入图片描述

第十六题:Pod CPU资源使用率

官方参考地址:https://kubernetes.io/docs/reference/kubectl/cheatsheet/#%E4%B8%8E%E8%BF%90%E8%A1%8C%E4%B8%AD%E7%9A%84-pods-%E8%BF%9B%E8%A1%8C%E4%BA%A4%E4%BA%92

考题:找出标签是name=cpu-user的Pod,并过滤出使用CPU最高的Pod,然后把它的名字写在已经存在的/tmp/cpu.txt文件里

解题:

1、查看CPU使用率最高的Pod(name=cpu-user)

kubectl top pod -l name=cpu-user --sort-by=cpu -A

2、将查看到Pod名称输出到 /opt/KUTR00401/KUTR00401.txt

echo "kube-apiserver-k8s-master-1" > /tmp/cpu.txt

第十七题:K8S集群故障排查(送分题)

考题:一个名为k8s-node-1的节点状态为NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成。

可以使用以下命令,通过ssh连接到wk8s-node-0节点:

ssh qinzt@k8s-node-1

可以使用以下命令,在该节点上获取更高权限:

sudo -i

解题:

1、进入故障节点

ssh qinzt@k8s-node-1
sudo -i

2、重启kubelet && 加入开机自启动

systemctl status kubelet
systemctl restart kubelet
systemctl enable kubelet

3、退出到原终端

exit
exit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/96049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jupyter常用的方法以及快捷键

选中状态 蓝色 按enter 进入编辑状态 编辑状态 绿色 按Esc 进入选中状态 Code模式运行是运行代码 Markdown模式运行是进入预览状态 - - - 是文本格式的一种精简的语法形式 Raw NBConvert 是默认文本状态 - - - 输入什么样 展示什么样 Y - - - 切换code模式 M - - - 切换Markdo…

WideDeep模型介绍

文章目录 1. Wide&Deep模型的记忆能力和泛化能力2. Wide&Deep模型的结构3. Wide&Deep模型的进化——Deep&Cross模型4. Wide&Deep模型的影响力 Wide&Deep模型是 记忆能力和 泛化能力的综合,是谷歌在2016年提出的。正如其名,Wid…

vscode 对模型train、detect脚本进行Debug时配置参数

我们训练yolov5代码时,一般会配置一些参数,比如模型权重文件--weights, 模型的配置文件--cfg, 以及训练的数据--data, 对应的训练脚本为: 训练train python train.py -- weights ./yolov5s.pt --cfg models\yolov5s.yaml --data ./data/coco128.yaml…

乐理-笔记

乐理笔记整理 1、前言2、认识钢琴键盘及音名3、升降号、还原号4、如何区分同一音名的不同键?5、各类音符时值的关系6、歌曲拍号7、拍号的强弱规律8、歌曲速度(BPM)9、附点音符10、三连音12、唱名与简谱数字13、自然大调(白键&…

C#关于WebService中File.Exists()处理远程路径的异常记录

目录 前言方案一打开网站对应的程序池的高级设置按下图步骤设置凭据重启网站若方案一未能解决,请继续尝试方案二👇 方案二从控制面板进入到 凭据管理器为windows凭据添加凭据点击**Windows凭据**,并点击**添加Windows凭据**键入远程路径的地址…

人工智能轨道交通行业周刊-第58期(2023.8.28-9.3)

本期关键词:成都智慧工厂、机务段、站台地标、备案大模型、AIGC报告 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路…

elasticsearch8.9.1集群搭建

目录 1.官网文档 2.安装步骤 2.1 环境准备 2.2 添加用户 2.3 修改文件profile文件 2.4 修改elasticsearch.yml 2.5 修改 sysctl.conf 3.启动 3.1 切换到kibana 3.2 启动elasticsearch 3.3 启动kibana 3.4 验证节点情况 1.官网文档 elasticsearch文档:ht…

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求,以及层层过滤用户的访问需求,遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直…

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…

Linux Input子系统

一、基本概念 按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。本质属于字符设备。 1. input子系统结构如下: input 子系统分为 input 驱动层、input 核心层、input 事件处理层&…

分布式集群——搭建Hadoop环境以及相关的Hadoop介绍

系列文章目录 分布式集群——jdk配置与zookeeper环境搭建 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍 文章目录 前言 一 hadoop的相关概念 1.1 Hadoop概念 补充:块的存储 1.2 HDFS是什么 1.3 三种节点的功能 I、NameNode节点 II、fsimage与edits…

无涯教程-JavaScript - PERCENTILE函数

PERCENTILE函数替代Excel 2010中的PERCENTILE.INC函数。 描述 该函数返回范围中值的第k个百分位数。您可以使用此功能建立接受阈值。 语法 PERCENTILE (array,k)争论 Argument描述Required/OptionalArrayThe array or range of data that defines relative standing.Requi…