Redian新闻
>
为Kubernetes集群部署一个ChatGPT机器人

为Kubernetes集群部署一个ChatGPT机器人

公众号新闻

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 
来源:分布式实验室 blog.devgenius.io/
k8s-chatgpt-bot-for-intelligent-
troubleshooting-36e0a4a071c5



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

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

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

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

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

运行 K8s ChatGPT 机器人项目

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

  • Prometheus 使用 Webhook 接收器将警报转发给 Robusta.dev 。
  • Robusta.dev 询问 ChatGPT 如何修复 Prometheus 警报。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

先决条件

  • Slack
  • Kubernetes 集群
  • Python 3.7 及以上

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

如何安装 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.16
  Downloading 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.14
 watchgod-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

更新权限:

恭喜你配置 Slack 集成成功。

现在回到我们的 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: [email protected]
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.dev

By 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'
API)

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

使用 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()'}

使用 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 崩溃的消息,如下所示:

与 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(2023114231433430401), generatorURL='', startsAt=datetime.datetime(2023114231433430406), 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” 的按钮!

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

示例 2:节点容量为 100%

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

Robusta UI

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

结论

我们花了一些时间终于把 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


欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Kubernetes 中 Ceph、LINSTOR、Mayastor 和 Vitastor 存储性能对比破茧成蝶 - Serverless Kubernetes 的思考与征程(二)如何使用Kubernetes实现应用程序的弹性伸缩ChatGPT讲座:ChatGPT并不神秘,但ChatGPT很神奇橡树岭的秘密报告称Kubernetes 安全大量使用开源解决方案2022年回顾:Kubernetes盛行之年苏月的婚姻路今年第一个版本 Kubernetes 1.27,发布啦!使用 Kubespray 安装 Kubernetes 集群 | Linux 中国Umistudy与全球Partner共同探索ChatGPT机遇交流会如何逐步安装 Kubernetes(k8s)指标服务器 | Linux 中国15 个 Kubernetes 最佳实践用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 | Linux 中国Kubernetes 调查报告:配置不当可能导致安全问题一款利器 ,持续分析 Kubernetes 中服务的性能硬核!Kubernetes 网络排错“狂飙”级指南,运维请收好从修复 Kubernetes 集群中,我学到了什么详解使用Dex实现Kubernetes身份验证如何使用机器学习来有效管理 Kubernetes 资源光子质量说的问题。。。。。在混合云下,我们将Kubernetes与Fluid结合后性能提升了30%清酒不用烫,浊酒不用筛(4)焼酎(日本烧酒)品名多一文读懂Kubernetes存储设计揭秘 ChatGPT 背后的技术栈:OpenAI 如何将 Kubernetes 扩展到了 7500 个节点Kubernetes Operator 最佳实践手把手教你基于 Kubernetes 实现 CI/CD 配置青春未散场 仍是好时光Medium的Kubernetes基础设施如何优雅限制 Kubernetes 集群中文件描述符与线程数量21道题帮你轻松拿捏 Kubernetes 面试周末厨房丨【印度Kulcha发面饼】Kulcha/Onion Kulcha谷歌云推出配置管理仪表板,简化 Kubernetes 集群管理Kubernetes 上 Java 应用的最佳实践豆瓣评分8.9!300页Kubernetes学习手册,全是核心知识!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。