譯者 | 張鋒
審校| 孫淑娟 梁策
KoolKits(Kubernetes工具包)是針對Kubernetes的高度匹配、基于特定語言、一組有調試容器功能的鏡像。在實踐中,如果你在不熟悉的shell中進行艱難的調試時卡住了,那么在生產的Pod上,你就會很希望用到這個工具。
在這里簡單介紹下背景,請注意這些容器鏡像旨在與新kubectl debug功能一起使用,該功能用來啟動臨時容器以進行交互式排障。KoolKit將作為容器被kubectl debug拉起,在你的Pod中運行,并且能夠訪問與原始容器相同的進程命名空間。
由于生產容器內置調試工具通常是相對簡單的,使用KoolKit可以提供強大的工具進行排障,而不是依賴由最初構建生產鏡像的人有意(或無心)留下的簡陋工具。
每個KoolKit中的工具都是經過精心挑選的,你可以在下面閱讀更多關于整個項目背后的用意。
如果您迫不及待只是想看看有用的內容,請隨時查看??GitHub??上的完整項目。
調試Kubernetes很難
了解Kubernetes中pod內部發(fā)生的事情并非易事。
首先,你的應用不再是單一的實體。它由多個pod組成,為水平擴展進行復制,有時甚至分散在多個集群中。
其次,要使用本地工具(如調試器)訪問你的應用,你需要處理令人討厭的網絡問題,如自動發(fā)現(xiàn)和端口轉發(fā),這會減緩此類工具的使用速度。
此外,分布式系統(tǒng)改變或完全停止正在運行的pod的狀態(tài)(例如,當放置斷點時)可能會導致系統(tǒng)其他部分的連鎖性故障,這將加劇現(xiàn)有問題。
KoolKits背后的用意(起因)
Lightrun[1]是在考慮Kubernetes情況下構建的。我們工作時會跨多pod、多集群甚至多云。我們很早就明白,通過使用正確的工具能為做故障診斷的開發(fā)人員提供強大動力。我想我們應該以某種方式回饋社區(qū),這也就是我們提出KoolKits想法的原因。
讓我們花點時間來解釋一下為什么KoolKits非常有用:
有一個著名的Kubernetes最佳實踐指出應該構建小型容器鏡像。出于幾個不同的原因,這是有道理的:
- 構建鏡像將消耗更少的資源(即CI小時數(shù))。
- 拉取鏡像將花費更少的時間(誰愿意為這么多的Ingress付費?)。
- 在一個連無操作日志都不再安全的世界里,更少的東西意味著暴露在安全漏洞下的區(qū)域越小。
這里還有很多工具可以幫助你在不用做太多繁重工作的情況下實現(xiàn)目標:
- Alpine Linux基礎鏡像非常小。
- DistroLess Docker 鏡像更進一步,刪除了除運行時之外的所有內容。
- Docker多級構建有助于創(chuàng)建精簡的最終生產鏡像。
當你嘗試去調試這些容器內發(fā)生的事情時,問題很容易出現(xiàn)。通過使用小型生產鏡像,你放棄了大量工具,而這些工具在解決應用程序中的問題時非常寶貴。
通過使用KoolKit,你可以在不影響質量工具的情況下讓自己享受小型生產鏡像的好處。每個KoolKit都包含為它所代表的特定運行時精心挑選的工具,此外還有一套基于Linux系統(tǒng)更通用的工具。
注:KoolKits的靈感來自kubespy和netshoot。
注意事項
在構建這些鏡像的過程中,我們做出了很多決策。下面列出了我們考慮的一些事項。
鏡像大小
KoolKits Docker 鏡像傾向于運行。KoolKit旨在下載一次,保存在集群的Docker倉庫中,然后根據(jù)需要以容器的方式立即啟動。因為它們不是為了持續(xù)拉動而設計的,而是為了裝有用的工具,這個副作用也是我們能忍受的。
使用Ubuntu基礎鏡像
很難創(chuàng)建一個精簡鏡像的部分原因是,我們決定使用完整的Ubuntu 20.04系統(tǒng)作為每個KoolKit的基礎。這主要是因為我們希望復制你將在集群內做本地調試的相同環(huán)境。
比如,這意味著不要亂用Alpine替代你習慣使用的普通Ubuntu軟件包。實際上,這意味著我們可以在每個KoolKit中包含沒有Alpine版本的工具。
使用語言版本管理器
每個KoolKit都盡可能使用語言版本管理器,而不是依賴于特定語言的發(fā)行版。這樣做是為了讓你可以輕松安裝較舊的運行時版本,如果需要的話允許你在運行時版本之間隨意切換(例如,為了獲取僅存在于特定運行時版本的特定工具版本)。
可用的KoolKits
存儲庫中的每個文件夾都包含KoolKit后面的Dockerfile和調試鏡像的簡短說明。所有KoolKit都基于ubuntu:20.04基礎鏡像,讓每個人都使用自己熟悉的shell。
可用的 KoolKit 列表:
1. ??koolkit-jvm??–采用OpenJDK 17.0.2 和相關工具(包括jabba以便于版本管理和Maven 3.8.4)
2. ??koolkit-node??–Node 16.13.1和相關工具(包括nvm以便于版本管理)
3. ??koolkit-python??–Python 3.10.2 和相關工具(包括pyenv以便于版本管理)
請注意,你實際上不必自己構建它們:所有KoolKit都在Docker Hub上公開托管并且免費提供。
KoolKits 即將推出
- 一個全新的 Go 1.17.7 KoolKit
- JVM KoolKit: jvm-profiler,jHiccup支持
- Node.js KoolKit: llnode,thetool 支持
- Python KoolKit: vardbg, memprof 支持
貢獻
如果還有遺漏的工具,請?zhí)峤粏栴}告知你的建議即可,我們非常樂意將它們添加到任何鏡像中。
附注1:Lightrun公司提供了一個可觀察性平臺,允許開發(fā)人員在運行時插入日志、指標和跟蹤等,并簡化事件解決的各個方面,從而讓開發(fā)人員深入了解正在運行的應用程序。
譯者介紹
張鋒,51 CTO社區(qū)編輯,長期從事技術顧問工作,專注于運維/云原生領域,精通網絡疑難故障分析,有很豐富的大型銀行運維工具建設實踐經驗。
原文標題:??Introducing KoolKits: OSS Debugging Toolkits for Kubernetes??,作者:Tom Granot