使用豆包MarsCode 实现高可用扫描工具

news2024/12/29 9:34:00

以下是「 豆包MarsCode 体验官」优秀文章,作者郝同学测开笔记。

前言

最近接触K8s,了解到K8s提供了非常方便的实现高可用的能力,再加上掘金推出「豆包MarsCode初体验」征文活动,所以打算使用豆包 MarsCode IDE来实现一个高可用扫描工具。 豆包 MarsCode IDE 是一个云端 AI IDE 平台。通过内置的 AI 编程助手,开箱即用的开发环境,详细介绍可以参考官网:docs.marscode.cn/。

准备工作

进入豆包MarsCode,进行注册登录,进入主页面,还是比较简洁的,如下图所示

image.png

基于前言中提到的想法,基于模版来创建该项目,选择模版GO,输入项目名称KubeKeeper,以及简要描述,点击创建即可。如下图所示:

image.png

 这里提一起这个项目名称的想法,KubeKeeper - 结合了 Kubernetes(Kube)和保护者(Keeper),象征着守护和管理你的集群。哈哈,之后想要做的东西很多,这里先从高可用扫描工具开始。

创建之后,显示英文,感觉不舒服的朋友,可以点击截图所示位置,切换为中文显示

image.png

好了,到这里就算准备完成了,可以进入代码实现环节了。整体下来,使用还是比较容易的,不需要过多看文档就可以上手使用了。

项目背景

K8s提供了非常方便的实现高可用的能力,这使用户可以在K8s中非常标准化的实现高可用。只要有标准和规范,扫描工具就有用武之地。 扫描系统中的所有服务,分析是否满足K8s的要求就可以初步判断出我们的系统哪些模块是不符合高可用设计的。

在K8s中实现高可用服务需要怎么做呢?

  • 使用Deployment或者StatefulSet接管Pod的生命周期,保持多个Pod在集群中处于存活状态
  • 配置Pod反亲和性,保证Pod分布在不同的节点,防止单节点部署的情况出现
  • 使用Service接管Pod网络,让服务拥有负载均衡和故障转移的能力
  • 为Pod配置探针,让K8s能及时感知Pod的异常状态

实现原理

在动手开发扫描工具之前我们需要先明确一下扫描的规则。 基本上我们需要注意以下扫描规则。

  • 在K8s中维护Pod生命周期的在线对象有DaemonSet、Deployment和StatefulSet,但是只有Deployment和StatefulSet需要扫描副本数量和Pod反亲和性,因为DaemonSet本身保证在每个节点上都会且只会启动一个Pod。
  • 对于针对探针的扫描,在原则上readiness探针是必须设置的,没有设置readiness探针是一个错误(error)。而如果没有设置liveness探针可以抛出一个警告(warning)来具体分析,因为在低版本的K8s上没有启动探针的情况下,有些项目需要担心liveness探针引起的无限重启问题。启动探针优先级最低,可以根据项目情况选择扫描或者不扫描。
  • 除了要扫描Pod是否设置了探针,一般还需要计算出探针判断一个Pod处于异常状态所需要的最长时间。在第3章介绍过探针需要一定的时间来检测容器状态,而根据相关参数的配置不同,需要的时间也不同。大家需要将这个时间也计算出来,因为在高可用的测试中,服务的恢复时间也是一个重要的指标。
  • Job、CronJob等离线业务原则上不在扫描名单中,因为离线业务一般不在高可用测试的范围内。但其实仍然有一个扫描项目是对所有Pod生效的,就是扫描Pod是否配置了节点亲和性或者节点选择器这些调度策略,因为如果Pod没有配置调度策略则意味着Pod是随机调度到集群中任何一个节点上的。这样的随机调度策略理论上是很不安全的,因为如果K8s集群的主节点上被调度了一个I/O密集型的计算任务的话,它的I/O很可能会把主节点冲垮导致整个集群出现问题,所以基于稳定性考虑我们也需要针对调度策略进行扫描。

代码实现

了解清楚背景和实现原理后,接下来,我们就使用豆包 MarsCode IDE来实现。

AI实现客户端初始化

首先,进行客户端的初始化,直接使用AI助手来完成,看看AI实现效果,然后再进行改进。
在对话框中,输入“使用go实现k8s客户端的初始化,最好可以封装实现”,AI实现效果如下图:

image.png

image.png

 如截图所示,点击代码实例中的复制或者插入光标处,就可以使用代码了,这是我常用的方式,当然也可以点击添加至新文件。

哈哈,看着还不错,直接可以使用。

AI协助解决编译报错

我们先不急着实现之后的代码,先来编译看看效果,在控制台输入go build -o ./kubescan ./main.go ,会看到控制台报错,如下图

image.png

截图可以看到有一个AI修复按钮,点击这个按钮,会自动将错误提交给AI,得到错误解决方案,如下图

image.png

可以看到解决方案还是靠谱的,根据解决方案进行修改后,再次执行go build -o ./kubescan ./main.go会看到编译成功了,编译可能需要等待一小段时间。
笔者是刚学Go不久,很多语法还不是很熟悉,但是AI助手很大提升了我的编码效率。

AI协助添加注释

接下来,我们在使用AI来给函数添加注释,选中代码,可以快速唤起内嵌对话框,如图所示

image.png

点击注释,会自动生成注释,如图所示

image.png

可以选择使用或者不使用,这里生成的很准确,笔者采用该注释。

AI协助解释代码

接下来,我们在使用AI来解释代码,看看效果如何,还是上面选中的代码,然后点击解释,如下图

image.png

解释还是相当清楚的,最后还有一个总结,应该是一看就明白了。

AI协助生成单元测试

单元测试好多人懒得写,感觉太麻烦,但是单元测试还是必要的,这里借助AI看看是否能快速编写单元测试用例。还是上面选中的代码,点击单元测试,如图所示

image.png

 哈哈,相当可以啊,直接添加到新文件就可以了,效率太高了。

继续高可用扫描工具实现

上面我们已经通过AI完成了客户端的初始化,以及对AI能力使用有了一定的了解。接下来我们继续让AI来协助我们完成高可用工具的实现。

实现遍历pod

我们先获取命名空间下的pod,然后进行遍历,读取每个POD的高可用配置信息,将不符合扫描规则的输出或者保存到数据库即可。
如图所示:

image.png

借助AI来解释代码,爽歪歪,不用自己编织语言来解释。

实现HAScanner 和 Scan 方法

这里就是主要逻辑了,获取pod的高可用配置信息。先定义了两个结构体,如图所示

image.png

还是借助AI解释,我觉得我我自己解释的清晰多了。

接下来实现Scan方法,如图所示

image.png

整体代码还是比较简单的,AI解释的也很清晰,这里不做过多说明了,最后我们看看效果。

image.png

由于VP限制,只有连接代理才可以访问公司的k8s集群,在云端无法执行,所以这是我本地执行的效果,代码是一样的。可以通过pod的高可用配置信息,来确定哪些pod有优化空间。

最后展望

借助豆包MarsCode 很快的实现了这个高可用扫描工具,正如我的项目名称KubeKeeper,守护和管理你的集群,高可用扫描工具只是其中一个功能,后续我们还可以实现资源回收工具、故障注入工具等,期待一起探索吧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UniApp基于xe-upload实现文件上传组件

xe-upload地址:文件选择、文件上传组件(图片,视频,文件等) - DCloud 插件市场 致敬开发者!!! 感觉好用的话,给xe-upload的作者一个好评 背景:开发中经常会有…

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录 一、分布式与微服务概念1.大型互联网架构目标2.集群和分布式(1)集群 (Cluster)(2)分布式计算 (Distributed Computing)(3)集群与分布式的关系(4)实践中的应用案例 3.架构演…

【AI大模型】向量及向量知识库

一、词向量与向量 什么是词向量 在机器学习和自然语言处理(NLP)中,词向量(word embedding)是一种以单词为单位将每个单词转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。 词向量背后的主要想法是…

.NET 6 中,使用 ActionFilterAttribute 实现 AOP(面向切面编程)

AOP概述:AOP(面向切面编程)是一种编程规范的风格,通过横切的思想,将系统功能和业务功能分离开,以提高代码的可维护性和清晰度。 系统功能模块: 1、缓存模块: 作用:提高…

OpenHarmony(鸿蒙南向)——平台驱动指南【MIPI CSI】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 CSI(Camera Serial Interface&#xf…

wx小程序中,商城订单详情显示还有多少分钟关闭

问题:wx小程序中,商城订单详情需要显示还有多少分钟关闭 思路:创建订单时间戳和当前时间戳相减,得到时间差,再除1000,得到相差秒数,然后除60,向下取整,得到分钟。 代码如…

物联网行业中模组的AT指令详解以及使用

01 概述 AT 命令(AT Commands)最早是由发明拨号调制解调器(MODEM)的贺氏公司(Hayes)为了控制 MODEM 而发明的控制协议。后来随着网络带宽的升级,速度很低的拨号 MODEM 基本退出一般使用市场&am…

凌晨1点开播!Meta Connect 2024开发者大会,聚焦Llama新场景和AR眼镜

作者:十九 编辑:李宝珠 北京时间 9 月 26 日凌晨 1 点,Meta Connect 2024 开发者大会即将举行,马克扎克伯格将聚焦 AI 和元宇宙,向大家分享 Llama 模型的更多潜在应用,并介绍 Meta 最新产品 AR 眼镜和 Meta…

java基础 之 实现一个链表

文章目录 引言链表节点单向链表双向链表链表的优缺点 java封装的链表自己实现一下链表LinkNode节点类LinkedList类实现示例图代码 引言 1、新建的节点需要两个值:value 和 节点 next; 2、新建的节点链表需要有一个head; 3、根据位置对链表进行…

The Open Group 2024生态系统架构·可持续发展年度大会全面解读

在全球数字化转型加速的时代背景下,人工智能技术正以前所未有的速度重塑各行各业的生态系统。尤其是随着ChatGPT、Sora等技术的爆发,AIGC(人工智能生成内容)技术在多个领域展现出超越人类的能力,AGI(通用人…

Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命

在我们发布 Llama 3.1 模型群后的两个月内,包括 405B - 第一个开放的前沿级人工智能模型在内,它们所产生的影响令我们兴奋不已。 虽然这些模型非常强大,但我们也认识到,使用它们进行构建需要大量的计算资源和专业知识。 我们也听到…

成都网安周暨CCS2024 | 大模型安全与产业应用创新研讨活动成功举办

9月11日-12日,作为2024年国家网络安全宣传周成都系列活动的重磅活动之一,CCS 2024成都网络安全系列活动在成都举行。“大模型安全与产业应用创新研讨活动”同期举办,本场活动由百度安全、成都无糖信息联合承办,特邀云安全联盟CSA大…

MYSQL求月份同比数据和环比数据

1.需求题目如下 1.首先求出每月每个account_id 对应的amount金额 2.利用表自关联,获取上月,上年对应月份及金额, 关联条件利用 主表月份-1个月上月月份 和 主表月份-1年上年月份 3.最后求同比和环比 附代码及测试数据 CREATE TABLE transa…

HTML·第3章 表格布局与表单交互

3.1 表格概述 3.1.1 表格的结构 表格是由行和列组成的二维表,而每行又由一个或多个单元格组成,用于放置数据或其他内容。表格中的单元格是行与列的交叉部分,是组成表格的最基本单元。单元格的内容是数据,也称数据单元格。数据单元…

如何在 macOS(MacBook Pro、Air 和 iMac)上恢复未保存的 Word 文档

Microsoft Word 在许多用户中很受欢迎,并且有多种用途。无论是为学校写论文、在办公室写报告还是其他许多事情。但是不保存文档并丢失数据可能是您可能面临的最可怕的噩梦。但是,也有几种方法可以在 macOS 上恢复未保存的 Word 文档。 用户在 Windows P…

【C++笔试强训】如何成为算法糕手Day5

学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…

RabbitMQ下载安装运行环境搭建

RabbitMQ运行环境搭建 1、Erlang及RabbitMQ安装版本的选择2、下载安装Erlang2.1、下载Erlang2.2、安装Erlang2.2.1、安装Erlang前先安装Linux依赖库2.2.2、解压Erlang压缩包文件2.2.3、配置2.2.4、编译2.2.5、安装2.2.6、验证erlang是否安装成功 3、RabbitMQ下载安装3.1、下载3…

基于SSM+小程序的医院核酸检测服务管理系统(医院2)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的医院核酸检测服务管理系统实现了管理员、用户管理、普通管理员、医护人员。 1、管理员实现了首页、用户管理、医护人员管理、普通管理员、通知公告管理、疫苗接种管理、核…

2023_Spark_实验九:编写WordCount程序(Scala版)

需求: 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤: 文件单词规律(空格分开)单词切分单词的统计(k,v)->(k:单词,V:数量)打印 框架: 单…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…