当前位置: 首页 > article >正文

SRE AI Agent 开发复盘及小白向教程 (三) Go语言内核编写和持久存储配置

先导接上两篇文章SRE AI Agent 开发复盘及小白向教程 (一) 项目环境搭建https://blog.csdn.net/qq_37438848/article/details/157993572?spm1011.2415.3001.10575sharefrommp_manage_linkSRE AI Agent 开发复盘及小白向教程 (二) GitOps及附属功能搭建https://blog.csdn.net/qq_37438848/article/details/158717484?fromshareblogdetailsharetypeblogdetailsharerId158717484sharereferPCsharesourceqq_37438848sharefromfrom_link目录本期目标编写Go语言程序并完成k8s集群的持久化存储配置实现系统的主要功能并实现其长期存储提前准备简单学习并了解k8s中的持久化存储了解持久卷申领等重要知识点。高亮提示绿色检查点你应该保证自己的状态与截图一致。橙色修正配置问题如果你确认没有该问题可以跳过红色重要的配置在后续操作中需要用到请在配置时记录。七、Go语言程序编写及大语言模型拉取开发一个基于Go语言的AI智能体使其能够感知Prometheus中的PodCrashLooping告警。思考通过调用Ollama LLM服务根据告警信息决策是否需要重启Pod。行动调用Kubernetes API执行重启操作通过删除Pod实现。1. 开发环境准备 (k8s-node1)1.1 安装Go语言:dnf install -y golang go version1.2创建项目并初始化模块mkdir -p ~/sre-agent cd ~/sre-agent go mod init sre-agent1.3 安装Go依赖# 在sre-agent目录下先创建一个空的 main.go然后运行 tidy touch main.go # (此时main.go内容为空但足以让tidy工作) ​ # 手动添加几个核心依赖以确保版本 go get k8s.io/client-gov0.30.0 go get github.com/prometheus/commonv0.53.0 ​ # 运行tidy来处理所有间接依赖 go mod tidy2. 编写相关程序2.1 编写测试应用该应用会创造持续的崩溃以测试系统功能cat ~/crash-app.yaml EOF apiVersion: apps/v1 kind: Deployment metadata: name: crash-app spec: replicas: 1 selector: matchLabels: app: crash-app template: metadata: labels: app: crash-app spec: containers: - name: main image: alpine:latest command: [/bin/sh, -c, echo I am designed to fail!; exit 1] EOF ​ kubectl apply -f ~/crash-app.yaml # 验证: watch kubectl get pods (会看到crash-app处于CrashLoopBackOff状态)2.2 创建Prometheus告警规则:cat ~/pod-crash-rule.yaml EOF apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: pod-crash-alert namespace: monitoring labels: release: prometheus-stack # 确保operator能发现此规则 spec: groups: - name: kubernetes.rules rules: - alert: PodCrashLooping expr: kube_pod_container_status_waiting_reason{reasonCrashLoopBackOff} 1 for: 1m labels: severity: critical annotations: summary: Pod is crash looping description: Pod {{ \$labels.namespace }}/{{ \$labels.pod }} is in CrashLoopBackOff state. EOF ​ kubectl apply -f ~/pod-crash-rule.yaml # 验证: 在Prometheus UI的Alerts页面等待看到PodCrashLooping告警变为FIRING状态。2.3 Go语言模型使用Go语言编写一个简单的程序从Prometheus的日志中获取pod状态转述给大语言模型并按照从大语言模型返回的简单决策关键字执行操作代码因版权原因不能公开请谅解在编写完成后重载依赖go mod tidy5.为Ollama拉取语言模型确保Ollama模型已拉取: # 找到Ollama Pod名 OLLAMA_POD$(kubectl get pods -n ai-services -l appollama -o jsonpath{.items[0].metadata.name}) # 进入Pod拉取模型 kubectl exec -it $OLLAMA_POD -n ai-services -- ollama pull qwen2.5:1.5b # 验证 kubectl exec -it $OLLAMA_POD -n ai-services -- ollama list | grep qwen2.5:1.5b5.1 打开两个终端终端一: 运行Agentcd ~/sre-agent go run main.go终端二: 监控Podswatch kubectl get pods在终端一看到Deleting pod ...的日志后切换到终端二观察到crash-app的Pod被Terminating并被一个新的Pod替换。系统成功做出决策并重启八、修改yaml文件以实现持久存储问题我们发现重启集群后ArgoCD中的Ollama服务Pod状态出现异常。通过调试分析问题根源在于Pod中的大语言模型在Pod被杀死后丢失。这是因为Pod中的文件系统是临时的当Pod因节点重启或调度而被销毁时其中下载的模型文件也随之被清除。为了解决这个数据持久化问题我们需要为集群配置持久存储。修改我们在上一篇文章5.2中上传到GitHub的文件如下:我们优化Kubernetes配置文件通过PersistentVolumeClaimPVC实现模型数据的持久化存储apiVersion: v1 kind: Namespace metadata: name: ai-services --- apiVersion: apps/v1 kind: Deployment metadata: name: ollama namespace: ai-services spec: replicas: 1 selector: matchLabels: { app: ollama } template: metadata: labels: { app: ollama } spec: containers: - name: ollama image: ollama/ollama:latest ports: - containerPort: 11434 volumeMounts: - name: ollama-storage mountPath: /root/.ollama # Ollama 默认的模型存储路径 volumes: - name: ollama-storage persistentVolumeClaim: claimName: ollama-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ollama-pvc namespace: ai-services spec: storageClassName: local-path accessModes: - ReadWriteOnce resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: ollama-service namespace: ai-services spec: type: NodePort selector: { app: ollama } ports: - port: 11434 targetPort: 114341. 解析1. 1 持久卷申领PVC配置我们创建了一个10GB的持久卷申领建议根据实际需求调整大小通常基础模型2GB足够storageClassName: local-path使用本地路径存储类适用于单节点或开发环境accessModes: ReadWriteOnce卷可以被单个节点以读写模式挂载1.2 容器存储挂载在Deployment配置中我们添加了卷挂载配置volumeMounts将名为ollama-storage的卷挂载到容器的/root/.ollama路径这是Ollama服务的默认模型存储目录所有下载的模型都将保存在此位置1.3 卷定义在Pod规格中定义了卷的来源通过persistentVolumeClaim.claimName引用之前创建的ollama-pvc确保Pod能够访问到持久化存储2. 工作原理与优势数据持久化流程Pod启动时持久卷会自动挂载到指定的容器路径Ollama服务下载模型时文件直接存储在持久卷中当Pod因任何原因重启、重新调度或删除时持久卷中的数据保持不变新Pod启动后会重新挂载相同的持久卷立即获得之前下载的所有模型解决的核心问题模型不丢失重启集群后无需重新下载大语言模型快速恢复服务恢复时间从小时级重新下载模型缩短到分钟级资源节约避免重复下载数GB的模型文件节省网络带宽和时间状态保持模型调优参数、对话历史等数据也能得到保留3. 部署验证步骤将上述YAML文件保存为ollama-deployment-pvc.yaml应用配置kubectl apply -f ollama-deployment-pvc.yaml验证PVC状态kubectl get pvc -n ai-services检查Pod运行状态kubectl get pods -n ai-services下载测试模型重启Pod验证模型是否持久化4. 进阶配置建议对于生产环境可以考虑以下优化使用网络存储如NFS、Ceph、云存储卷替代本地存储支持多节点高可用配置存储资源配额防止存储空间被意外占满定期备份持久卷中的重要模型数据考虑使用StatefulSet替代Deployment获得更稳定的存储标识5. 总结通过为Ollama服务配置持久化存储我们从根本上解决了模型数据丢失的问题。这种模式不仅适用于AI模型服务也可推广到其他需要持久化数据的应用部署中。在云原生架构中正确配置存储是保证服务可靠性和数据持久性的关键一环。

相关文章:

SRE AI Agent 开发复盘及小白向教程 (三) Go语言内核编写和持久存储配置

先导: 接上两篇文章 SRE AI Agent 开发复盘及小白向教程 (一) 项目环境搭建https://blog.csdn.net/qq_37438848/article/details/157993572?spm1011.2415.3001.10575&sharefrommp_manage_link SRE AI Agent 开发复盘及小白向教程 (二) GitOps及附属…...

PHP Filter:深度解析与实际应用

PHP Filter:深度解析与实际应用 引言 PHP Filter是PHP语言中用于数据过滤和转换的重要组件。它为开发者提供了丰富的工具来确保输入数据的安全性、有效性和准确性。本文将深入探讨PHP Filter的功能、使用方法以及在实际开发中的应用场景。 PHP Filter概述 PHP Filter是一种…...

GLM-OCR惊艳效果展示:竖排中文古籍OCR,支持从右至左阅读顺序还原

GLM-OCR惊艳效果展示:竖排中文古籍OCR,支持从右至左阅读顺序还原 注意:本文所有展示效果基于GLM-OCR模型实际生成,模型文件已预置在镜像环境中,开箱即用。 1. 古籍OCR的技术挑战与突破 传统OCR技术在处理现代横排文档…...

AI编程助手:3个维度解锁本地代码执行新范式

AI编程助手:3个维度解锁本地代码执行新范式 【免费下载链接】open-interpreter 项目地址: https://gitcode.com/GitHub_Trending/ope/open-interpreter 在数字化开发的浪潮中,自然语言编程(NLP)正逐步改变开发者与代码交互…...

如何快速下载国家中小学智慧教育平台电子课本:教师学生的完整指南

如何快速下载国家中小学智慧教育平台电子课本:教师学生的完整指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 想要轻松获取国家中小学智慧教育平台…...

C语言二刷强化(VS实用调试技巧和函数递归)

Debug:通常称为调试版本,包含调试信息,便于程序员调试程序Release:称为发布版本,往往进行了各种优化,使得程序在代码的大小和运行速度上都是最优的VS快捷键:F9:创建断点和取消断点F5:启动调试,直接跳到断点处,一般配合F9使用F10:逐过程,可以是一次函数调用,也可以是一条语句F11…...

新装IDEA必做的几件事:以关掉@Autowired警告和SQL黄底为例,聊聊如何调教你的IDE

IDEA深度调优指南:从警告处理到个性化开发环境构建 刚拿到一台新电脑,安装完IDEA后,你是否也经历过这样的场景——满屏的红色波浪线和黄色背景警告,让你本应流畅的编码体验变得支离破碎?这些看似细小的视觉干扰&#…...

FaceRecon-3D实战落地:从科研原型到工业级API服务的演进路径

FaceRecon-3D实战落地:从科研原型到工业级API服务的演进路径 1. 项目概述与核心价值 FaceRecon-3D是一个革命性的单图3D人脸重建系统,它能够将普通的2D人脸照片瞬间转换为精细的3D模型。这个技术的出现,彻底改变了传统3D建模需要专业设备和…...

Windows下用Anaconda一键搞定roLabelImg旋转框标注工具(附打包exe教程)

Windows平台Anaconda环境下的roLabelImg旋转框标注工具全流程指南 对于计算机视觉工程师而言,高效标注旋转框(OBB)是许多项目的基础需求。roLabelImg作为一款开源的旋转框标注工具,相比传统矩形标注能更精确地处理倾斜物体。本文…...

Spring MVC 核心知识点学习笔记

Spring MVC 核心知识点学习笔记 学习日期:2026.03.19 核心内容:Spring MVC概述 RequestMapping注解 Vue3前后端分离案例 请求参数绑定一、Spring MVC 基本概述 1. 核心定义 Spring MVC是Spring框架的Web层核心组件,基于MVC(Mod…...

使用Qwen3-ForcedAligner-0.6B实现高精度文本-语音对齐:原理与实战

使用Qwen3-ForcedAligner-0.6B实现高精度文本-语音对齐:原理与实战 1. 引言 你有没有遇到过这样的情况:听一段音频时,想要知道某个词或某句话具体出现在哪个时间点?或者在做视频字幕时,需要精确到每个字的出现时间&a…...

小熊猫Dev-C++:让C++编程变得像Python一样简单快捷的轻量级IDE

小熊猫Dev-C:让C编程变得像Python一样简单快捷的轻量级IDE 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否曾经因为C开发环境的复杂配置而头疼?是否在等待大型IDE启动时浪费了…...

Windows下PyCharm配置OpenCV环境:从Anaconda虚拟环境到cv2导入全流程

Windows下PyCharm配置OpenCV环境:从Anaconda虚拟环境到cv2导入全流程 在计算机视觉和图像处理领域,OpenCV无疑是最受欢迎的开源库之一。对于使用Python进行开发的Windows用户来说,PyCharm作为强大的IDE,配合Anaconda的虚拟环境管理…...

零基础玩转DeepSeek-R1:8B推理模型Ollama保姆级教程

零基础玩转DeepSeek-R1:8B推理模型Ollama保姆级教程 你是不是一直想试试那些厉害的AI模型,但每次都被复杂的安装步骤劝退?下载依赖、配置环境、处理版本冲突……光是想想就头疼。特别是看到DeepSeek-R1这种专业推理模型,总觉得离…...

Swin2SR模型结构详解:从Transformer到超分网络的创新设计

Swin2SR模型结构详解:从Transformer到超分网络的创新设计 1. 为什么需要Swin2SR:传统超分方法的瓶颈与突破 图像超分辨率任务的核心目标,是把一张模糊、低清的图片恢复成清晰、高分辨率的版本。过去几年里,我们用过双三次插值、…...

FLUX小红书极致真实V2与CNN结合的图像增强技术详解

FLUX小红书极致真实V2与CNN结合的图像增强技术详解 1. 引言 你是不是也遇到过这样的困扰:用AI生成的图片总觉得不够真实,细节模糊,色彩平淡,特别是想要那种小红书风格的精致感时,总是差那么点意思?今天我…...

中微CMS8S3680单片机在电源控制中的实战应用(附完整代码解析)

中微CMS8S3680单片机在电源控制中的实战应用(附完整代码解析) 在工业电源控制领域,8位单片机凭借其高性价比和可靠性始终占据重要地位。中微半导体推出的CMS8S3680系列以其灵活的引脚映射和丰富的存储资源,为电源管理系统提供了全…...

MCP对接OAuth 2026不踩坑的4个硬性前提,第3条90%企业尚未自查(附NIST SP 800-63B映射表)

第一章:MCP对接OAuth 2026的演进逻辑与合规定位随着全球数据主权立法加速落地,OAuth 2026作为IETF正式发布的下一代授权框架标准(RFC 9431),在细粒度权限控制、跨域设备信任链、零知识证明式令牌验证等方面实现范式升级…...

Qwen3.5-9B镜像免配置优势:unsloth优化版无需手动安装依赖一键启动

Qwen3.5-9B镜像免配置优势:unsloth优化版无需手动安装依赖一键启动 1. 开箱即用的Qwen3.5-9B体验 在当今AI模型部署领域,最令人头疼的问题莫过于复杂的依赖安装和环境配置。传统的大模型部署往往需要用户手动安装CUDA、PyTorch等数十个依赖包&#xff…...

Qwen3-TTS-12Hz-1.7B-Base实战落地:政务热线AI语音应答系统多语种支持改造

Qwen3-TTS-12Hz-1.7B-Base实战落地:政务热线AI语音应答系统多语种支持改造 1. 引言:当政务热线遇到多语种挑战 想象一下,你所在城市的12345政务服务便民热线,每天要接听成千上万个电话。市民们用普通话咨询政策、反映问题&#…...

nodejs基于vue水果蔬菜商城设计与实现

目录技术栈选择项目结构设计核心功能模块数据库设计关键接口定义前端页面实现后端逻辑开发测试与部署项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 前端框架采用Vue.js,搭配V…...

保姆级教程:绕过Win11区域限制永久启用Copilot(附权限问题解决方案)

Windows 11 Copilot功能深度解锁指南:从原理到实践 微软Copilot作为新一代AI助手,正逐步整合到Windows生态中。然而部分地区的用户发现任务栏上的Copilot图标神秘消失,这背后涉及复杂的区域策略机制。本文将深入解析Copilot的启用逻辑&#x…...

突破单机限制:Nucleus Co-op开源工具实现本地多人游戏自由

突破单机限制:Nucleus Co-op开源工具实现本地多人游戏自由 【免费下载链接】splitscreenme-nucleus Nucleus Co-op is an application that starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors…...

STM32实现ModbusRTU与CAN总线高效分包重组

目录 一、核心设计(STM32 适配版) 1. 硬件基础 2. 协议帧格式定义 二、完整代码实现(STM32F4 为例) 1. 头文件定义(modbus_can_convert.h) 2. 核心实现(modbus_can_convert.c)…...

R语言实战:用`rms`和`ggplot2`包搞定Cox回归的生存曲线可视化(附完整代码)

R语言实战:用rms和ggplot2包搞定Cox回归的生存曲线可视化(附完整代码) 在临床医学和流行病学研究中,生存分析是评估时间至事件数据的重要方法。Cox比例风险模型作为生存分析的核心工具,能够同时考虑生存时间和结局变量…...

cv_unet_image-colorization效果对比:自然风景与建筑图像着色作品集

cv_unet_image-colorization效果对比:自然风景与建筑图像着色作品集 黑白照片总带着一种时光的厚重感,但有时候,我们也会好奇,如果它们有了颜色,会是什么样子?是更接近历史的真实,还是能焕发出…...

IMX6Q双通道LVDS屏幕驱动:从设备树配置到双屏同显的实战解析

1. LVDS显示技术基础与IMX6Q硬件特性 LVDS(Low-Voltage Differential Signaling)是嵌入式设备中常见的显示接口技术,我在多个工业控制项目中都深度使用过这种方案。它的核心优势在于通过差分信号传输实现抗干扰能力,实测在电机设备…...

Enhancing Snapshot Compressive-spectral Imaging with Hybrid Deep Denoising and Total Variation Prior

1. 快照压缩光谱成像的挑战与机遇 高光谱成像技术近年来在遥感、医学诊断、工业检测等领域展现出巨大潜力,但传统成像方式需要逐波段扫描,导致数据采集效率低下。快照压缩光谱成像(Snapshot Compressive-spectral Imaging, SCI)技…...

GitHub中文插件:5分钟让GitHub界面说中文,开发者效率提升新选择

GitHub中文插件:5分钟让GitHub界面说中文,开发者效率提升新选择 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese …...

从人类司机到自动驾驶:拆解Apollo的LANE_CHANGE_DECIDER如何用‘滞后滤波器’解决变道犹豫和频繁摇摆

自动驾驶决策算法中的拟人化设计:Apollo变道决策模块的滞后滤波技术解析 当人类驾驶员在高速公路上准备变道时,会经历一系列复杂的判断过程——观察后视镜、评估前后车距、判断相对速度,最终做出平滑自然的变道动作。这种看似简单的行为背后&…...