Kubernetes 自动化诊断工具:k8sgpt-operator

2023-10-27

背景

在 Kubernetes 上,从部署 Deployment 到正常提供服务,整个流程可能会出现各种各样问题,有兴趣的可以浏览 Kubernetes Deployment 的故障排查可视化指南(2021 中文版)。从可视化指南也可能看出这些问题实际上都是有迹可循,根据错误信息基本很容易找到解决方法。随着 ChatGPT 的流行,基于 LLM 的文本生成项目不断涌现,k8sgpt 便是其中之一。

k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器,并通过 AI 帮助提取并丰富相关的信息。

其内置了大量的分析器:

  • podAnalyzer
  • pvcAnalyzer
  • rsAnalyzer
  • serviceAnalyzer
  • eventAnalyzer
  • ingressAnalyzer
  • statefulSetAnalyzer
  • deploymentAnalyzer
  • cronJobAnalyzer
  • nodeAnalyzer
  • hpaAnalyzer(可选)
  • pdbAnalyzer(可选)
  • networkPolicyAnalyzer(可选)

k8sgpt 的能力是通过 CLI 来提供的,通过 CLI 可以对集群中的错误进行快速的诊断。

k8sgpt analyze --explain --filter=Pod --namespace=default --output=json
{
  "status": "ProblemDetected",
  "problems": 1,
  "results": [
    {
      "kind": "Pod",
      "name": "default/test",
      "error": [
        {
          "Text": "Back-off pulling image \"flomesh/pipy2\"",
          "Sensitive": []
        }
      ],
      "details": "The Kubernetes system is experiencing difficulty pulling the requested image named \"flomesh/pipy2\". \n\nThe solution may be to check that the image is correctly spelled or to verify that it exists in the specified container registry. Additionally, ensure that the networking infrastructure that connects the container registry and Kubernetes system is working properly. Finally, check if there are any access restrictions or credentials required to pull the image and ensure they are provided correctly.",
      "parentObject": "test"
    }
  ]
}

但是,每次进行诊断都要执行命令,有点繁琐且限制较多。我想大家想要的肯定是能够监控到问题并自动诊断。这就有了今天要介绍的 k8sgpt-operator

介绍

简单来说 k8sgpt-operator 可以在集群中开启自动化的 k8sgpt。它提供了两个 CRD: K8sGPTResult。前者可以用来设置 k8sgpt 及其行为;而后者则是用来展示问题资源的诊断结果。

apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
  name: k8sgpt-sample
  namespace: kube-system
spec:
  model: gpt-3.5-turbo
  backend: openai
  noCache: false
  version: v0.2.7
  enableAI: true
  secret:
    name: k8sgpt-sample-secret
    key: openai-api-key

演示

实验环境使用 k3s 集群。

export INSTALL_K3S_VERSION=v1.23.8+k3s2
curl -sfL https://get.k3s.io | sh -s - --disable traefik --disable local-storage --disable servicelb --write-kubeconfig-mode 644 --write-kubeconfig ~/.kube/config

安装 k8sgpt-operator

helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update
helm install release k8sgpt/k8sgpt-operator -n openai --create-namespace

安装完成后,可以看到随 operator 安装的两个 CRD:k8sgptsresults

kubectl api-resources | grep -i gpt
k8sgpts                                        core.k8sgpt.ai/v1alpha1                true         K8sGPT
results                                        core.k8sgpt.ai/v1alpha1                true         Result

在开始之前,需要先生成一个 OpenAI 的 key,并保存到 secret 中。

OPENAI_TOKEN=xxxx
kubectl create secret generic k8sgpt-sample-secret --from-literal=openai-api-key=$OPENAI_TOKEN -n openai

接下来创建 K8sGPT 资源。

kubectl apply -n openai -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
  name: k8sgpt-sample
spec:
  model: gpt-3.5-turbo
  backend: openai
  noCache: false
  version: v0.2.7
  enableAI: true
  secret:
    name: k8sgpt-sample-secret
    key: openai-api-key
EOF

执行完上面的命令后在 openai 命名空间下会自动创建 Deployment k8sgpt-deployment

测试

使用一个不存在的镜像创建 pod。

kubectl run test --image flomesh/pipy2 -n default

然后在 openai 命名空间下会看到一个名为 defaulttest 的资源。

kubectl get result -n openai
NAME          AGE
defaulttest   5m7s

详细信息中可以看到诊断内容以及出现问题的资源。

kubectl get result -n openai defaulttest -o yaml
apiVersion: core.k8sgpt.ai/v1alpha1
kind: Result
metadata:
  creationTimestamp: "2023-05-02T09:00:32Z"
  generation: 1
  name: defaulttest
  namespace: openai
  resourceVersion: "1466"
  uid: 2ee27c26-61c1-4ef5-ae27-e1301a40cd56
spec:
  details: "The error message is indicating that Kubernetes is having trouble pulling
    the image \"flomesh/pipy2\" and is therefore backing off from trying to do so.
    \n\nThe solution to this issue would be to check that the image exists and that
    the spelling and syntax of the image name is correct. Additionally, check that
    the image is accessible from the Kubernetes cluster and that any required authentication
    or authorization is in place. If the issue persists, it may be necessary to troubleshoot
    the network connectivity between the Kubernetes cluster and the image repository."
  error:
  - text: Back-off pulling image "flomesh/pipy2"
  kind: Pod
  name: default/test
  parentObject: test

关注"云原生指北"微信公众号 (转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes 自动化诊断工具:k8sgpt-operator 的相关文章

随机推荐

  • Hands-On Hyperledger Fabric——Fabric的证书(账号)体系

    文章目录 Fabric证书是什么 Fabric证书服务器 Fabric ca fabric ca server的初始化 fabric ca server 配置文件 fabric ca client 使用 将Fabric ca server绑
  • GPT分区规划与各分区作用解析

    1 GPT分区规划 安装用EFI引导的Windows 10前 手动为硬盘分区 推荐方案如下 序号 分区名 起始柱面 磁头 扇区 容量 MBR保留扇区 GPT分区表 1MB 0 ESP分区 0 32 33 96MB 空白 预留给扩展ESP时使
  • 【H5】 svg画贝塞尔曲线方法

    H5 svg画贝塞尔曲线方法 d属性M 起始坐标 L 结束坐标 H 水平线 V 垂直线 A 圆弧 Z 闭合路劲 C S Q T贝塞尔曲线大写为绝对坐标 具体的坐标位置 小写为相对坐标 相对起始坐标点的具体长度 A命令x 径y半径角度弧长 0
  • 关于虚拟机.vmdk与.ovf 磁盘装载问题

    与 vmdk磁盘装载相关的两种方式 0 前言 1 只有 vmdk文件 2 带有 ovf vmdk文件 0 前言 提一嘴 现在用的比较多的虚拟机创建或者拷贝方式有两种 第一种是iso光盘映像装载 第二种是OVF导入 分别为 ISO的装载方式最
  • build JAX from source code

    Building from source JAX documentation
  • visual studio:不能加载.vdproj

    总结 下载后关闭所有vs项目 重新打开目标工程 需要完成次扩展的后续安装任务 参考 https www cnblogs com hofmann p 11183457 htm
  • 122FPS,51.9mAP 超轻量关键点检测算法PP-TinyPose来啦!

    在人机交互场景中 机器可以识别人的手势 肢体动作 表情 你可知背后的核心技术是什么吗 没错 就是关键点检测技术 它能帮你实现精准的人机交互任务 如手势控制 智能健身 体感游戏等 还可以识别交通违规 打架斗殴 违规操作等异常行为 话不多说 我
  • DVWA——XSS(Dom low&medium)

    此文章只用于学习 请勿用作其他违法犯罪行为 以下部分文字内容以图片形式展示 因为JS代码打不上去 目录 前言 XSS攻击流程 XSS的危害 XSS的漏洞类型 JS基本语句 XSS Dom Low XSS Dom Medium 前言 XSS被
  • Ubantu扩展SWAP区,使用gparted,以及死机非热启动解决方法

    Ubantu扩展SWAP区 使用gparted 以及死机非热启动解决方法 Swap分区 强制重启 扩充SWAP Swap分区 Swap分区是用来扩展内存的 即使用一部分硬盘空间作为交换 个人认为电脑内存大于16G即不需要分配Swap空间 我
  • Python字符串替换的3种方法

    Python字符串替换笔记主要展示了如何在Python中替换字符串 Python中有以下几种替换字符串的方法 本文主要介绍前三种 replace方法 常用 translate方法 re sub方法 字符串切片 根据Python字符串切片方法
  • springboot + redis多数据源 + jedis集群模式

    最近有个项目需要redis支持多个集群 网上搜了下 发现有个开源的项目spring boot starter dynamic redis 代码写的挺好 可惜只有单机版的 于是fork了他的代码改了下 支持jedis集群模式 新代码昨天已提交
  • 如何用人工智能预测股票(完整项目)

    本文由 沈庆阳 所有 转载请与作者取得联系 前言 十分钟实现人工智能股价预测 是一个深度学习的练习项目 其通过机器学习算法 根据过去几年与某只股票相关的K线走势 公司相关报道的情感分析作为数据集 通过训练来得到可以预测股价的机器学习模型 并
  • VS2008, MFC 文件的操作4 - CFile类, CFileDialog类 方式 文本方式打开

    接上一节笔记 VS2008 MFC 文件的操作3 Win32 API 方式 文本方式打开 1 代码 及 点击 子菜单项 WriteFile 时候的可选文件 void Cvs2008 SX jiaocheng12View OnFileWrit
  • 【vscode代码片段增加和删除】

    目录 一 概述 二 详解 三 实例 一 概述 项目开发中 存在很多重复代码 可将其抽取出来定义成自己的代码片段 提高编码效率 实现快捷开发 二 详解 详解1 选择并打开代码片段文件 详解2 删除代码片段文件 代码片段文件创建后会一直保存在本
  • Java7对资源释放操作的简化

    学会使用finally释放资源 public class TryCatchResourceDemo public static void main String args try 这里面只能放置资源对象 用完会自动关闭 自动调用资源对象的c
  • 童年回忆——超级玛丽(内含源码inscode一键运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • RuoYi-Cloud版本限制一个账户只能在一个地方登陆

    RuoYi Cloud版本限制一个账户只能在一个地方登陆 一 前言 二 参考 三 代码实现 三 一 在ruoyi auth模块下的bootstrap yml文件下新增一个配置soloLogin用于限制多终端同时登录 三 二 我是在Cache
  • GUI编程(二)

    Swing Swing是GUI 图形用户界面 开发工具包 早期的AWT 抽象窗口工具包 组件开发的图形用户界面 要依赖本地系统 当把AWT组件开发的应用程序移植到其他平台的系统上运行时 不能保证其外观风格 因此AWT是依赖于本地系统平台的
  • 简单上手Raspberry Pi Pico(macOS+MicroPython)

    昨天写了Ubuntu安装Thonny并连接Pico进行开发的文章 https blog csdn net MacwinWin article details 113097180 今天就来说说在macOS上如何安装Thonny并连接Pico
  • Kubernetes 自动化诊断工具:k8sgpt-operator

    背景 在 Kubernetes 上 从部署 Deployment 到正常提供服务 整个流程可能会出现各种各样问题 有兴趣的可以浏览 Kubernetes Deployment 的故障排查可视化指南 2021 中文版 从可视化指南也可能看出这