【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
相关文章:
【Kubernetes理论篇】2023年最新CKA考题+解析
文章目录 第一题:RBAC授权访问控制第二题:Node节点维护第三题:K8S集群版本升级第四题:ETCD数据库备份恢复第五题:NetworkPolicy网络策略第六题:Service四层负载第七题:Ingress七层负载第八题&am…...
【Linux】目录结构、路径
目录 1. 目录结构 1.1 基本概念 1.2 具体的目录结构 2. 路径 2.1 绝对路径和相对路径 2.2 特殊路径符 1. 目录结构 1.1 基本概念 Linux的目录结构是一个树形结构。 Windows系统可以拥有多个盘符,如 C盘、D盘、E盘。Linux没有盘符这个概念,只有一…...
Java-集合框架-List,Set,Map,队列
文章目录 Java集合框架:List,Set,Map,队列Java集合框架是什么?如何使用?ListSetMap队列 什么场景使用?优缺点是什么?ListSetMap队列 Java示例List示例Set示例Map示例队列示例 对比 J…...
第一章_线程基础知识
先拜拜大神 Doug Lea(道格.利) java.util.concurrent在并发编程中使用的工具包 为什么学习并用好多线程极其重要 硬件方面 摩尔定律失效 摩尔定律:它是由英特尔创始人之一Gordon Moore(戈登.摩尔)提出来的。其内容为…...
linux(centos7)定时关机解决方案
使用场景与痛点: 根据实际需求,每个星期五都要关闭服务器若干,痛点如下: 1是服务器比较多,按起来麻烦。2是因为周五时间点特殊,着急下班容易忘记关闭服务器。那些要关注才能看的博客,不是我喷&a…...
reactnative笔记
1、React Native 搭建开发环境和创建新项目并运行的详细教程_react项目怎么运行_AaVictory.的博客-CSDN博客 环境搭建遇到报错靠下面两个解决的(模拟器的adb和reactnative的adb版本不同,且都配置环境) 2、 adb server version (41) doesn‘t…...
软件架构模式+系统架构
架构模式对比 分层模式 一般信息系统中最常见的4层划分如下: Presentation layer 表示层(也就是UI层)Application layer 应用层(也就是服务层)Business logic layer 业务逻辑层(也就是领域层)…...
SQL 语句学习总结:
1. 四范式&&范式好处: 数据库范式是数据表设计的规范,在范式规范下,数据库里每个表存储的重复数据降到最少(这有助于数据的一致性维护),同时在数据库范式下,表和表之间不再有很强的数据…...
【Linux】简单的小程序:进度条
在学习进度条之前,需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符(\n)其实就是回车式换行符,另起一行,光标指向最新一行的开头。回车符(\r)是光标指向这一行的开头。 缓冲区 &a…...
Ansible之playbooks剧本
文章目录 一.playbooks介绍1.playbooks简述2.playbooks剧本格式3.playbooks组成部分4.运行playbooks及检测文件配置 二.模块实战实例1.playbooks模块实战实例2.vars模块实战实例3.指定远程主机sudo切换用户4.when模块实战实例5.with_items迭代模块实战实例6.Templates 模块实战…...
在云原生时代,构建高效的大数据存储与分析平台
文章目录 1. **选择适当的数据存储技术:**2. **采用分布式架构:**3. **数据分区和索引:**4. **采用列式存储:**5. **数据压缩和编码:**6. **使用缓存技术:**7. **数据分片和复制:**8. **自动化运…...
第六章,线性变换,1-线性变换、表示矩阵、线性算子
第六章,线性变换,1-线性变换、表示矩阵、线性算子 线性变换表示矩阵 线性算子 R 2 R^2 R2中特殊的线性变换旋转变换算子反射变换算子投影变换算子伸压变换算子剪切变换算子 玩转线性代数(32)线性变换的相关概念的笔记,相关证明以及例子见原文…...
15个关于AI的Github库
这里是我们精选的创新项目列表(排名不分先后),这些项目正在机器学习和人工智能领域蓬勃发展 1:privateGPT 作者:imartinezGithub 星数:16.7K描述:利用LLM的力量,在没有互联网连接的情…...
在Jupyter 中 from XXX import * 报错
在Jupyter 中 导入模块会出现 from XXX import * 报错 但是 XXX.py 确实在同一个目录下,但是无法导入XXX中的XX方法 解决问题是 : 麻烦添加 import sys sys.path.append(./)通过执行 sys.path.append(‘./’) 这行代码,您将当前目录&am…...
小程序密码显示与隐藏的实现
默认密码隐藏起来(显示为点),后面的图标是闭眼;用户点击图标后,图标变成睁眼,同时把密码明文显示出来;如此循环 Page({data: {passwordType: true, // 切换是否密码框show_pass: false // 是否…...
“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展
生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合…...
已解决“SyntaxError: invalid character in identifier“报错问题
本文摘要:本文已解决 Python FileNotFoundError 的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领…...
2023-09-02力扣每日一题
链接: 2511. 最多可以摧毁的敌人城堡数目 题意和解: 阅读理解题,要从1到-1或-1到1,中间只能有0,求最多能有多少0 实际代码: #include<bits/stdc.h> using namespace std; int captureForts(vect…...
服务war包部署SpringBootServletInitializer 的作用
在 Spring Boot 应用中,如果需要将应用打包成 WAR 包并部署到外部的 Servlet 容器中,就需要使用 SpringBootServletInitializer。 使用步骤: 必须创建war项目,需要创建好web项目的目录嵌入式Tomcat依赖scope指定provided编写Spr…...
[Linux]进程程序替换
[Linux]进程程序替换 文章目录 [Linux]进程程序替换进程程序替换的意义见一见进程程序替换进程程序替换的原理进程程序替换中的写时拷贝介绍进程程序替换接口 进程程序替换的意义 Linux系统下使用fork系统函数创建子进程后,子进程只能执行继承的部分父进程代码&…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
