如何为 Kubernetes 集群快速部署一个 ChatGPT 人工智能聊天机器人

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

024d3f5af2cea94ec03f5a03b8b45d0c.jpeg

今天我想分享一个有趣的项目叫做 “K8s ChatGPT Bot[1]”。该项目的目的是为 K8s 集群部署一个 ChatGPT 机器人。我们可以询问 ChatGPT 帮助我们解决 Prometheus 的警报,可以得到简洁的答复,不再需要一人在黑暗中独自解决警报问题!

我们需要用到 Robusta[2],如果你还没有 Robusta,可以参考《K8s — Robusta, K8s Troubleshooting Platform[3]》搭建一个 Robusta 平台。

下图是 Robusta 平台如何工作的截图:

426823828a03628628b0b9c84517ef0a.jpeg

你可以在此处查看完整的演示视频:

https://www.loom.com/share/964cd8735a874287a9155c77320bdcdb

 1 

运行 K8s ChatGPT 机器人项目

该机器人项目是基于 Robusta.dev[4] 实现的,Robusta.dev 是一个用于响应 K8s 警报的开源平台。其工作流程大致如下:

  • Prometheus 使用 Webhook 接收器将警报转发给 Robusta.dev 。

  • Robusta.dev 询问 ChatGPT 如何修复 Prometheus 警报。

 2 

先决条件

  • Slack

  • Kubernetes 集群

  • Python 3.7 及以上

 3 

如何安装 Robusta

生成 Robusta 配置文件

为 Robusta 准备 Python 虚拟环境。

$ python3.10 -m venv robusta
$ source robusta/bin/activate
(robusta) $ pip install -U robusta-cli --no-cache
Collecting robusta-cli
Downloading robusta_cli-0.10.10-py3-none-any.whl (223 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 223.8/223.8 kB 30.0 MB/s eta 0:00:00
Collecting pymsteams<0.2.0,>=0.1.16Downloading pymsteams-0.1.16.tar.gz (7.6 kB)Preparing metadata (setup.py) ... done
...
Successfully installed PyJWT-2.4.0 appdirs-1.4.4 autopep8-2.0.1 black-21.5b2 
cachetools-5.2.1 certifi-2022.12.7 cffi-1.15.1 charset-normalizer-3.0.1 
... 
ruamel.yaml.clib-0.2.7 six-1.16.0 slack-sdk-3.19.5 tenacity-8.1.0 
toml-0.10.2 tomli-2.0.1 typer-0.4.2 typing-extensions-4.4.0 urllib3-1.26.14watchgod-0.7 webexteamssdk-1.6.1 websocket-client-1.3.3

使用 robusta 生成一个配置文件:

$ robusta gen-config
Robusta reports its findings to external destinations (we call them "sinks").
We'll define some of them now.Configure Slack integration? This is HIGHLY recommended. [Y/n]: Y
If your browser does not automatically launch, open the below url:
https://api.robusta.dev/integrations/slack?id=xxxx

配置 Slack 集成

使用浏览器打开网页:https://api.robusta.dev/integrations/slack?id=xxxx

666af40d8b3c21ea3f3f9498bffc6be2.jpeg

更新权限:

f99fc58066597434d055cd1771e925e8.jpeg

恭喜你配置 Slack 集成成功。

1f4dd13e18e799d66587b3d855f93b09.jpeg

现在回到我们的 Terminal 终端,我们可以看到以下内容,说明操作成功:

$ robusta gen-config
Robusta reports its findings to external destinations (we call them "sinks").
We'll define some of them now.Configure Slack integration? This is HIGHLY recommended. [Y/n]: Y
If your browser does not automatically launch, open the below url:
https://api.robusta.dev/integrations/slack?id=xxxx
You've just connected Robusta to the Slack of: devopsfans
Which slack channel should I send notifications to? # k8s-chatgpt-bot
Configure Robusta UI sink? This is HIGHLY recommended. [Y/n]: Y
Enter your Gmail/Google address. This will be used to login: xxx@gmail.com
Choose your account name (e.g your organization name): devopsfans
Successfully registered.Robusta can use Prometheus as an alert source.
If you haven't installed it yet, Robusta can install a 
pre-configured Prometheus.
Would you like to do so? [y/N]: y
Please read and approve our End User License Agreement: 
https://api.robusta.dev/eula.html
Do you accept our End User License Agreement? [y/N]: y
Last question! Would you like to help us improve Robusta by sending exception reports? [y/N]: N
Saved configuration to ./generated_values.yaml - save this file for future use!
Finish installing with Helm (see the Robusta docs). 
Then login to Robusta UI at https://platform.robusta.devBy the way, we'll send you some messages later to get feedback. 
(We don't store your API key, so we scheduled future messages using Slack's 
API)

在 slack channel 中,我们还可以看到:

20c2fe3fdf561f90b421865711ec4bde.jpeg

使用 Helm3 安装 Robusta

安装和更新 robusta 仓库。

$ helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
"robusta" has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kedacore" chart repository
...Successfully got an update from the "robusta" chart repository
...Successfully got an update from the "grafana" chart repository
...Successfully got an update from the "prometheus-community" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈

更新 generated_values.yaml 文件

使用以下内容更新 generated_values.yaml 文件:

playbookRepos:chatgpt_robusta_actions:url: "https://github.com/robusta-dev/kubernetes-chatgpt-bot.git"customPlaybooks:
# Add the 'Ask ChatGPT' button to all Prometheus alerts
- triggers:- on_prometheus_alert: {}actions:- chat_gpt_enricher: {}globalConfig:chat_gpt_token: YOUR KEY GOES HERE

将 Robusta 部署到 K8s

$ helm install robusta robusta/robusta -f ./generated_values.yaml \ 
--set clusterName=dev-cluster

验证两个 Robusta pod 正常运行且在日志中没有发现错误日志:

$ kubectl get pods -A | grep robusta
default       alertmanager-robusta-kube-prometheus-st-alertmanager-0   2/2     Running     1 (4m19s ago)   9m25s
default       prometheus-robusta-kube-prometheus-st-prometheus-0       2/2     Running     0               9m25s
default       robusta-forwarder-6b7d8d9d88-2rv9d                       1/1     Running     0               9m29s
default       robusta-grafana-64944bfcdc-v97xh                         3/3     Running     0               9m29s
default       robusta-kube-prometheus-st-admission-patch-6zj4b         0/1     Completed   0               9m28s
default       robusta-kube-prometheus-st-operator-7b985d7fb-c9f9t      1/1     Running     0               9m29s
default       robusta-kube-state-metrics-688d794968-ll6gf              1/1     Running     0               9m29s
default       robusta-prometheus-node-exporter-2k5f7                   1/1     Running     0               5m24s
default       robusta-prometheus-node-exporter-zxsrg                   1/1     Running     0               9m29s
default       robusta-runner-5868b494d6-m6292                          1/1     Running     0               9m29s$ robusta logs
setting up colored logging
2023-01-14 22:57:01.428 INFO     logger initialized using INFO log level
2023-01-14 22:57:01.429 INFO     Creating hikaru monkey patches
2023-01-14 22:57:01.429 INFO     Creating yaml monkey patch
2023-01-14 22:57:01.429 INFO     Creating kubernetes ContainerImage monkey patch
2023-01-14 22:57:01.430 INFO     watching dir /etc/robusta/playbooks/ for custom playbooks changes
2023-01-14 22:57:01.431 INFO     watching dir /etc/robusta/config/active_playbooks.yaml for custom playbooks changes
2023-01-14 22:57:01.431 INFO     Reloading playbook packages due to change on initialization
2023-01-14 22:57:01.431 INFO     loading config /etc/robusta/config/active_playbooks.yaml
2023-01-14 22:57:01.467 INFO     No custom playbooks defined at /etc/robusta/playbooks/storage
2023-01-14 22:57:01.468 INFO     Cloning git repo https://github.com/robusta-dev/kubernetes-chatgpt-bot.git. repo name kubernetes-chatgpt-bot
...
2023-01-14 22:57:07.364 INFO     connecting to server as account_id=8302df56-c554-4129-8b95-d143d1f2e3a2; cluster_name=dev-cluster
2023-01-14 22:57:07.977 INFO     Initializing services cache
2023-01-14 22:57:08.203 INFO     Initializing nodes cache
2023-01-14 22:57:08.395 INFO     Initializing jobs cache
2023-01-14 22:57:08.603 INFO     Getting events history
2023-01-14 22:57:10.403 INFO     Cluster historical data sent.
2023-01-14 23:04:43.681 INFO     cluster status {'account_id': '8302df56-c554-4129-8b95-d143d1f2e3a2', 'cluster_id': 'dev-cluster', 'version': '0.10.10', 'last_alert_at': '2023-01-14 23:04:18.959377', 'light_actions': ['related_pods', 'prometheus_enricher', 'add_silence', 'delete_pod', 'delete_silence', 'get_silences', 'logs_enricher', 'pod_events_enricher', 'deployment_events_enricher', 'job_events_enricher', 'job_pod_enricher', 'get_resource_yaml', 'node_cpu_enricher', 'node_disk_analyzer', 'node_running_pods_enricher', 'node_allocatable_resources_enricher', 'node_status_enricher', 'node_graph_enricher', 'oomkilled_container_graph_enricher', 'pod_oom_killer_enricher', 'oom_killer_enricher', 'volume_analysis', 'python_profiler', 'pod_ps', 'python_memory', 'debugger_stack_trace', 'python_process_inspector', 'prometheus_alert', 'create_pvc_snapshot'], 'updated_at': 'now()'}

 4 

使用 Robusta

现在,我们终于可以使用 Robusta 了!默认情况下,Robusta 在当 K8s Pod 崩溃时发送通知。

因此,让我们创建一个崩溃的 Pod:

$ kubectl apply -f https://gist.githubusercontent.com/robusta-lab/283609047306dc1f05cf59806ade30b6/raw
deployment.apps/crashpod created$ kubectl get pods -A | grep crash
default       crashpod-64db77b594-cgz4s                                0/1     CrashLoopBackOff   2 (21s ago)     36s

一旦 Pod 达到两次重启,在 Slack channel 我们就将收到有关 Pod 崩溃的消息,如下所示:

be23d29b4f8f87a178b9bf634faa81f9.jpeg

 5 

与 ChatGPT 互动

经过我们的实验,我们已经确认 Robusta 已与我们的 Slack 和 K8s 集群集成。接下来让我们与 ChatGPT 机器人进行交互!

立即触发 Prometheus 警报,跳过正常延迟:

$ robusta playbooks trigger prometheus_alert alert_name=KubePodCrashLooping namespace=default pod_name=example-pod
======================================================================
Triggering action...
======================================================================
running cmd: curl -X POST http://localhost:5000/api/trigger -H 'Content-Type: application/json' -d 
'{"action_name": "prometheus_alert", "action_params": 
{"alert_name": "KubePodCrashLooping", "namespace": "default", 
"pod_name": "example-pod"}}'
{"success":true}======================================================================
Fetching logs...
======================================================================
2023-01-14 23:14:33.463 INFO     Error loading kubernetes pod default/example-pod. reason: Not Found status: 404
2023-01-14 23:14:33.481 INFO     Error loading kubernetes pod default/example-pod. reason: Not Found status: 404
2023-01-14 23:14:33.503 INFO     Error loading kubernetes pod default/example-pod. reason: Not Found status: 404
2023-01-14 23:14:33.505 ERROR    cannot run pod_events_enricher on alert with no pod object: PrometheusKubernetesAlert(sink_findings=defaultdict(<class 'list'>, {'main_slack_sink': [<robusta.core.reporting.base.Finding object at 0x7fab53074e20>], 'main_ms_teams_sink': [<robusta.core.reporting.base.Finding object at 0x7fab53074700>], 'robusta_ui_sink': [<robusta.core.reporting.base.Finding object at 0x7fab40773a30>]}), named_sinks=['main_slack_sink', 'main_ms_teams_sink', 'robusta_ui_sink'], response={'success': True}, stop_processing=False, _scheduler=<robusta.integrations.scheduled.playbook_scheduler_manager_impl.PlaybooksSchedulerManagerImpl object at 0x7fab4088e0a0>, _context=ExecutionContext(account_id='8302df56-c554-4129-8b95-d143d1f2e3a2', cluster_name='dev-cluster'), obj=None, alert=PrometheusAlert(endsAt=datetime.datetime(2023, 1, 14, 23, 14, 33, 430401), generatorURL='', startsAt=datetime.datetime(2023, 1, 14, 23, 14, 33, 430406), fingerprint='', status='firing', labels={'severity': 'error', 'namespace': 'default', 'alertname': 'KubePodCrashLooping', 'pod': 'example-pod'}, annotations={}), alert_name='KubePodCrashLooping', alert_severity='error', label_namespace='default', node=None, pod=None, deployment=None, job=None, daemonset=None, statefulset=None)
2023-01-14 23:14:33.524 INFO     Error loading kubernetes pod default/example-pod. reason: Not Found status: 404
2023-01-14 23:14:33.696 ERROR    CallbackBlock not supported for msteams
2023-01-14 23:14:33.697 ERROR    error sending message to msteams
e=Invalid URL 'False': No schema supplied. Perhaps you meant http://False?======================================================================
Done!
======================================================================

现在切换到 Slack,我们将看到一个新警报,并且这次带有 “Ask ChatGPT” 的按钮!

e617ab034785645ab508b5eac6c74e37.jpeg

就是这样!恭喜,我们刚刚成功安装了我们的第一个 K8s ChatGPT 机器人!

示例 2:节点容量为 100%

下面是一个节点达到 100% 容量的例子:

7087aa1ecc21d812c08000f24bfc84ea.jpeg

 6 

Robusta UI

Robusta 有一个用于集成的 UI,也有一个预配置的 Promethus 系统,如果你还没有自己的 K8s 集群,并且想尝试一下这个 ChatGPT 机器人,你可以使用 Robusta 现有的!

313b475c1b88a42d680614f5b7be248f.jpeg

 7 

结论

我们花了一些时间终于把 K8s + ChatGPT 平台搭建起来了。这是一个由爱好者们共同组建的项目,并且此项目具有很大的潜力。我希望你喜欢这篇文章。

如果你还没有自己的 K8s 集群和 Prometheus 监控系统,你可以使用 Robusta 预配置的 Promethus 监控系统。

相关链接:

  1. https://github.com/robusta-dev/kubernetes-chatgpt-bot

  2. https://home.robusta.dev/

  3. https://medium.com/dev-genius/k8s-robusta-k8s-troubleshooting-platform-efd389b47f24

  4. https://github.com/robusta-dev/robusta

本文转载自:「分布式实验室」,原文:https://url.hi-linux.com/rZsHH,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

58de0281cc8e1e4ed92c7a2142d6627b.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

9825c11eb86c4494f1dae81aad4805e5.png

你可能还喜欢

点击下方图片即可阅读

3281aeba8a56972965f6e1585907196d.jpeg

重磅发布!微软推出首款 ChatGPT 版搜索引擎,用上了比 ChatGPT 更强大的技术

1a932dfefff3358dfe1368ad1aed1afa.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

ab3318f0f7011a79b459eac6c1b21a2d.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

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

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

相关文章

ChatGPT进一步联网,距离成为超级流量入口还有多远?

备受瞩目的ChatGPT联网功能又更进一步。 继三月首次推出插件功能&#xff08;Plugin&#xff09;后&#xff0c;本周ChatGPT再次更新&#xff0c;将向Plus用户开放约70个第三方插件&#xff0c;覆盖购物、餐饮、旅行、天气、运算、翻译、分析数据等多种功能。 一个多月前&…

新闻 | 华院计算入选中国科技产业智库AIGC产业图谱

4月&#xff0c;中国科技产业智库甲子光年发布《AIGC应用与实践研究展望报告》及AIGC产业图谱&#xff0c;面向AIGC技术创新者、产业参与者、资本机构和政府等各方展现AIGC产业的整体生态环境和行业发展。华院数智人凭借其在生成式AI技术、人机交互能力和市场应用优势入选该图谱…

强化学习分类与汇总介绍

1.强化学习&#xff08;Reinforcement Learning, RL&#xff09; 强化学习把学习看作试探评价过程&#xff0c;Agent选择一个动作用于环境&#xff0c;环境接受该动作后状态发生变化&#xff0c;同时产生一个强化信号(奖或惩)反馈给Agent&#xff0c;Agent根据强化信号和环境当…

【大讨论】“ChatGPT用户增长乏力,为什么?”

云创大数据总裁刘鹏老师发起的“大模型研发技术交流群”太给力了&#xff01;昨天群里发起了“ChatGPT用户增长乏力&#xff0c;为什么&#xff1f;”的大讨论。 今年1月&#xff0c;ChatGPT的环比增长率为131.6%&#xff0c;2月份为62.5%&#xff0c;3月份为55.8%&#xff0c;…

又整新活,AI 杀麻了!

来源|OSC开源社区(ID:oschina2013) 这几天&#xff0c;ChatGPT不得不说是真火啊&#xff0c;在科技圈也是引起了不少的讨论。问答、聊天、讲故事、写代码、分析代码、找bug&#xff0c;写文章...等等都不在话下&#xff0c;妥妥滴整活大师了。 ChatGPT由人工智能研究公司OpenAI…

QWidget代码设置样式表探讨

前言 众所周知&#xff0c;在QT中修改部件样式&#xff0c;是通过样式表的方式来设置的。而设置样式表&#xff0c;一般常用就两种方式&#xff0c;分别为QT Designer界面直接右击设置样式表&#xff0c;以及代码设置样式表。 正常情况下都是可以成功的&#xff0c;但是在某种…

qt多版本更换以及更新更高版本的qt

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

QT for Android 修改图标与名称

第一步&#xff1a;进入项目模式 第二步&#xff1a;点击完成后会在项目中生成一个名为"android"的文件夹 第三步&#xff1a;将准备好的png格式的图标放在"android"的文件夹下 第四步&#xff1a;添加图标到项目中 第五步&#xff1a;修改图标&#xff08…

Qt动画分享

前言 在使用Qt制作界面的过程中&#xff0c;经常会用到Qt的动画&#xff0c;Qt自带的动画框架用来做简单的控件动画效果是比较简单易用的&#xff0c;比如对控件的位移、缩放、透明度等&#xff0c;可以提高界面的科技感。 动画框架 动画框架旨在为创建动画和平滑的gui提供一…

Qt Creator中切换不同Qt版本

我们安装QT版本&#xff0c;安装之后&#xff0c;Qt Creator中默认就是最新的QT版本。 例如&#xff0c;我之前安装了QT5.9, 第二次安装QT5.15, 则最新的都是QT5.15版本了。此时我要维护老的项目&#xff0c;而老的项目又是在QT5.9下开发的&#xff0c;许多库都在新的QT版本下编…

Qt 如何改变图标颜色

1. 下载图标 要实现图标修改颜色的功能需要去阿里巴巴矢量图标库选择自己需要的图标&#xff08;网站&#xff1a;阿里巴巴矢量图标库&#xff09;&#xff0c;将需要的图标添加入库&#xff0c;如下 加入后&#xff0c;去右上角点击购物车图标&#xff0c;把代码下载下来解压…

【Qt炫酷动画】专栏导航目录

历时小半年&#xff0c;经过总结积累&#xff0c;详细剖析了Qt框架如何制作动画。 通过本专栏学习&#xff0c;可以学会如何diy窗体动画、控件动画 Qt动画 【Qt炫酷动画】专栏导航目录 【Qt炫酷动画】0.动画类简介 【Qt炫酷动画】1.easing官方demo详细剖析 【Qt炫酷动画】2.…

QT中怎么使用QPalette设置按钮控件背景色

这里写自定义目录标题 ui->pushButton->setAutoFillBackground(true);//获得当前选择的颜色值QStringList colorList QColor:: colorNames();QColor color QColor(colorList[ui->comboBox_3->currentIndex()]);QPalette p ui->frame_2->palette();p.setCol…

Qt基于Qml修改SVG颜色

效果: 1.引入包: import QtGraphicalEffects 1.12 2. 修改SVG颜色 Image{id: imagewidth: 48height: 48anchors.horizontalCenter: parent.horizontalCentersource: "svg图片路径"ColorOverlay{anchors.fill: imagesource: imagecolor: "red" //修改后的…

TV直播app TV版 超级直播 空壳 可玩性强 带EPG 带回看 带自定义 定制可带自定义协议等

TV直播app 超级直播 空壳 可玩性强 带EPG 带回看 带自定义 定制可带自定义协议等 一、是个空壳&#xff0c;也可以定制二、定制的话&#xff0c;带EPG,带7天回看&#xff0c;甚至可带自定义协议等。三、免责声明 一、是个空壳&#xff0c;也可以定制 可自行导入自己的播放地址…

Qt QDialog更换图标icon

Qt QDialog更换图标icon 1. 如何获取一个.ico文件2. 在项目中更换图标3. 无法定位程序输入点的解决方法 1. 如何获取一个.ico文件 首先向大家推荐一个非常好用的网站&#xff1a;https://www.iconfont.cn/ 这个网站可以免费下载各种图标下载好图标之后&#xff0c;使用图标格式…

QT-纯代码控件-QTabWidget(导航栏切换)

实现一个页面切换功能 1.新建一个无ui界面的工程&#xff0c;其基类为dialog 2.代码实现 dialog.h 添加QTabWidget头文件 #include <QTabWidget>Dialog类中进行私有控件声明 private:QTabWidget * tabWidget;dialog.cpp #include "dialog.h" #include &l…

QT 幸运大转盘动画

想要更多项目私wo!!! 一、项目简介 幸运大转盘的制作其实很简单&#xff0c;幸运大转盘的整体思想是这样&#xff1a; 1.定时器用来刷新大转盘的界面这样就有动态的旋转效果&#xff0c; 2.监听键盘事件&#xff0c;通过键盘控制大转盘的开关&#xff0c;然后…

Qt QTableWidget设置表头、菜单 背景色,以及不成功的原因

Qt QTableWidget设置表头背景色不成功的原因 QTableWidget没有设置背景色的函数&#xff0c;通过Qss样式来设置背景色 m_pTable->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color: QColor(232, 242, 255, 255);}"); 通过QClolor设…

青龙面板-酷狗

酷狗捉包&#xff0c;有人出1元让我抓包&#xff0c;我会收钱吗&#xff01; 授人以鱼不如授人以渔&#xff01;我的运行截图&#xff01; 马上安排教程&#xff08;下期再整个视频教程&#xff09; 拉库地址 ql raw https://gitee.com/jaun920/scripts/raw/master/YM/kgyy.…