使用 Kubernetes 時難免會遇到叢集中的問題,需要進行偵錯和修復,以確保 Pod 和服務能夠正常運作。無論你是初學者還是處理複雜環境的專家,調試叢集內的進程並不總是易事,可能會變得耗時且繁瑣。 在 Kubernetes 中,診斷問題的關鍵是了解各個元件之間的關係,以及它們如何相互作用。日誌記錄和監控工具是解決問題的關鍵,可以幫助你快速定位並解決故障。另外,深入了解 Kubernetes 資源配置和調度機制也是解決問題的重要一環。 當面對問題時,首先要確保你的叢集和應用程式的配置是正確的。隨後,透過查看日誌、監控指標和事件,來定位問題的根源。有時候問題可能涉及網路配置、儲存問題或是應用程式本身的bug,需要仔
在雲端原生環境中,有多種偵錯解決方案可供選擇,可以幫助您輕鬆存取叢集內的訊息。但需要注意的是,大部分解決方案並未提供完整的上下文資訊。
在這篇文章中,我將向你介紹K8sGPT,這個計畫旨在為所有人提供 Kubernetes 的超能力。
K8sGPT 的應用程式場景
K8sGPT是一項完全開源的項目,由一群經驗豐富的雲端原生生態系統工程師於2023年4月發起。本計畫的核心理念是利用人工智慧模型,為Kubernetes錯誤訊息和叢集洞見提供詳盡且情境化的解釋。
圖片
此專案已被兩個組織採用並申請成為 CNCF 沙箱專案。此專案的遠景是為 Kubernetes 打造以任務為導向的機器學習模型。
該專案已經支援多種安裝選項和不同的人工智慧後端。在這篇文章中,我將向您介紹如何安裝和開始使用 K8sGPT、CLI 工具和 Operator,以及 K8sGPT 如何支援其他整合。
根據你的偏好和作業系統,有多種安裝選項可用。你可以在K8sGPT文件的安裝部分找到不同的選項。
如下所述安裝 K8sGPT 的先決條件是在 Mac 上安裝Homebrew或在 Windows 電腦上安裝 WSL。
接下來,你可以執行以下指令:
brew tap k8sgpt-ai/k8sgptbrew install k8sgpt
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.6/k8sgpt_386.rpmsudo rpm -ivh k8sgpt_386.rpm
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.6/k8sgpt_amd64.rpmsudo rpm -ivh -i k8sgpt_amd64.rpm
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.6/k8sgpt_386.debsudo dpkg -i k8sgpt_386.deb
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.3.6/k8sgpt_amd64.debsudo dpkg -i k8sgpt_amd64.deb
要驗證K8sGPT 是否安裝正確,你可以檢查安裝的版本:
k8sgpt versionk8sgpt: 0.3.6 (9c0efe6), built at: unknown
要查看K8sGPT 提供的所有指令,請使用 --help 標誌:
k8sgpt --help
接下來,我們必須授權AI後端。在本文中,我們將使用 OpenAI。
遵循下一節的先決條件是擁有一個OpneAI 帳戶和一個正在運行的 Kubernetes 集群,例如 microk8s 或 minikube 就足夠了。
擁有OpneAI 帳戶後,你需要造訪這個位址https://platform.openai.com/account/api-keys產生新的API 金鑰
或者,你可以執行下列指令,K8sGPT 將在預設瀏覽器中開啟相同位址:
k8sgpt generate
#K8sGPT 與OpenAI 互動需要此金鑰。使用新建立的API 金鑰/令牌授權K8sGPT:
k8sgpt auth add openaiEnter openai Key: openai added to the AI backend provider list
你可以使用以下指令列出你的後端:
k8sgpt auth listDefault:> openaiActive:> openaiUnused:> localai> azureopenai> noopai
接下來,我們將在Kubernetes 叢集中部署一個異常的Deployment,Pod 將成為CrashLoopBackOff狀態。以下是YAML:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentlabels:app: nginxspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80securityContext:readOnlyRootFilesystem: true
接下來,我們將為範例應用程式建立demo命名空間並安裝部署:
kubectl create ns demonamespace/demo createdkubectl apply -f ./deployment.yaml -n demodeployment.apps/nginx-deployment created
現在你將看到我們的演示命名空間中的Pod 拋出錯誤:
圖片
如果我們查看其中一個pod 的事件,但是我們不知道具體問題原因:
WarningBackOff 3s (x8 over 87s)kubelet Back-off restarting failed container
因此,我們可以執行K8sGPT 命令來存取有關這些pod 出錯原因的更多詳細資訊:
k8sgpt analyse
#這將向我們展示k8sGPT 在集群中發現的問題:
AI Provider: openai0 demo/nginx-deployment-5f4c7db77b-hq74n(Deployment/nginx-deployment)- Error: back-off 1m20s restarting failed cnotallow=nginx pod=nginx-deployment-5f4c7db77b-hq74n_demo(7854b793-21b7-4f81-86e5-dbb4113f64f4)1 demo/nginx-deployment-5f4c7db77b-phbq8(Deployment/nginx-deployment)- Error: back-off 1m20s restarting failed cnotallow=nginx pod=nginx-deployment-5f4c7db77b-phbq8_demo(74038531-e362-45a6-a436-cf1a6ea46d8a)2 demo/nginx-deployment-5f4c7db77b-shkw6(Deployment/nginx-deployment)- Error: back-off 1m20s restarting failed cnotallow=nginx pod=nginx-deployment-5f4c7db77b-shkw6_demo(2603f332-3e1c-45da-8080-e34dd6d956ad)
#要接收更多資訊以及有關如何解決問題的建議,我們可以使用以下--explain標誌:
k8sgpt analyse --explain
根据你的集群大小和 K8sGPT 在集群中识别的问题数量,你还可以按特定命名空间和工作负载类型进行过滤。
此外,如果你或你的组织担心 OpenAI 或其他后端接收有关你的工作负载的敏感信息,你可以使用--anonymize规避应用的敏感信息。
云原生生态系统中大多数工具的价值源于它们与其他工具的集成程度。
在撰写本文时,K8sGPT 提供了与 Gafana 和 Prometheus 等可观察性工具的轻松集成。此外,还可以为 K8sGPT 编写插件。维护者提供的第一个插件是Trivy,一个一体化的云原生安全扫描器。
你可以使用以下命令列出所有可用的集成:
k8sgpt integration listActive:Unused:> trivy
接下来,我们要激活 Trivy 集成:
k8sgpt integration activate trivy
这将在集群内安装 Trivy Operator(如果尚未安装):
图片
激活集成后,我们可以通过 k8sgpt 过滤器,使用 Trivy 创建的漏洞报告作为 K8sGPT 分析的一部分:
❯ k8sgpt filters listActive:> Pod> VulnerabilityReport (integration)Unused:> Deployment> ReplicaSet> Node> Service> Ingress> StatefulSet> CronJob> PersistentVolumeClaim> HorizontalPodAutoScaler> PodDisruptionBudget> NetworkPolicy
过滤器对应于 k8sgpt 代码中的特定分析器。分析器仅查看相关信息,例如最关键的漏洞。
要使用 VulnerabilityReport 过滤器,请使用以下命令:
k8sgpt analyse --filter=VulnerabilityReport
(FIXME)与之前类似,我们也可以要求 K8sGPT 对扫描提供进一步的解释:
k8sgpt analyse --filter=VulnerabilityReport --explain
虽然 CLI 工具为集群管理员提供了对其基础设施和工作负载执行即席扫描的功能,但 K8sGPT Operator 在集群中全天候 (24/7) 运行。它是 Kubernetes 原生的,这意味着它作为 Kubernetes 自定义资源运行,并生成作为 YAML 清单存储在集群中的报告。
要安装 Operator,请按照以下命令进行操作:
helm repo add k8sgpt https://charts.k8sgpt.ai/helm repo updatehelm install release k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace
如果你想将 K8sGPT 与 Prometheus 和 Grafana 集成,你可以通过向上面的安装提供values.yaml 清单来使用略有不同的安装:
serviceMonitor:enabled: trueGrafanaDashboard:enabled: true
然后安装 Operator 或更新现有安装:
helm install release k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace --values values.yaml
在本例中,我们告诉 K8sGPT 还安装一个 ServiceMonitor,它将扫描报告中的指标发送到 Prometheus,并为 K8sGPT 创建一个仪表板。如果你使用了此安装,则还需要安装 kube-prometheus-stack Helm Chart 才能访问 Grafana 和 Prometheus。这可以通过以下命令来完成:
helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo updatehelm install prom prometheus-community/kube-prometheus-stack -n k8sgpt-operator-system --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
此时,你应该在集群内运行 K8sGPT Operator 和 Prometheus Stack Helm Chart(也是 Kubernetes Operator)。
与我们需要向 CLI 提供 OpenAI API 密钥的方式类似,我们需要使用 API 密钥创建 Kubernetes 密钥。为此,请使用与之前相同的密钥,或者在你的 OpenAI 帐户上生成一个新密钥。
要生成 Kubernetes 密钥,请将你的 OpenAI 密钥粘贴到以下命令中:
export OPENAI_TOKEN=<your api key here>kubectl create secret generic k8sgpt-sample-secret --from-literal=openai-api-key=$OPENAI_TOKEN -n k8sgpt-operator-system</your>
然后,我们需要配置 K8sGPT Operator 以了解要使用哪个版本的 K8sGPT 以及哪个 AI 后端:
apiVersion: core.k8sgpt.ai/v1alpha1kind: K8sGPTmetadata:name: k8sgpt-samplespec:model: gpt-3.5-turbobackend: openainoCache: falseversion: v0.3.2enableAI: truesecret:name: k8sgpt-sample-secretkey: openai-api-key
现在,我们需要将此文件应用到我们的 K8sGPT 集群命名空间:
kubectl apply -f k8sgpt-resource.yaml -n k8sgpt-operator-system
几秒钟内,Operator 将创建新结果:
kubectl get results -n k8sgpt-operator-system
以下是不同命令的屏幕截图,你可以按照这些命令从 K8sGPT Operator 查看结果报告:
从 K8sGPT Operator 查看结果报告
最后,我们将看一下 Grafana 仪表板。端口转发 Grafana 服务以通过 localhost 访问它:
kubectl port-forward service/prom-grafana -n prom 3000:80
打开 localhost:3000,然后导航到 Dashboards>K8sGPT Overview,然后你将看到包含结果的仪表板:
Grafana 中的 K8sGPT 仪表板
以上是問題排查太煩心,試試GPT的超能力的詳細內容。更多資訊請關注PHP中文網其他相關文章!