【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.rhkb.cn/news/127269.html

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

相关文章

nodejs采集淘宝、天猫网商品详情数据以及解决_m_h5_tk令牌及sign签名验证(2023-09-09)

一、淘宝、天猫sign加密算法 淘宝、天猫对于h5的访问采用了和APP客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通…

OpenCV 11(图像金字塔)

一、 图像金字塔 **图像金字塔**是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采…

【面试心得】WebBench 整理

在面试九识的时候,被问到了WebBench的原理,当时没答上来,这里做一个整理 WebBench 源码【带注释】:GitHub - YukunJ/annotated-webbench-1.5: bilingually annotated Webbench-1.5 webbench是一个轻量的压测工具,可以…

docker desktop如何一键进入容器内部

对着对应的容器 点击 view files

交友盲盒完整版——详细源码分享

现在目前比较火热的一款app交友盲盒是通过uniappspringboot技术来制作的,原理其实很简单,大家一看便知。 大家自行下载到手机里面去使用即可,不支持ios手机 演示地址:https://share.weiyun.com/l3ovztce 下面就是给大家分享源码了…

快速文件复制与删除工具,将复制时文件夹里的原文件删除掉

无论是工作还是生活,我们都离不开文件的复制和管理。然而,手动复制文件不仅费时费力,而且容易出错。现在,我们为您推荐一款快速文件复制与删除工具,让您的文件管理更加高效! 首先,我们要进入文…

由于电脑出现msvcr110.dll提示错误的解决方法

最近,我在尝试运行一款新的软件时,突然遇到了一个错误提示,提示说缺少msvcr110.dll文件,导致软件无法启动。在使用电脑过程中,我们常常会遇到一些系统文件丢失的问题。其中,msvcr110.dll是Windows操作系统中…

Layui快速入门之第二节布局容器(固定宽度与完整宽度)

目录 一&#xff1a;固定宽度 二&#xff1a; 完整宽度 一&#xff1a;固定宽度 将栅格放入一个带有 class"layui-container" 的特定容器中&#xff0c;以便在小屏幕以上的设备中固定宽度&#xff0c;让列可控(两侧有留白效果) <!--固定宽度(两侧有留白效果)--&…

el-dialog弹窗中进度条的(mqtt提供)数据无法清空(清空方法)

清空方法 this.$nextTick(()>{this.$refs.devicefromDialog.clearValidate(airSwitchNo);//清除的校验规则prop传的值this.$refs[devicefromDialog].resetFields();//清除表单内容}) 场景&#xff1a;进度条的数据需要在关闭的时候&#xff0c;清空上一次的缓存记录&#xf…

Java开发之Redis核心内容【面试篇 完结版】

文章目录 前言一、redis使用场景1. 知识分布2. 缓存穿透① 问题引入② 举例说明③ 解决方案④ 实战面试 3. 缓存击穿① 问题引入② 举例说明③ 解决方案④ 实战面试 4. 缓存雪崩① 问题引入② 举例说明③ 解决方案④ 实战面试 5. 缓存-双写一致性① 问题引入② 举例说明③ 解决…

动态规划之子数组系列

子数组系列 1. 环形⼦数组的最⼤和2. 乘积最大子数组3. 等差数列划分4. 最长湍流子数组5. 单词拆分6. 环绕字符串中唯⼀的子字符串 1. 环形⼦数组的最⼤和 1.题目链接&#xff1a;环形⼦数组的最⼤和 2.题目描述&#xff1a;给定一个长度为 n 的环形整数数组 nums &#xff0c…

(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

❓ 剑指 Offer 67. 把字符串转换成整数 难度&#xff1a;中等 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为…

STM32初学-外部RTC时钟芯片DS3231

RTC(Real_Time Clock)即实时时钟&#xff0c;它是电子产品中不可或缺的东西。其最直接的作用就是时钟功能。细心的朋友可以发现&#xff0c;当我们的电脑或者手机没联网时&#xff0c;仍然可以正常显示日期与时钟&#xff0c;这就是RTC的功劳。 RTC的运行无需网络连接&#xff…

JavaScript设计模式(三)——单例模式、装饰器模式、适配器模式

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

MySQL——日志

日志的作用 1.用来排错 2.用来做数据分析 3.了解程序的运行情况&#xff0c;是否健康--》了解MySQL的性能&#xff0c;运行情况 分类 mysql很多有类型的日志&#xff0c;按照组件划分的话&#xff0c;可以分为 服务层日志 和 存储引擎层日志 &#xff1a; - 服务层…

java包装类简单认识泛型

1 包装类 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型代码中可以支持基本类型&#xff0c; Java 给每个基本类型都对应了一个包装 类型。类中比如由属性/方法 使用比较方便 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 装包/装箱 : …

分布式版本控制工具——git

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——git ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很…

学习笔记——树上哈希

普通子树哈希 树上的很多东西都是转化成链上问题的&#xff0c;比如树上哈希 树上哈希&#xff0c;主要是用于树的同构这个东西上的 什么是树的同构&#xff1f; 如图&#xff0c;不考虑节点编号&#xff0c;三棵树是同构的 将树转化成链&#xff0c;一般有两种方式&#xf…

JS防抖和节流在前端开发中的应用场景

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 防抖&#xff08;Debouncing&#xff09;⭐ 节流&#xff08;Throttling&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端…

KT142C-sop16语音芯片ic内置320Kbyte_USB更新内置空间详细说明

KT142C内置的是320K的空间&#xff0c;但是实际的大小&#xff0c;在电脑里面显示&#xff0c;应该是315Kbyte。 打开我的电脑&#xff0c;芯片连接PC之后&#xff0c;自动多出来了一个U盘&#xff0c;如下图所示&#xff1a; 这里的空间只有315KB &#xff0c;因为文件系统占…