每日速递:可以诊断k8s的chatgpt神器:k8sgpt-operator

发布时间:2023-05-08 18:25:41
来源:架构师社区

背景

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

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

其内置了大量的分析器:


(相关资料图)

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

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

k8sgptanalyze--explain--filter=Pod--namespace=default--output=json{\"status\":\"ProblemDetected\",\"problems\":1,\"results\":[{\"kind\":\"Pod\",\"name\":\"default/test\",\"error\":[{\"Text\":\"Back-offpullingimage\"flomesh/pipy2\"\",\"Sensitive\":[]}],\"details\":\"TheKubernetessystemisexperiencingdifficultypullingtherequestedimagenamed\"flomesh/pipy2\".

Thesolutionmaybetocheckthattheimageiscorrectlyspelledortoverifythatitexistsinthespecifiedcontainerregistry.Additionally,ensurethatthenetworkinginfrastructurethatconnectsthecontainerregistryandKubernetessystemisworkingproperly.Finally,checkifthereareanyaccessrestrictionsorcredentialsrequiredtopulltheimageandensuretheyareprovidedcorrectly.\",\"parentObject\":\"test\"}]}

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

介绍

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

apiVersion:core.k8sgpt.ai/v1alpha1kind:K8sGPTmetadata:name:k8sgpt-samplenamespace:kube-systemspec:model:gpt-3.5-turbobackend:openainoCache:falseversion:v0.2.7enableAI:truesecret:name:k8sgpt-sample-secretkey:openai-api-key

演示

实验环境使用 k3s 集群。

exportINSTALL_K3S_VERSION=v1.23.8+k3s2curl-sfLhttps://get.k3s.io|sh-s---disabletraefik--disablelocal-storage--disableservicelb--write-kubeconfig-mode644--write-kubeconfig~/.kube/config

安装 k8sgpt-operator

helmrepoaddk8sgpthttps://charts.k8sgpt.ai/helmrepoupdatehelminstallreleasek8sgpt/k8sgpt-operator-nopenai--create-namespace

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

kubectlapi-resources|grep-igptk8sgptscore.k8sgpt.ai/v1alpha1trueK8sGPTresultscore.k8sgpt.ai/v1alpha1trueResult

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

OPENAI_TOKEN=xxxxkubectlcreatesecretgenerick8sgpt-sample-secret--from-literal=openai-api-key=$OPENAI_TOKEN-nopenai

接下来创建 K8sGPT 资源。

kubectlapply-nopenai-f-<

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

测试

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

kubectlruntest--imageflomesh/pipy2-ndefault

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

kubectlgetresult-nopenaiNAMEAGEdefaulttest5m7s

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

kubectlgetresult-nopenaidefaulttest-oyamlapiVersion:core.k8sgpt.ai/v1alpha1kind:Resultmetadata:creationTimestamp:\"2023-05-02T09:00:32Z\"generation:1name:defaulttestnamespace:openairesourceVersion:\"1466\"uid:2ee27c26-61c1-4ef5-ae27-e1301a40cd56spec:details:\"TheerrormessageisindicatingthatKubernetesishavingtroublepullingtheimage\"flomesh/pipy2\"andisthereforebackingofffromtryingtodoso.

Thesolutiontothisissuewouldbetocheckthattheimageexistsandthatthespellingandsyntaxoftheimagenameiscorrect.Additionally,checkthattheimageisaccessiblefromtheKubernetesclusterandthatanyrequiredauthenticationorauthorizationisinplace.Iftheissuepersists,itmaybenecessarytotroubleshootthenetworkconnectivitybetweentheKubernetesclusterandtheimagerepository.\"error:-text:Back-offpullingimage\"flomesh/pipy2\"kind:Podname:default/testparentObject: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

标签:

AD
更多相关文章