作者 | Martin Tournoij
譯者 | LCTT / beamrolling
這也許是一個不太受歡迎的觀點,但大多數主流公司最好不要再使用 k8s 了。
你知道那個古老的“以程式員技能寫 Hello world ”笑話嗎?—— 從一個新手程式員的 printf("hello, world\n")
陳述句開始,最後結束於高階軟體架構工程師令人費解的 Java OOP 樣式設計。使用 k8s 就有點像這樣。
./binary
在 EC2 上的 ./binary
在 EC2 上自部署的 CI 管道執行 ./binary
在 EC2 上透過 k8s 編排的自部署 CI 管道執行 ./binary
¯\\_(ツ)_/¯
這不意味著 Kubernetes 或者任何這樣的東西本身都是壞的,就像 Java 或者 OOP 設計本身並不是壞的一樣,但是,在很多情況下,它們被嚴重地誤用,就像在一個 hello world 的程式中可怕地誤用 Java 面向物件設計樣式一樣。對大多數公司而言,系統運維從根本上來說並不十分複雜,此時在這上面應用 k8s 起效甚微。
複雜性本質上來說創造了工作,我十分懷疑使用 k8s 對大多數使用者來說是省時的這一說法。這就好像花一天時間來寫一個指令碼,用來自動完成一些你一個月進行一次,每次只花 10 分鐘完成的工作。這不是一個好的時間投資(特別是你可能會在未來由於擴充套件或除錯這個指令碼而進一步投入的更多時間)。
你的部署大概應該需要自動化 – 以免你 最終像 Knightmare[1] 那樣 —— 但 k8s 通常可以被一個簡單的 shell 指令碼所替代。
在我們公司,系統運維團隊用了很多時間來設定 k8s 。他們還不得不用了很大一部分時間來更新到新一點的版本(1.6 ➙ 1.8)。結果是如果沒有真正深入理解 k8s ,有些東西就沒人會真的明白,甚至連深入理解 k8s 這一點也很難(那些 YAML 檔案,哦呦!)
在我能自己除錯和修複部署問題之前 —— 現在這更難了,我理解基本概念,但在真正除錯實際問題的時候,它們並不是那麼有用。我不經常用 k8s 足以證明這點。
k8s 真的很難這點並不是什麼新看法,這也是為什麼現在會有這麼多 “k8s 簡單用”的解決方案。在 k8s 上再添一層來“讓它更簡單”的方法讓我覺得,呃,不明智。複雜性並沒有消失,你只是把它藏起來了。
以前我說過很多次:在確定一樣東西是否“簡單”時,我最關心的不是寫東西的時候有多簡單,而是當失敗的時候除錯起來有多容易。包裝 k8s 並不會讓除錯更加簡單,恰恰相反,它讓事情更加困難了。
Blaise Pascal 有一句名言:
幾乎所有的痛苦都來自於我們不善於在房間裡獨處。
k8s —— 略微拓展一下,Docker —— 似乎就是這樣的例子。許多人似乎迷失在當下的興奮中,覺得 “k8s 就是這麼回事!”,就像有些人迷失在 Java OOP 剛出來時的興奮中一樣,所以一切都必須從“舊”方法轉為“新”方法,即使“舊”方法依然可行。
有時候 IT 產業挺蠢的。
或者用 一條推特[2] 來總結:
◈ 2014 – 我們必須採用 #微服務 來解決獨石應用的所有問題 ◈ 2016 – 我們必須採用 #docker 來解決微服務的所有問題 ◈ 2018 – 我們必須採用 #kubernetes 來解決 docker 的所有問題
你可以透過 martin@arp242.net[3] 給我發郵件或者 建立 GitHub issue[4] 來給我反饋或提出問題等。
via: https://arp242.net/weblog/dont-need-k8s.html
作者:Martin Tournoij[6] 選題:lujun9972 譯者:beamrolling 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出