【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系统函数创建子进程后,子进程只能执行继承的部分父进程代码&…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配,成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景,通过标准化 SQL 工作台与细粒度权限管控两大能力,助力企业安全高效…...