浅淡Kubernetes 与容器技术体系的最佳方法
我們已經進入到容器化時代,Kubernetes成為了市場上容器編排的事實標準,而且k8S 同樣具備了微服務所需要的服務注冊與發現、負載均衡、配置中心。Spring cloud 的核心是Netflix微服務框架,非常成熟,但是在netflix oss開發初期,那個時候還沒有docker,我們現在所有的服務都是通過虛擬容器承載的。
Netflix oss的許多內容都是在一個已經過去的年代寫出來的,那時所有東西都只能運行在AWS云上而沒有其它選擇。關于那個年代的許多寶貴遺產和前提假設都已經被封裝到了Netflix的庫里面,對于現在你運行的環境(比如Linux容器)已經不適用了。在Linux容器、Docker、容器管理系統等等出現之后,我們越來越看到把我們的微服務運行在容器(公有云、私有云,或者都要等等)里的巨大價值。另外,因為這些容器都是直接把這些服務打包起來,所以我們傾向于不要過多關心在容器里面運行的到底是什么技術(是Java?還是Node.js?或者Go?或者.NET Core?)
Kubernetes是多語言的,以通用的方式為所有語言解決分布式計算問題。Kubernetes提供了配置管理、服務發現、負載均衡、跟蹤、統計、單實例、平臺級和應用棧之外的調度工作。該應用不需要任何客戶端邏輯的庫或代理程序,可以用任何語言編寫。這意味著一個平臺可以被多個團隊(包括使用Spring的Java開發人員)使用,并提供多種用途:應用程序開發、測試環境、構建環境(源碼運行、構建服務、依賴倉庫)等。Kubernetes解決了更廣的微服務架構問題。除了提供運行時服務,Kubernetes也可以讓你制定環境、設置資源限制、RBAC、管理應用程序生命周期、允許自動擴容和自我修復(幾乎表現得像一個抗脆弱平臺)。
在K8s集群中,沒有必要擁有Eureka。K8s中的ETCD擁有所有必要的信息。
您的應用程序將通過指定的K8s服務名稱聯系K8s API服務器以獲取端點信息。
Kubernetes 可以解決你所遇到的問題,可能可以取代netflix的整套技術
容器化時代我們應當選擇Kubernetes
基于Kubernetes 構建.NET Core 的技術體系
為什么是容器,Docker和Kubernetes?
今天我們來談一談,學習 Kubernetes 和容器技術體系的最佳方法,到底是什么。學習一門綜合性的技術,不應該著急一頭扎進去看源碼。理清楚自己的定位,才是最重要的。
定位一:純粹的開發人員
如果你是一位純粹的開發人員,無論是前端、后端,還是應用、游戲的開發,你首先應該明白這樣兩個道理:
Kubernetes 和容器技術主要解決的,是代碼編寫完成后的事情。這不單單是發布或者 CI/CD,而是指從你執行完 git commit && git push 之后開始,都應該進入容器化的管理流程當中,當然包括后續的發布、運維、升級、回n滾等所有階段。
Kubernetes 體系的核心,是為開發者提供編寫代碼過程中的“微服務編程范式”。
比如,在你編寫代碼的時候,你應該清楚地知道:我該如何劃分模塊,就能更方便地利用到 Kubernetes 的 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 ?API 成為云上編程標準的故事,一定會對你有所啟迪。現在訂閱《深入剖析 Kubernetes 》,還可以享受拼團優惠價¥79,原價¥99,僅限今天24小時。
掃碼二維碼,馬上免費試看
定位二:專注于服務器端的編程人員/運維工程師
而如果你是一位專注于服務器端的編程人員,或者運維工程師,那么你更應該關注的是 Kubernetes 這個項目背后的實現原理,它所體現出來的 Borg 和 Omega 項目多年來大規模集群管理的經驗教訓。
比如,聲明式 API 的設計與實現原理,Informer、Controller 這些機制的實現方式,為什么說 Etcd 最適合的場景是配置管理,集中式集群調度器的核心機制與常用策略都有哪些。
此外,Kubernetes 項目的各個可擴展性接口,也是你需要重點關注和理解的對象,比如 CNI 和網絡插件的工作方式、CSI 和存儲插件的設計、Kubernetes Volume 管理的完整流程,以及 CRI 的設計和各種 container runtime的異同。
從這個角度來說,Kubernetes 項目就是當前云計算平臺層開源項目的事實標準,熟悉它的思想、架構、實現細節甚至核心組件的源碼,不僅是學習這項技術的必經之路,也是傳統后端技術人員向云端轉型的最佳途徑。
? ? ? ?
Kubernetes通過存儲插件管理容器
持久化存儲的原理
你應該嘗試扮演公司和組織中進行云原生和基礎架構轉型的關鍵角色,而不是充當傳統和守舊那一方。你應該嘗試用容器和 Kubernetes 化的思想來影響周邊的每一位工程師。要記住,這個進程每前進一步,你的價值就放大一分。
定位三:學生、剛剛入行的初學者
而作為學生、剛剛入行的初學者,或者是對這個領域充滿興趣準備在這里作為一番的后端從業人員,我希望你對容器和 Kubernetes 技術體系的學習和實踐,更要關注這個項目和平臺背后更深層的基礎和底盤部分,這包括:
了解操作系統和硬件的實際工作方式,尤其是CPU、存儲和網絡。
充分理解操作系統的設計,甚至可以根據需要重新實現或者繞過某些部分,這是你后面進行系統性能優化的關鍵所在。
理解“所有系統都是分布式系統”的道理。了解經典的分布式系統設計的思想,并從實際的工程實踐中理解這些解決思路,這也是 Kubernetes 這個分布式項目構建的基礎。
只有清楚了自己的定位,你才能夠在 Kubernetes 這樣一個大而全的技術體系面前做到“有所放矢,有的放矢”,才能夠把容器和 Kubernetes 這項技術發展浪潮,與自己的技術路線和個人成長歷程,真正地關聯起來。
? ? ?
Kubernetes 項目核心功能的“全景圖”
一旦明確了定位,抓到了這其中的精髓和主線,那么接下來的學習過程對于你來說,其實就是“無招勝有招”,可以隨心所欲地按照你實際的項目、所關心的領域逐步展開,而完全不必拘泥于某種特定的套路了。
這里再推薦一下《深入剖析 Kubernetes 》,作者是張磊,也是Kubernetes項目資深成員和項目維護者 ,他在專欄中對Kubernetes的整體架構進行深入的剖析。會從容器的發展史開始講起,可以幫助你輕松的學習Kubernetes,我已經學習了一半,講得不錯,是我至今為止看到的最好的Kubernetes學習資料。所以也推薦給你。
對了,現在訂閱《深入剖析 Kubernetes 》,還可以享受拼團優惠價¥79,原價¥99,僅限今天24小時。
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
?
總結
以上是生活随笔為你收集整理的浅淡Kubernetes 与容器技术体系的最佳方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core IoT 入门指南:(
- 下一篇: .NET Core 批量重置 Azure