K8S 中實現 AIOps 的 OpenAPI 項目介紹
背景
如今,AI 是各個領域,各個行業的熱門話題。基于Kubernetes的DevOps應用開發場景也不例外。尤其是對那些追求自動化,高效開發,高效運維的用戶而言。
因此,鑒于最近比較火的 ChatGPT ,與 Kubernetes 結合的相關項目也開始出現。下面也讓我們看看最近出現了哪些由OpenAI和ChatGPT支持的開源工具,使K8s的生態更豐富。
下面介紹的這些工具,大多數是為終端 (CLI) 使用而設計的,而不是圖形化。
使用AI對K8進行故障排除
1. K8SGPT
- “一個掃描 Kubernetes 集群、診斷和分類問題的工具。它將 SRE 經驗編入其分析器,并通過 AI 幫助提取并豐富相關的信息”
- Website: http://k8sgpt.ai/
- GitHub: https://github.com/k8sgpt-ai/k8sgpt
- GH stars: ~3100
- First commit: Mar 21, 2023
- ~700 commits, 32 releases, ~40 contributors
- Language: Go
k8sgpt 由 Alex Jones 發起,以 "讓每個人都擁有 Kubernetes 能力 "為目標,是同類項目中最著名、最突出的一個。
k8sgpt 目前主要通過 CLI 實現其功能,通過 CLI 可以對集群中的錯誤進行快速的診斷。 k8sgpt analyze 旨在查找并提示 Kubernetes 集群中出現的問題。使用“分析器 (analyze)”來實現這一功能,它定義了每個K8s對象的邏輯對象以及它可能遇到的問題。例如,Kubernetes Services 的分析器將檢查特定服務是否存,以及其端點是否就緒。
發現這樣的問題本身并不是什么大事,但其中的邏輯并不簡單。當你要求 k8sgpt 解釋如何解決現有問題時,神奇的事情就發生了——只要執行 k8sgpt analyze --explain 即可。該命令將要求 AI 能針對你的具體情況提供說明,并顯示給你。這些說明將包括執行故障排除的操作,包括可以復制和粘貼來直接執行 kubectl 命令。
圖片
針對資源的名稱,k8sgpt 擁有隱藏功能(k8sgpt analyze 命令的--anonymize 選項),可以防止敏感數據被發送到 AI 系統。這對我們是很有幫助的。不過目前還沒有在所有分析器中實現。
如今,k8sgpt 為 Kubernetes 對象提供了很多內置分析器,包括Node、Pod、PVC、ReplicaSets、Services、Events、Ingresses、StatefulSets、Deployments、CronJobs、NetworkPolicies,甚至 HPA 和 PDB。通過創建自定義分析器來擴展不會太難。
另一個好處是k8sgpt不僅限于單個AI系統。默認支持 OpenAI,讓我們訪問 GPT-3.5-Turbo 和 GPT-4 語言模型。但是,我們也可以在其他AI提供商中進行選擇,目前包括:
- Azure OpenAI;
- Cohere(這個是最近,7月20日添加的);
- LocalAI — 與 OpenAI 兼容的 API 的本地模型(例如,您可以將其與 llama.cpp 和 ggml 一起使用);
- FakeAI — 用于模擬 AI 系統行為而無需實際調用它。
K8sgpt 可以用于集成的 API場景,可以利用外部工具,調用它們的功能來解決 Kubernetes 問題。目前唯一實現的集成是比較有名的開源安全掃描程序 Trivy。通過 k8sgpt integration activate trivy 來啟用它(假設Trivy Operator 已經安裝在集群中),您將擁有一個名為VulnerabilityReport新的k8sgpt過濾器。最后就可以通過 k8sgpt analyze --filter VulnerabilityReport 訪問它。
最后還有一項 k8sgpt 的功能是,我們可以將其安裝為集群內的 Kubernetes operator。為此,請使用此處提供的 Helm chart。安裝并應用 k8sgpt 配置對象(kind:K8sGPT)后,該工具將對集群進行分析,并將掃描結果存儲在 Results 對象中。這意味著您可以通過執行 kubectl get results -o json | jq .來查看獲取結果。
圖片
k8sgpt 在社區中帶來的極大的影響。k8sgpt 專注于 K8s 問題的故障診斷,它包含了很多專為此目的設計的即用功能。此外,它還具有以下特點:
- 靈活,可利用不同的人工智能系統;
- 可擴展,可以與自定義分析器和第三方工具集成。
2. Kubernetes ChatGPT bot
- “A ChatGPT bot for Kubernetes issues”
- GitHub: https://github.com/robusta-dev/kubernetes-chatgpt-bot
- GH stars: ~900
- First commit: Jan 10, 2023
- ~40 commits, 7 contributors
- Language: Python
該項目由 Robusta 創建,專注于通過將 AI 與 Slack 中顯示的警報集成來解決 Kubernetes 問題。
要利用此機器人,您必須遵循以下要求:
- 已經或準備在Prometheus(也支持VictoriaMetrics)和AlertManager之上安裝Robusta;
- 使用Slack。
如果一切就緒,您就可以通過使用 webhook 將監控告警信息發送到 Slack。該機器人會在 Slack 的警報中添加一個 "Ask ChatGPT "按鈕。這樣,點擊該按鈕就可以查詢 AI(使用 OpenAI API 密鑰),并獲得其響應,從而指導您采取響應的建議措施來解決導致該告警的問題。
圖片
就目前而言,它就是這么簡單。不過,作者建議可以通過向 AI 提供額外數據(如 Pod 日志和 kubectl get 事件輸出)來進一步改進其工作方式。
Kubectl AI驅動的插件
1. kubectl-ai
- “Kubectl plugin for OpenAI GPT”
- GitHub: https://github.com/sozercan/kubectl-ai
- GH stars: ~800
- First commit: Mar 20, 2023
- ~50 commits, 11 releases, ~10 contributors
- Language: Go
這個項目是在 k8sgpt 前一天誕生的。不同的是,它使用不同方式將人工智能 與 Kubernetes 結合。
該項目是一個kubectl插件,使用OpenAI GPT生成和應用Kubernetes清單。
下面是 README 提供的一個簡單的示例:
kubectl ai "create an nginx deployment with 3 replicas"
? Attempting to apply the following manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Use the arrow keys to navigate: ↓ ↑ → ←
? Would you like to apply this? [Reprompt/Apply/Don't Apply]:
+ Reprompt
? Apply
Don't Apply通過 "重新提示 "選項,您可以更改特定參數來完善生成的清單。您可以一次生成幾個清單,這對相互關聯的對象(如部署和服務)很有意義。如果建議匹配實際需要的時候,就可以輕松地將其應用到集群中。
隨后,你還可以修改現有的 Kubernetes 對象,使用 kubectl ai 對其進行縮放或更改其他參數。
至于AI,kubectl-ai 支持 OpenAI API、Azure OpenAI 服務和 LocalAI(7 月 31 日合并的最新新增功能)。默認語言模型為 GPT-3.5-Turbo,也支持 GPT-4。
2. kubectl-gpt
- “一個 kubectl 插件,通過使用 GPT 模型從自然語言輸入生成 kubectl 命令”
- GitHub: https://github.com/devinjeon/kubectl-gpt
- GH stars: ~40
- First commit: May 29, 2023
- ~20 commits, 3 releases, 1 contributor
- Language: Go
該插件引入了 kubectl gpt 命令,它的唯一功能就是在 Kubernetes 集群中實現你的需求(即以人類語言描述需求,然后實現功能)。以下是該插件文檔中的示例:
kubectl gpt "Print the creation time and pod name of all pods in all namespaces."
kubectl gpt "Print the memory limit and request of all pods"
kubectl gpt "Increase the replica count of the coredns deployment to 2"
kubectl gpt "Switch context to the kube-system namespace"該工具,既可以輸出建議的結果,也可以直接對 K8S 集群的對象進行操作。無論哪種情況,它都會執行命令,但首先會顯示該命令,讓你可以看到并確認是否愿意繼續執行。如果你愿意,也可以禁用這些功能(打印生成的命令/要求確認)。
Kubectl-gpt 需要一個 OpenAI API 密鑰才能運行。僅支持 GPT-3,默認啟用 GPT-3.5-Turbo。可以使用 OpenAI GPT API 支持的任何人類語言。
該項目由一名獨立愛好者開發,自 5 月底以來未進行過任何更新。
適用于kubernetes的AIOps其他工具
此類別中描述的所有項目幾乎在同一時間啟動。它們也有類似的想法,即在用戶操作 Kubernetes 集群時為其提供各種 AI 輔助功能。所有這些項目的統計數據也很相似:一個或幾個貢獻者、大約 100 個星級和數十次提交。讓我們來看看它們都提供了哪些功能以及有何不同。
1. kopilot
- “您的 AI Kubernetes 專家助手”
- GitHub: https://github.com/knight42/kopilot
- GH stars: ~140
- First commit: Mar 19, 2023
- ~40 commits, 3 releases, 3 contributors
- Language: Go
Kopilot 是后面三個項目中唯一一個用 Go 編寫的項目。它包括兩個功能:故障排除和審計。那么它們具體的功能是什么了?
- 假如,你有一個 Pod 卡在 Pending 或 CrashLoopBackOff 狀態。這時候,命令 kopilot diagnose 派上用場。它將向AI尋求幫助,然后給出建議,并解釋為什么會發生這種情況。
圖片
- 如果不確定部署配置是否完善? kopilot audit 命令使用類似的方式,將根據最佳實踐以及安全要求對其進行檢查。
該工具將使用 OpenAI API 令牌和提供的問題來進行解答。官方 README 還表示,未來還將提供使用其他人工智能服務的選項。
遺憾的是,自四月初以來,該項目還沒有任何提交,這顯然令人擔憂。
2. kopylot
- “面向 Kubernetes 開發人員的 AI 驅動助手”
- GitHub: https://github.com/avsthiago/kopylot
- GH stars: ~70
- First commit: Mar 28, 2023
- ~70 commits, 5 releases, 2 contributors
- Language: Python
該工具有類似的審計和診斷功能,并通過提供 "chat "命令實現這一點。它能為你帶來聊天機器人體驗:你可以用英語詢問一個特定的操作,這個操作會被轉換成一個 kubectl 命令。如果它打印的命令看起來沒問題,你就可以確認執行。就像我們在 kubectl-gpt 中體驗的那樣。
圖片
Kopylot還提供了 "ctl "命令,這是kubectl的一個擴展,允許你直接執行任何命令。這項功能的目的似乎是讓 Kopylot 成為你使用 Kubernetes 時的最好的助手,而不僅僅是命令 kubectl客戶端。
目前,kopylot 僅支持 OpenAI API 密鑰,無法使用任何其他人類語言。它依賴于 text-davinci-003 GPT-3.5 模型(硬編碼),該模型被視為傳統模型。不過在項目的路線圖中提到了對使用其他 LLM 模型的支持。
但由于其最新版本的發布日期是 4 月 4 日,因此實現的可能性不大。
3. kube-copilot
- “由OpenAI提供支持的Kubernetes Copilot”
- GitHub: https://github.com/feiskyer/kube-copilot
- GH stars: ~70
- First commit: Mar 25, 2023
- ~70 commits, 8 releases, 1 contributor
- Language: Python
Kubernetes Copilot 將多工具功能集提升到了新的高度。除了 Kubernetes 故障排除、審計和執行操作功能外,這個多工具還能根據你的提示生成清單(就像 kubectl-ai 所做的那樣)。
順便說一下,kube-copilot 的審計功能比你想象的要強大。雖然該工具有 "analyze"(分析)命令來揭示 K8s 資源中可能存在的問題(與 kopilot audit 相同),但它也有 "audit"(審計)命令。后者利用 Trivy 掃描儀專門查找 Pod 可能存在的安全問題。
kube-copilot 的另一個特點是它同時提供命令 CLI 和 Web UI。Web UI 非常簡單,對某些用戶來說可能仍是一個非常喜歡的功能。
圖片
最后要提到的 CLI 功能是,可以使用 Google 搜索。也許有些問題用這種方式比用 ChatGPT 更好解決。不過在我看來,這并不是 K8s 相關工具最重要的功能。
至于 AI 支持,kube-copilot 可與 OpenAI API 密鑰或 Azure OpenAI 服務配合使用。它允許你使用 GPT-3.5 和 GPT-4 模型。
盡管該工具是由一個人開發的,但它的代碼提交情況比較良好。不過,目前既沒有公開的路線圖,也沒有任何問題可以揭示該工具將如何發展。
其他
還有很多基于 OpenAI 的 Kubernetes 工具和服務,下面會簡單介紹下。
Kubeshop 的 Botkube 是一個消息傳遞機器人(即 ChatOps),用于監控和調試 Slack、Mattermost、Discord 或 Microsoft Teams 中的 Kubernetes 集群。它最近添加的 Doctor plugin(https://docs.botkube.io/usage/executor/doctor/) 以兩種不同的方式與人工智能連接:1)直接向聊天機器人詢問問題;2) 使用“獲取幫助”按鈕,該按鈕顯示在錯誤事件的正下方。機器人將回復有關您的問題或特定問題的 AI 生成的建議。啟用此 Botkube 插件需要 OpenAI API 密鑰。
圖片
metaKube 的 KubeGPT 不是一個 CLI 工具,而是一個在線聊天,可以在 Web 瀏覽器中與 AI 討論 Kubernetes。就像常規的 ChatGPT 一樣,它可以回答問題(例如,Kubernetes 架構或一些最佳實踐),并為您生成特定的 YAML 清單。
圖片
實際上,它還能幫我解決其他技術問題。例如,它同時提供有關 Nomad 的信息。它甚至還指導我安裝 Ubuntu Linux。不過,它核心點還是在 Kubernetes,因此從未來形式上看,它應該不會對其他請求提供太多幫助。這項服務目前處于測試階段。
MagicHappen 是一個 PoC operator,“僅用于娛樂和實驗”。它定義了一個新的 CRD ( kind: MagicHappens ),允許您用人類語言描述任務——例如,“創建命名空間并進行部署”。當操作員收到包含此描述的 YAML 清單時,它會將其發送到 OpenAI 以獲取相關的 YAML,并將此生成的清單應用于群集。請注意,自 4 月以來,沒有對該項目進行新的提交。
Kube or Fake 是一個有趣的在線服務,它為您提供了由 ChatGPT 生成的五個 Kubernetes 術語。通過猜謎的方式找到準確的服務。
最后,各種知名的工具最近也紛紛嵌入了由 OpenAI 支持的功能。實際上,這些工具已經有很多了,本文也只是簡單列出了幾項,并不包含所有。下面也是一些按照時間列出了一些:
- ARMO Platform:基于 Kubescape,可根據您以人類語言指定的請求生成自定義控件,然后由 GPT-3 處理。
- KubeVela Workflow:允許使用 OpenAI API 驗證 Kubernetes 資源(2023 年 4 月)
- Monokle:實現了人工智能輔助 YAML 資源創建,可以利用人工智能根據提示和驗證策略生成 YAML 清單。(2023 年 6 月)
- Portainer:在其商業版 v2.18.3 中引入了對 ChatGPT 的實驗性支持,可就如何部署應用程序提供即用型答案。(2023年7月)
- Argo CD:Akuity平臺上有一個人工智能助理。它由OpenAI API提供支持,可幫助檢測某些問題和分析日志,執行您要求的操作,并回答您的問題。(2023年7月)
總結
AIOps 給我們帶來了巨大的變革。雖然還有不少改進的地方,但開源生態系統已經為 Kubernetes 管理員和用戶提供了很多高效的使用方式:
- K8SGPT是最成功的項目,因為它吸引了眾多的貢獻者和用戶。目前專注于故障排除,它非常靈活,擴展性也很高,所以也很希望社區能快速擴大。
- 如果你想在 Slack 中通過AI 生成如何解決 K8S 中的故障問題的解決建議 ,從而簡化監控警報的處理過程,那么 Robusta 的 ChatGPT 機器人和 Kubeshop 的 Botkube 都是不錯的 ChatOps 式選擇。
- 如果需要自動化 YAML 清單生成,請嘗試 kubectl-ai 或 kube-copilot。
目前,AIOps 發展非???。我們可以看到有很多新的項目出現。同時,也會有不少的項目慢慢降低熱度而最終消失,但整體是向前快速發展,并成為云原生生態系統最為核心的組成部分之一。
原文: https://blog.palark.com/chatgpt-tools-for-kubernetes/



































