使用豆包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.xdnf.cn/news/1547505.html

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

相关文章

uniapp踩坑 tabbar页面数据刷新了但视图没有更新

问题描述: 有个uni-data-checkbox组件,两个选项:选项1和选项2(对应的value值分别为1和2),v-model绑定属性名为value 两个tabbar页面:tab1,tab2。 tab1页面有个逻辑是在onShow中刷新v…

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

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

UTCTF2020]spectogram1

方法一:使用Audacity打开 点击左侧的三个...,按照上图勾选三个多视图,波形,频谱图或者只勾选频谱图,拖拽频谱图至合适高度,使文字清晰 如果频谱图文字还不清晰,按下图设置 使用aabbyy finereader转文字&am…

opencv实战项目二十七:基于meanshif的视频脸部跟踪

文章目录 前言一、Mean Shift是什么?二、opencv中meanshift使用流程三、使用代码:四、效果: 前言 在当今这个信息化时代,图像和视频处理技术已经渗透到我们生活的方方面面,从安防监控、智能交通到人机交互等领域&…

学习记录:js算法(四十六):平衡二叉树

文章目录 平衡二叉树我的思路网上思路 总结 平衡二叉树 给定一个二叉树,判断它是否是 平衡二叉树 图一 图二 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2,2,3,3,null…

发掘3D文件格式的无限潜力:打造沉浸式虚拟世界

在当今数字化时代,3D技术的应用范围日益广泛,涵盖电影后期制作、产品原型设计、虚拟现实(VR)、增强现实(AR)、游戏等众多领域。而3D文件格式作为3D技术的核心组成部分,对于实现3D数据和模型的存…

ElasticSearch安装分词器与整合SpringBoot

ElasticSearch安装分词器与整合SpringBoot 如果还没安装的点击安装ElasticSearch查看怎么安装 分词器 1.分词器 在Elasticsearch中,分词器(Tokenizer)是分析器(Analyzer)的一部分,它的主要职责是将文本输入…

玩转指针(3)

一、字符指针变量 字符指针变量(如char* p)的两种赋值方式 ①将字符类型地址赋值给字符指针变量 int main() {char a w;char* p &a;*p m;return 0; }②将常量字符串赋值给字符指针变量 常量字符串的介绍:用" "引起来的就…

【ARM 嵌入式 编译系列 10.4 -- GNU Binary Utilies】

文章目录 GNU Binary Utilities 详细介绍常用工具介绍1. arm-none-eabi-objcopy2. arm-none-eabi-readelf3. arm-none-eabi-size4. arm-none-eabi-objdump5. arm-none-eabi-nm6. arm-none-eabi-strip7. arm-none-eabi-ld8. arm-none-eabi-as9. arm-none-eabi-addr2line10. arm-…

追随 HarmonyOS NEXT,Solon v3.0 将在10月8日发布

Solon (开放原子开源基金会,孵化项目)原计划10月1日发布 v3.0 正式版。看到 HarmonyOS NEXT 将在 10月8日启用公测,现改为10月8日发布以示庆贺。另外,Solon 将在2025年启动“仓颉”版开发(届时,…

迅雷笔试 最长相等子段数列长度 滑动窗口

👨‍🏫 牛马Code:最长相等子段数列长度 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap;public class Main {// 创建一个输入流读取器,用于读取控制台输…

调用飞书接口导入供应商bug

1、业务背景 财务这边大部分系统都是供应商项目,由于供应商的研发人员没有飞书项目的权限,涉及到供应商系统需求 财务这边都是通过多维表格进行bug的生命周期管理如图: 但多维表格没有跟飞书项目直接关联,测试组做bug统计的时候无…

第十六章 模板与泛型编程

16.1 定义模板 模板是C泛型编程的基础。为模板提供足够的信息&#xff0c;就能生成特定的类或函数。 16.1.1 函数模板 在模板定义中&#xff0c;模板参数列表不能为空。 //T的实际类型在编译时根据compare的使用情况来确定 template <typename T> int compare(const …

VmWare17直接开箱即用Win10虚拟机

你是否曾想过在电脑上安装一个Windows 10虚拟机来执行一些高风险的操作&#xff1f;比如测试某个文件是否携带病毒&#xff0c;或者想要在隔离的环境中使用电脑&#xff1f;那么&#xff0c;接下来我将为你提供一份详细的Windows 10虚拟机快速启动教程&#xff0c;让你能够轻松…

electron 设置界面右下角打开

功能需求场景 写一个可以下载各种平台的小工具&#xff0c;需要右下角打开方便做其它事情 实现基础 要在屏幕的右下角设置窗口&#xff0c;可以调整mainWindow的创建参数&#xff0c;特别是通过使用x和y坐标来定位窗口 &#xff1b; 需要获取屏幕的尺寸&#xff0c;并据此计算…

计算机的错误计算(一百零五)

摘要 本节探讨多项式的计算精度问题。 例1. 已知多项式 计算 不妨在Visual Studio 2010下编程计算&#xff0c;其中主要语句如下&#xff1a; #include <math.h>double x1234; double c91021263,c8-1260239000,c7565172,c2-21,c031977890.4; double yc9*pow(x,9)c8*…

WSL进阶体验:gnome-terminal启动指南与中文显示问题一网打尽

起因 我们都知道 wsl 启动后就死一个纯命令行终端&#xff0c;一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错&#xff0c;就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。 ​​ 出于好奇&#xff0c;我就…

YOLOv9改进,YOLOv9主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

通信工程学习:什么是TDD时分双工

TDD:时分双工 TDD(时分双工,Time Division Duplexing)是一种在移动通信系统中广泛使用的全双工通信技术。以下是TDD的详细解释: 一、定义与原理 TDD是一种通过时间划分来实现双向通信的技术。在TDD模式中,接收和传送在同一频率信道(即载波)的不同时隙…

Chirp通过Sui让IoT世界变得更简单

据估计&#xff0c;未来十年内&#xff0c;联网设备的数量将增长到近400亿台。无论是追踪共享出行车辆的移动、改善食品追溯性、监控制造设施&#xff0c;还是保障家庭安全&#xff0c;物联网 ( Internet of Things&#xff0c;IoT) 对企业和消费者来说都已经成为一项关键技术。…