0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_ro2CN3Fa 来源:芋道源码 2023-03-07 09:33 次阅读

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

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

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

deb42aaa-bc7d-11ed-bfe3-dac502259ad0.jpg

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

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-mvenvrobusta
$sourcerobusta/bin/activate
(robusta)$pipinstall-Urobusta-cli--no-cache
Collectingrobusta-cli
Downloadingrobusta_cli-0.10.10-py3-none-any.whl(223kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━223.8/223.8kB30.0MB/seta0:00:00
Collectingpymsteams<0.2.0,>=0.1.16
Downloadingpymsteams-0.1.16.tar.gz(7.6kB)
Preparingmetadata(setup.py)...done
...
SuccessfullyinstalledPyJWT-2.4.0appdirs-1.4.4autopep8-2.0.1black-21.5b2
cachetools-5.2.1certifi-2022.12.7cffi-1.15.1charset-normalizer-3.0.1
...
ruamel.yaml.clib-0.2.7six-1.16.0slack-sdk-3.19.5tenacity-8.1.0
toml-0.10.2tomli-2.0.1typer-0.4.2typing-extensions-4.4.0urllib3-1.26.14
watchgod-0.7webexteamssdk-1.6.1websocket-client-1.3.3

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

$robustagen-config
Robustareportsitsfindingstoexternaldestinations(wecallthem"sinks").
We'lldefinesomeofthemnow.

ConfigureSlackintegration?ThisisHIGHLYrecommended.[Y/n]:Y
Ifyourbrowserdoesnotautomaticallylaunch,openthebelowurl:
https://api.robusta.dev/integrations/slack?id=xxxx

配置 Slack 集成

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

decb2da4-bc7d-11ed-bfe3-dac502259ad0.jpg

更新权限:

dee4ca48-bc7d-11ed-bfe3-dac502259ad0.jpg

恭喜你配置 Slack 集成成功。

defc34d0-bc7d-11ed-bfe3-dac502259ad0.jpg

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

$robustagen-config
Robustareportsitsfindingstoexternaldestinations(wecallthem"sinks").
We'lldefinesomeofthemnow.

ConfigureSlackintegration?ThisisHIGHLYrecommended.[Y/n]:Y
Ifyourbrowserdoesnotautomaticallylaunch,openthebelowurl:
https://api.robusta.dev/integrations/slack?id=xxxx
You'vejustconnectedRobustatotheSlackof:devopsfans
WhichslackchannelshouldIsendnotificationsto?#k8s-chatgpt-bot
ConfigureRobustaUIsink?ThisisHIGHLYrecommended.[Y/n]:Y
EnteryourGmail/Googleaddress.Thiswillbeusedtologin:xxx@gmail.com
Chooseyouraccountname(e.gyourorganizationname):devopsfans
Successfullyregistered.

RobustacanusePrometheusasanalertsource.
Ifyouhaven'tinstalledityet,Robustacaninstalla
pre-configuredPrometheus.
Wouldyouliketodoso?[y/N]:y
PleasereadandapproveourEndUserLicenseAgreement:
https://api.robusta.dev/eula.html
DoyouacceptourEndUserLicenseAgreement?[y/N]:y
Lastquestion!WouldyouliketohelpusimproveRobustabysendingexceptionreports?[y/N]:N
Savedconfigurationto./generated_values.yaml-savethisfileforfutureuse!
FinishinstallingwithHelm(seetheRobustadocs).
ThenlogintoRobustaUIathttps://platform.robusta.dev

Bytheway,we'llsendyousomemessageslatertogetfeedback.
(Wedon'tstoreyourAPIkey,sowescheduledfuturemessagesusingSlack's
API)

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

df124888-bc7d-11ed-bfe3-dac502259ad0.jpg

使用 Helm3 安装 Robusta

安装和更新 robusta 仓库。

$helmrepoaddrobustahttps://robusta-charts.storage.googleapis.com&&helmrepoupdate
"robusta"hasbeenaddedtoyourrepositories
Hangtightwhilewegrabthelatestfromyourchartrepositories...
...Successfullygotanupdatefromthe"kedacore"chartrepository
...Successfullygotanupdatefromthe"robusta"chartrepository
...Successfullygotanupdatefromthe"grafana"chartrepository
...Successfullygotanupdatefromthe"prometheus-community"chartrepository
...Successfullygotanupdatefromthe"stable"chartrepository
UpdateComplete.⎈HappyHelming!⎈

更新 generated_values.yaml 文件

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

playbookRepos:
chatgpt_robusta_actions:
url:"https://github.com/robusta-dev/kubernetes-chatgpt-bot.git"

customPlaybooks:
#Addthe'AskChatGPT'buttontoallPrometheusalerts
-triggers:
-on_prometheus_alert:{}
actions:
-chat_gpt_enricher:{}

globalConfig:
chat_gpt_token:YOURKEYGOESHERE

将 Robusta 部署到 K8s

$helminstallrobustarobusta/robusta-f./generated_values.yaml
--setclusterName=dev-cluster

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

$kubectlgetpods-A|greprobusta
defaultalertmanager-robusta-kube-prometheus-st-alertmanager-02/2Running1(4m19sago)9m25s
defaultprometheus-robusta-kube-prometheus-st-prometheus-02/2Running09m25s
defaultrobusta-forwarder-6b7d8d9d88-2rv9d1/1Running09m29s
defaultrobusta-grafana-64944bfcdc-v97xh3/3Running09m29s
defaultrobusta-kube-prometheus-st-admission-patch-6zj4b0/1Completed09m28s
defaultrobusta-kube-prometheus-st-operator-7b985d7fb-c9f9t1/1Running09m29s
defaultrobusta-kube-state-metrics-688d794968-ll6gf1/1Running09m29s
defaultrobusta-prometheus-node-exporter-2k5f71/1Running05m24s
defaultrobusta-prometheus-node-exporter-zxsrg1/1Running09m29s
defaultrobusta-runner-5868b494d6-m62921/1Running09m29s

$robustalogs
settingupcoloredlogging
2023-01-1422:57:01.428INFOloggerinitializedusingINFOloglevel
2023-01-1422:57:01.429INFOCreatinghikarumonkeypatches
2023-01-1422:57:01.429INFOCreatingyamlmonkeypatch
2023-01-1422:57:01.429INFOCreatingkubernetesContainerImagemonkeypatch
2023-01-1422:57:01.430INFOwatchingdir/etc/robusta/playbooks/forcustomplaybookschanges
2023-01-1422:57:01.431INFOwatchingdir/etc/robusta/config/active_playbooks.yamlforcustomplaybookschanges
2023-01-1422:57:01.431INFOReloadingplaybookpackagesduetochangeoninitialization
2023-01-1422:57:01.431INFOloadingconfig/etc/robusta/config/active_playbooks.yaml
2023-01-1422:57:01.467INFONocustomplaybooksdefinedat/etc/robusta/playbooks/storage
2023-01-1422:57:01.468INFOCloninggitrepohttps://github.com/robusta-dev/kubernetes-chatgpt-bot.git.reponamekubernetes-chatgpt-bot
...
2023-01-1422:57:07.364INFOconnectingtoserverasaccount_id=8302df56-c554-4129-8b95-d143d1f2e3a2;cluster_name=dev-cluster
2023-01-1422:57:07.977INFOInitializingservicescache
2023-01-1422:57:08.203INFOInitializingnodescache
2023-01-1422:57:08.395INFOInitializingjobscache
2023-01-1422:57:08.603INFOGettingeventshistory
2023-01-1422:57:10.403INFOClusterhistoricaldatasent.
2023-01-1423:04:43.681INFOclusterstatus{'account_id':'8302df56-c554-4129-8b95-d143d1f2e3a2','cluster_id':'dev-cluster','version':'0.10.10','last_alert_at':'2023-01-142318.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:

$kubectlapply-fhttps://gist.githubusercontent.com/robusta-lab/283609047306dc1f05cf59806ade30b6/raw
deployment.apps/crashpodcreated

$kubectlgetpods-A|grepcrash
defaultcrashpod-64db77b594-cgz4s0/1CrashLoopBackOff2(21sago)36s

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

df255dec-bc7d-11ed-bfe3-dac502259ad0.jpg

与 ChatGPT 互动

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

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

$robustaplaybookstriggerprometheus_alertalert_name=KubePodCrashLoopingnamespace=defaultpod_name=example-pod
======================================================================
Triggeringaction...
======================================================================
runningcmd:curl-XPOSThttp://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}

======================================================================
Fetchinglogs...
======================================================================
2023-01-1423:14:33.463INFOErrorloadingkubernetespoddefault/example-pod.reason:NotFoundstatus:404
2023-01-1423:14:33.481INFOErrorloadingkubernetespoddefault/example-pod.reason:NotFoundstatus:404
2023-01-1423:14:33.503INFOErrorloadingkubernetespoddefault/example-pod.reason:NotFoundstatus:404
2023-01-1423:14:33.505ERRORcannotrunpod_events_enricheronalertwithnopodobject:PrometheusKubernetesAlert(sink_findings=defaultdict(<class'list'>,{'main_slack_sink':[0x7fab53074e20>],'main_ms_teams_sink':[0x7fab53074700>],'robusta_ui_sink':[0x7fab40773a30>]}),named_sinks=['main_slack_sink','main_ms_teams_sink','robusta_ui_sink'],response={'success':True},stop_processing=False,_scheduler=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-1423:14:33.524INFOErrorloadingkubernetespoddefault/example-pod.reason:NotFoundstatus:404
2023-01-1423:14:33.696ERRORCallbackBlocknotsupportedformsteams
2023-01-1423:14:33.697ERRORerrorsendingmessagetomsteams
e=InvalidURL'False':Noschemasupplied.Perhapsyoumeanthttp://False?

======================================================================
Done!
======================================================================

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

df3461f2-bc7d-11ed-bfe3-dac502259ad0.jpg

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

示例 2:节点容量为 100%

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

df484898-bc7d-11ed-bfe3-dac502259ad0.jpg

Robusta UI

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

df5b7d96-bc7d-11ed-bfe3-dac502259ad0.jpg

结论

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

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

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28191

    浏览量

    206505
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84449
  • ChatGPT
    +关注

    关注

    29

    文章

    1548

    浏览量

    7487

原文标题:为Kubernetes集群部署一个ChatGPT机器人

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    机器人ChatGPT应用:设计原则和模型能力

    本文转载自微软发布的关于chatGPT扩展到机器人领域的能力。以下内容选择部分内容,关于chatGPT控制机械臂,以完成绘制微软徽标的过程。 我们将 ChatGPT 的功能扩展到
    的头像 发表于 03-14 09:54 2806次阅读
    <b class='flag-5'>机器人</b><b class='flag-5'>ChatGPT</b>应用:设计原则和模型能力

    制作简易的机器人

    控制器的核心,小型直流电机作为驱动元件,配置不同类型的传感器,通过软件编程,制作出了价格低廉、模块化结构的小型机器人。大量的行走实验证实,该机器人能够顺利路径跟踪和自动纠偏自主行走
    发表于 02-09 15:40

    发现机器人,《机器人的中秋祝福》中的机器人有眼部投影功能哦

    `发现了机器人,《机器人的中秋祝福》中的机器人有眼部投影功能哦,双手还挺灵活的,好像是国内的,就是外观比较
    发表于 09-13 14:40

    阿里云上Kubernetes集群联邦

    摘要: kubernetes集群让您能够方便的部署管理运维容器化的应用。但是实际情况中经常遇到的些问题,就是单个集群通常无法跨单个云厂商的
    发表于 03-12 17:10

    使用Helm 在容器服务k8s集群部署wordpress

    摘要: Helm 是啥? 微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯开源子项目,做为Kubernetes应用的
    发表于 03-29 13:38

    Kubernetes Ingress 高可靠部署最佳实践

    节点数等,注意集群默认会初始化3台Master节点来部署集群管控服务。我们通过阿里云容器服务控制台创建
    发表于 04-17 14:35

    kubernetes集群配置

    基于v1104版本手动搭建高可用kubernetes 集群
    发表于 08-19 08:07

    Kubernetes 从懵圈到熟练:集群服务的三要点和种实现

    ,实际上是一个集群节点上,部署反向代理 Sidecar。而所有对
    发表于 09-24 15:35

    kubernetes v112二进制方式集群部署

    kubernetes v112 二进制方式集群部署
    发表于 05-05 16:30

    【HarmonyOS HiSpark AI Camera】基于Hi3516DV300的机器人集群系统

    项目名称:基于Hi3516DV300的机器人集群系统试用计划:申请理由本人所在实验室为重庆大学机器人协同创新实验室,直开展机器人领域相关研
    发表于 10-29 14:20

    请问鸿蒙系统上可以部署kubernetes集群吗?

    鸿蒙系统上可以部署kubernetes集群
    发表于 06-08 11:16

    制作教育机器人

    教师想要的教学内容?你的学生。任何想开始学习教育机器人的人都可以组装、编程和使用它。这是非常小的印刷电路板?它只安装两眼睛模式的LED二极管和
    发表于 08-19 07:25

    如何部署基于Mesos的Kubernetes集群

    kubernetes跨多个计算节点的管理容器化应用的系统,它提供了系列基本的功能,如应用的自动化部署,维护和扩展等。Mesos是Ap
    发表于 10-09 18:04 0次下载
    如何<b class='flag-5'>部署</b>基于Mesos的<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    Kubernetes集群的关闭与重启

    在日常对 Kubernetes 集群运行维护的过程中,您可能需要临时的关闭或者是重启 Kubernetes 集群集群进行维护,本文将介绍如
    的头像 发表于 11-07 09:50 9851次阅读

    Kubernetes集群部署

    Kubeadm是Kubernetes集群部署工具,通过kubeadm init命令创建master节点,通过 kubeadm join命令把node节点加入到
    的头像 发表于 02-15 10:35 1665次阅读