Kubernetes 自动化诊断工具:K8sgpt-Operator

云原生指北   2023-05-04 10:30:23

背景

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


(资料图片仅供参考)

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

其内置了大量的分析器:

podAnalyzerpvcAnalyzerrsAnalyzerserviceAnalyzereventAnalyzeringressAnalyzerstatefulSetAnalyzerdeploymentAnalyzercronJobAnalyzernodeAnalyzerhpaAnalyzer(可选)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[3]

介绍

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

apiVersion: core.k8sgpt.ai/v1alpha1kind: K8sGPTmetadata:  name: k8sgpt-sample  namespace: kube-systemspec:  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+k3s2curl -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 updatehelm install release k8sgpt/k8sgpt-operator -n openai --create-namespace

安装完成后,可以看到随 operator 安装的两个 CRD:k8sgpts和results。

kubectl api-resources | grep -i gptk8sgpts                                        core.k8sgpt.ai/v1alpha1                true         K8sGPTresults                                        core.k8sgpt.ai/v1alpha1                true         Result

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

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

接下来创建 K8sGPT 资源。

kubectl apply -n openai -f - << EOFapiVersion: core.k8sgpt.ai/v1alpha1kind: K8sGPTmetadata:  name: k8sgpt-samplespec:  model: gpt-3.5-turbo  backend: openai  noCache: false  version: v0.2.7  enableAI: true  secret:    name: k8sgpt-sample-secret    key: openai-api-keyEOF

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

测试

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

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

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

kubectl get result -n openaiNAME          AGEdefaulttest   5m7s

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

kubectl get result -n openai defaulttest -o yamlapiVersion: core.k8sgpt.ai/v1alpha1kind: Resultmetadata:  creationTimestamp: "2023-05-02T09:00:32Z"  generation: 1  name: defaulttest  namespace: openai  resourceVersion: "1466"  uid: 2ee27c26-61c1-4ef5-ae27-e1301a40cd56spec:  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
参考资料

[1]Kubernetes Deployment 的故障排查可视化指南(2021 中文版):https://atbug.com/troubleshooting-kubernetes-deployment-zh-v2/

[2]k8sgpt:https://github.com/k8sgpt-ai/k8sgpt

[3]k8sgpt-operator:https://github.com/k8sgpt-ai/k8sgpt-operator

[4]OpenAI 的 key:https://platform.openai.com/account/api-keys

相关新闻

猜你喜欢

Kubernetes 自动化诊断工具:K8sgpt-Operator

2023-05-04

天天新消息丨TikTok推出针对出版商的广告产品,提供50%分成

2023-05-04

开元旅业集团签约河南信阳五峰岭度假乐园项目

2023-05-04

环球速看:文脉赓续 生生不息

2023-05-04

qq飞车手游如何卡车_qq飞车如何卡车-每日播报

2023-05-04

全球观热点:【乡村振兴】陈集镇刘云村绘就美好生活画卷(一)用活保洁队伍 建设美丽乡村

2023-05-04

重庆农村商业银行(03618.HK):5月3日南向资金减持660.1万股 信息

2023-05-04

全球微动态丨你升级了吗?Win11份额创历史新高

2023-05-04

“边缘智力者”考取多个职业证书 不愿成为社会负担

2023-05-04

国家征兵的目的和意义_国家征兵 全球热门

2023-05-04

计划总投资150亿元!西山区举行2023年重点项目集中开工仪式

2023-05-04

李家超:“港车北上”计划料有约45万名私家车车主受惠

2023-05-03

沪上阿姨加盟费多少_白薇阿姨_天天热头条

2023-05-03

“五一”假期国内旅游出游超2亿人次_当前报道

2023-05-03

光大证券助力常青科技成为主板注册制首批上市公司

2023-05-03

速看:世界最高海中大桥成功合龙

2023-05-03

半导体公司英飞凌签约国产碳化硅材料供应商天科合达 天天快看

2023-05-03

英镑/日元汇率今日预期趋势:看涨(2023/5/3)|环球热消息

2023-05-03

今日热议:贝莱德增持赣锋锂业(01772)234.22万股 每股作价约52.05港元

2023-05-03

环球通讯!华测导航:已取得大地测量甲级测绘资质证书 提供差分服务 目前主要应用于测量测绘智能装备等

2023-05-03

电力行业2022年报及2023年一季报总结:火电复苏超预期 新能源高增将至

2023-05-03

5月投资前瞻:这些上市公司被超百家机构调研 全球时快讯

2023-05-03

绿豆饼的做法大全宝宝_绿豆饼的做法

2023-05-03

美国地区性银行股价2日下跌

2023-05-03

走,去露营!抓住春天的小尾巴快乐“出逃”

2023-05-03

精彩图集