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

以下是「 豆包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.rhkb.cn/news/433136.html

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

相关文章

LeetCode(Python)-贪心算法

文章目录 买卖股票的最佳时机问题穷举解法贪心解法 物流站的选址(一)穷举算法贪心算法 物流站的选址(二)回合制游戏快速包装 买卖股票的最佳时机问题 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你…

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂…

python之装饰器、迭代器、生成器

装饰器 什么是装饰器? 用来装饰其他函数,即为其他函数添加特定功能的函数。 装饰器的两个基本原则: 装饰器不能修改被装饰函数的源码 装饰器不能修改被装饰函数的调用方式 什么是可迭代对象? 在python的任意对象中&#xff…

C# DotNetty客户端

1. 引入DotNetty包 我用的开发工具是VS2022,不同工具引入可能会有差异 工具——>NuGet包管理器——>管理解决方案的NuGet程序包 搜索DotNetty 2.新建EchoClientHandler.cs类 用于接收服务器返回数据 public class EchoClientHandler : SimpleChannelIn…

【AD那些事 10 】焊盘如何修改为自己想要的形状!!!!! 焊盘设计规则如何更改??????

左侧为修改前焊盘原图 右侧为修改后焊盘图 ——————————————————————————————————————————— 目录 修改焊盘内侧的大小 修改焊盘外侧的大小 更改焊盘设计规则 ——————————————————————————…

Pencils Protocol 即将登录各大 CEX,依旧看好 $DAPP

近期,Scroll生态头部DeFi协议Pencils Protocol迎来了系列重磅市场进展。自9月18日开始,$DAPP通证分别在Tonkensoft、Bounce以及Coresky等平台陆续开启了IDO,并且在短期内售罄。同时在通证售卖完成后,DAPP 通证又在9月27日陆续登录…

RUST语言的初印象-从一个模拟登陆谈起-slint+reqwest+aes

本文就一个做了三四天的小程序讲第一次学用RUST的感受,内附代码。 了角语言 从一些渠道听说了R,这个字母挺魔性,那个文章说C和R的团体已经上升到了宗教崇拜的高度,然后,我觉得必 有过人之处,大约10年没碰…

通用运维基础

一 网络基础 知识点:网络交换1.1 VLAN1.2VxLAN2.网络路由3.网络常用命令目标:1. 了解网络的基本概念 2. 掌握常用的网络排错命令 1、网络交换 1.1 网络虚拟化 什么是网络虚拟化 网络虚拟化是指虚拟网络节点之间的连接并不使用物理线缆连接,而是依靠特定的虚拟化链路相连…

TCP的第三次握手没有回复,会出现哪些问题现象

从三次握手的一开始来讲,刚开始客户端和服务器都处于close状态 这里不能是2次握手的原因就在于,服务器端即女孩子,无法确认客户端即男孩子,是否已经收到了,我也愿意建立连接即我也爱你,这一条最终确认的信息…

软件对比 | 历史气象数据哪里找?

中国气象网和羲和能源气象大数据平台两个平台当然没有“绝对”哪个好的说法,各自特点都在下图进行总结,到底用哪个还是根据自己需求自己抉择。 希望可以帮助到大家~

DK5V100R15ST1直插TO220F,12V 4A两个引脚同步整流芯片

高性能两个引脚同步整流芯片 DK5V100R15ST1产品 概述DK5V100R15ST1是一款简单高效率的同步整流芯片,只有A,K两个引脚,分别对应肖特基二极管PN管脚。芯片内部集成了100V功率NMOS管,可以大幅降低二极管导通损耗,提高整机…

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

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

拥塞控制算法的 rtt 公平性

我强调过,拥塞控制的核心在公平可用性,公平性由 buffer 动力学保证,而 buffer 动力学有两种表现形式: buffer 占比决定带宽占比,以 aimd 为例;带宽越小,buffer 挤兑加速比越大,以 b…

如何选择高品质SD卡

如何选择高品质SD卡 SD卡(Secure Digital Memory Card)是一种广泛使用的存储器件,因其快速的数据传输速度、可热插拔的特性以及较大的存储容量,广泛应用于各种场景,例如在便携式设备如智能手机、平板电脑、运动相机等…

作者分享|eDNA研究梯级水坝对浮游植物和浮游动物群落变化的影响

研究梯级水坝的影响对于了解和减轻其对环境的负面影响至关重要,浮游植物和浮游动物群落都对梯级水坝引起的变化尤为敏感。凌恩客户重庆师范大学生命科学学院水生态健康与环境安全实验室沈彦君课题组,通过eDNA宏条码技术对梯级水坝河道的浮游植物和浮游动…

uniapp实现在表单中展示多个选项,并且用户可以选择其中的一个或多个选项

前言 uni-data-checkbox是uni-app的一个组件,用于在表单中展示多个选项,并且用户可以选择其中的一个或多个选项。该组件可以通过设置不同的参数来控制选项的样式、布局和行为。 提示:以下是本篇文章正文内容,下面案例可供参考 uni-data-checkbox组件具有以下特点:: 1、跨…

威雅学校:2024线上3D艺术展精彩纷呈,让我们为孩子们的想象力喝彩!

Wycombe Abbey International Imaginarium 2024 IMAGINARIUM,是一个源于拉丁语的词汇,意为“想象的地方”或“幻想的世界”。在艺术和文化的领域中,它代表着展示创意、想象力和幻想的空间。 2024年度的威雅大家庭线上3D艺术展,正以…

ChatGLM-6B 部署与使用——打造你的专属GLM

ChatGLM-6B 部署与使用指南 ChatGLM-6B 是清华大学与智谱 AI 开源的一款对话语言模型,基于 General Language Model (GLM) 架构,参数达到 62 亿,因其卓越的语言理解与生成能力,受到广泛关注。 一、在 DAMODEL 上部署 ChatGLM-6B…

Vue使用axios二次封装、解决跨域问题

1、什么是 axios 在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…