三年血淚史:工程師親述Kubernetes實在太難

雖然 Kubernetes很火,但這家公司卻用三年時間親證:部署Kubernetes太難了,且很可能不建議其他人嘗試。

事件經過

Atlassian是一家位於澳大利亞悉尼的企業,這家企業最初沒有銷售團隊,不靠融資就做到了市值百億美元,兩位創始者本來也是開發者出身,這家企業的技術實力起初就不弱,但卻在嘗試了Kubernetes三年後公開表示:“過去三年,部署Kubernetes的過程非常艱難,並且不推薦大家嘗試”

衆所周知,Kubernetes是谷歌開源的容器編排引擎,支持自動化部署、大規模可伸縮、應用容器化管理,很多細節不需要運維人員進行復雜的手工配置和處理,這是現在非常流行的容器管理和編排工具,幾乎好評如潮。這樣一款讓部署容器化應用更加簡單高效的工具,爲什麼會讓這家企業給出如此評價呢?

這一切要從Atlassian的Kubernetes團隊首席工程師Nick Young近日接受媒體採訪說起。

不久前,Nick Young曾在採訪中表示,雖然當初選擇Kubernetes的戰略是正確的(至少到現在也沒有發現其他可能的選擇),解決了現階段遇到的許多問題,但部署過程異常艱辛。

三年前,Kubernetes還是一種非常新的技術,Atlassian希望在PaaS平臺做一些工作,重點在於讓開發人員不必關心底層應用部署細節,只需想好要什麼即可,比如要一個Docker鏡像和PostgreSQL,PaaS團隊將所有內容通過翻譯轉換爲Kubernetes事務,編寫內容並生成PostgreSQL,確保Postgres字符串和詳細信息都連接到Kubernetes的pod,最終達到使用體驗儘可能接近筆記本電腦上運行內容的體驗。

準備階段

在決定使用Kubernetes之後,這家公司就開始進入準備階段,包括基礎知識儲備和團隊建設等。

子集管理

團隊建設工作並沒有耗費太多精力,由於整個團隊之前具備容器化經驗,因此在基礎知識學習方面相對輕鬆。在設計Kubernetes時,整個團隊首先將關注點放在基礎設施之上,考慮到未來業務增長的可能,整個團隊建議如果希望管理一個完整堆棧,那麼子集管理是非常重要的,這可以確保在某些需求出現時,只針對局部進行修改即可。

隔離

如果希望各層之間的修改和運行互不干擾,就需要保證層之間具有非常明確的邊界,也就是通常所說的隔離性,這也被列入整個團隊的準備工作之中。

過程受阻

在實際搭建中,Atlassian遇到了各種問題。目前,該公司運行了大約20個Kubernetes集羣,最大集羣約有14,000個vCPU和50TB左右RAM,運行了一大堆內部CI工具 。

問題1:etcd限制

etcd是Kubernetes提供的默認存儲系統,保存所有集羣數據,使用時需要爲etcd數據提供備份計劃。在這個過程中,Atlassian首先遇到了etcd大小限制問題,etcd存儲了每個Kubernetes集羣配置和其他數據關鍵組件。如果etcd數據庫大小達到2.1GB,那麼集羣將轉爲只讀模式。基本上,8萬命名空間100%將佔用2.1GB內存。

事實上,當命名空間達到5萬時,etcd就開始放慢速度。最終,整個團隊的解決方法是將流量轉移到另一個集羣,好在轉移過程相對比較順利。

問題2:安全

Kubernetes就像多年前的數據庫,如果沒有幾年最佳實踐經驗,恐怕難以部署到位。Nick Young表示,解決安全問題非常重要且非常難,雖然Kubernetes有很多功能可供選擇,但默認設置不是很安全。

事實上,Kubernetes系統提供三種認證方式:CA認證、Token認證和Base認證。雙向認證配置是最爲嚴格和安全的集羣安全配置方式,但這種方式在保證系統不受攻擊的情況下會帶來額外的性能損耗,因此一般都建議用非安全方式訪問API Server,這種方式效率更高。所以,企業通常需要在安全和性能之間找到一個很好的平衡點。

建議

不要完全DIY

回顧整個搭建過程,這家公司發現有很多工具可以代替曾經那些痛苦的過程。如今,主流雲供應商提供非常棒的管理和運維工具。在確保安全的前提下,企業可以考慮這些現成工具,這可以大大簡化整個搭建過程。

如果技術實力尚可,也有很多開源工具可以選擇,完全的DIY設計需要投入大量精力和資金,因此不建議完全自主搭建。

查驗失敗

除此之外,在Kubernetes的部署中,我們經常可以碰到容器鏡像沒有更新、集羣資源不足、校驗錯誤、持久化卷掛載失敗等問題,開發人員可以使用一些簡單命令進行快速定位,比如,kubectl describe deployment/;kubectl describe replicaset/;kubectl get pods;kubectl describe pod/;kubectl logs --previous等命令可以被用來定位常見的大部分失敗問題。

如果技術能力允許,也可以自己編寫一些bash腳本,自動化查驗失敗原因,顯示一些問題相關的Kubernetes信息,幫助開發者迅速定位問題原因。

總結

雖然Kubernetes部署很難,但只要開始就很難放棄,這家公司最終決定繼續使用Kubernetes,並持續優化建設。

參考鏈接:https://www.itnews.com.au/news/atlassian-admits-it-did-kubernetes-the-hard-way-517984

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章