Kubernetes 和容器技術體系的最佳方法

你好,我是 Kubernetes 社區資深成員與項目維護者張磊,也是極客時間《深入剖析 Kubernetes 》的專欄作者。今天我來與你談一談,學習 Kubernetes 和容器技術體系的最佳方法,到底是什麼。

我認爲,學習一門綜合性的技術,不應該着急一頭扎進去看源碼。理清楚自己的定位,纔是最重要的。

定位一:純粹的開發人員

如果你是一位純粹的開發人員,無論是前端、後端,還是應用、遊戲的開發,你首先應該明白這樣兩個道理:

  • Kubernetes 和容器技術主要解決的,是代碼編寫完成後的事情。這不單單是發佈或者 CI/CD,而是指從你執行完 git commit && git push 之後開始,都應該進入容器化的管理流程當中,當然包括後續的發佈、運維、升級、回滾等所有階段。
  • Kubernetes 體系的核心,是爲開發者提供編寫代碼過程中的“微服務編程範式”。

比如,在你編寫代碼的時候,你應該清楚地知道:我該如何劃分模塊,就能更方便地利用到 Kubernetes 的 Pod 模型,來構建更加低耦合、高內聚的代碼製品,讓我後面的升級和重構工作更加容易。

拓展閱讀「爲什麼我們需要pod?」

再比如,當你的代碼需要與一個外部資源進行交互的時候,你應該首先想到:我的這個外部資源,是不是可以作爲一個 Kubernetes 的 CRD 放到 Etcd 裏面。這樣,我編寫的代碼,就可以遵循一個自定義 Controller 或者 Operator 的編程範式,通過聲明式 API 的方式來執行業務邏輯。這樣寫出來的代碼一定會更加簡單、健壯、容易維護。

這樣的例子其實非常多。作爲開發人員,你最應該關注的,是 Kubernetes API 對象的細節、容器設計模式以及 Kubernetes API 編程範式。

(Kubernetes裏的所有API對象)

你應該習慣於把你的服務想象成一個個容器,把整個應用想象成一個 Pod,學會把基於容器和 Kubernetes 的設計思想和架構方式,融入到自己平常的工程實踐當中。你應該大量實踐這些思想和設計模式,編寫各種各樣的 CRD 和 Controller,並想辦法提高這些自己編寫的自定義 Controller 項目的性能和服務能力。你應該嘗試扮演公司或者組織中推廣微服務和雲原生體系倡導者,並熱心地幫助團隊成員共同學習 Kubernetes 的設計思想和 API,全力幫助 Istio 或者 Knative 這樣的 Service Mesh 和 PaaS 平臺在組織中落地。

這些,都是增強你在即將到來的雲計算時代競爭力的有效手段。

當然,如果你對 Kubernetes API 以及編程範式還不熟悉,甚至對 Kubernetes API 的普適性還有所懷疑,那麼你可以閱讀一下《深入剖析 Kubernetes》的最後一篇文章「Kubernetes:贏開發者贏天下」。相信 Kubernetes API 成爲雲上編程標準的故事,一定會對你有所啓迪。

定位二:專注於服務器端的編程人員/運維工程師

而如果你是一位專注於服務器端的編程人員,或者運維工程師,那麼你更應該關注的是 Kubernetes 這個項目背後的實現原理,它所體現出來的 Borg 和 Omega 項目多年來大規模集羣管理的經驗教訓。

比如,聲明式 API 的設計與實現原理,Informer、Controller 這些機制的實現方式,爲什麼說 Etcd 最適合的場景是配置管理,集中式集羣調度器的核心機制與常用策略都有哪些。

此外,Kubernetes 項目的各個可擴展性接口,也是你需要重點關注和理解的對象,比如 CNI 和網絡插件的工作方式、CSI 和存儲插件的設計、Kubernetes Volume 管理的完整流程,以及 CRI 的設計和各種 container runtime的異同。

從這個角度來說,Kubernetes 項目就是當前雲計算平臺層開源項目的事實標準,熟悉它的思想、架構、實現細節甚至核心組件的源碼,不僅是學習這項技術的必經之路,也是傳統後端技術人員向雲端轉型的最佳途徑。

(Kubernetes通過存儲插件管理容器持久化存儲的原理)

你應該嘗試扮演公司和組織中進行雲原生和基礎架構轉型的關鍵角色,而不是充當傳統和守舊那一方。你應該嘗試用容器和 Kubernetes 化的思想來影響周邊的每一位工程師。要記住,這個進程每前進一步,你的價值就放大一分。

拓展閱讀「編寫自己的存儲插件」

定位三:學生、剛剛入行的初學者

作爲學生、剛剛入行的初學者,或者是對這個領域充滿興趣準備在這裏作爲一番的後端從業人員,我希望你對容器和 Kubernetes 技術體系的學習和實踐,更要關注這個項目和平臺背後更深層的基礎和底盤部分,這包括:

1.瞭解操作系統和硬件的實際工作方式,尤其是CPU、存儲和網絡。

2.充分理解操作系統的設計,甚至可以根據需要重新實現或者繞過某些部分,這是你後面進行系統性能優化的關鍵所在。

3.理解“所有系統都是分佈式系統”的道理。瞭解經典的分佈式系統設計的思想,並從實際的工程實踐中理解這些解決思路,這也是 Kubernetes 這個分佈式項目構建的基礎。

只有清楚了自己的定位,你才能夠在 Kubernetes 這樣一個大而全的技術體系面前做到“有所放矢,有的放矢”,才能夠把容器和 Kubernetes 這項技術發展浪潮,與自己的技術路線和個人成長曆程,真正地關聯起來。

(Kubernetes 項目核心功能的“全景圖”)

一旦明確了定位,抓到了這其中的精髓和主線,那麼接下來的學習過程對於你來說,其實就是“無招勝有招”,可以隨心所欲地按照你實際的項目、所關心的領域逐步展開,而完全不必拘泥於某種特定的套路了。

拓展閱讀:「從容器到容器雲:談談Kubernetes 的本質」

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