从容器到容器云,什么才是 Kubernetes 的本质?
這兩年,Kubernetes 擊敗了 Swarm 和 Mesos,幾乎成為容器編排的事實標準,BAT、滴滴、京東、頭條等大廠,都爭相把容器和 K8S 項目作為技術重心。
為什么在眾多容器平臺中,Kubernetes能夠脫穎而出,是因為Kubernetes的接口和概念設計是完全站在應用角度而非運維角度的。
?
如果站在傳統運維人員的角度看 Kubernetes,會覺得他是個奇葩所在,容器還沒創建出來,概念先來一大堆,文檔先讀一大把,編排文件也復雜,組件也多,讓很多人望而卻步。
?
但是如果開發人員的角度,尤其是從微服務應用的架構的角度來看Kubernetes,則會發現,他對于微服務的運行生命周期和相應的資源管控,做了非常好的抽象。
如圖中所示,和虛擬機運行傳統應用,只需要創建出資源來,并且保證網絡暢通即可的方式不同,微服務的運行,需要完成左面的一系列工具鏈。
?
為什么要使用這些工具鏈,以及如何使用這些工具鏈,請參考我的另外兩篇文章以業務為核心的云原生體系建設和從1到2000個微服務,史上最落地的實踐云原生25個步驟。
?
你會發現,Kubernetes都有相應的工具鏈可以匹配。
?
微服務設計重要的一點就是區分無狀態和有狀態,在 K8S 中,無狀態對應 deployment,有狀態對應 StatefulSet。
?
deployment 主要通過副本數,解決橫向擴展的問題。
?
而 StatefulSet 通過一致的網絡 ID,一致的存儲,順序的升級,擴展,回滾等機制,保證有狀態應用,很好地利用自己的高可用機制。因為大多數集群的高可用機制,都是可以容忍一個節點暫時掛掉的,但是不能容忍大多數節點同時掛掉。而且高可用機制雖然可以保證一個節點掛掉后回來,有一定的修復機制,但是需要知道剛才掛掉的到底是哪個節點,StatefulSet 的機制可以讓容器里面的腳本有足夠的信息,處理這些情況,實現哪怕是有狀態,也能盡快修復。
?
微服務少不了服務發現,除了應用層可以使用 SpringCloud 或者 Dubbo 進行服務發現,在容器平臺層當然是用 Service了,可以實現負載均衡,自修復,自動關聯。
?
服務編排,本來 K8S 就是編排的標準,可以將 yml 文件放到代碼倉庫中進行管理,而通過 deployment 的副本數,可以實現彈性伸縮。
?
對于配置中心,K8S 提供了 configMap,可以在容器啟動的時候,將配置注入到環境變量或者 Volume 里面。但是唯一的缺點是,注入到環境變量中的配置不能動態改變了,好在 Volume 里面的可以,只要容器中的進程有 reload 機制,就可以實現配置的動態下發了。
?
統一日志中心,監控中心,APM往往需要在 Node 上部署 Agent,來對日志和指標進行收集,當然每個 Node 上都有,daemonset 的設計,使得更容易實現。
?
Kubernetes本身能力比較弱的就是服務的治理能力,這一點 Service Mesh,可以實現更加精細化的服務治理,進行熔斷,路由,降級等策略。Service Mesh 的實現往往通過 sidecar 的方式,攔截服務的流量,進行治理。這也得力于? Pod 的理念,一個 Pod 可以有多個容器,如果當初的設計沒有 Pod,直接啟動的就是容器,會非常的不方便。
所以,掌握容器技術成為很多公司招聘時的重要選項。
?
這兩年,跟朋友探討 K8S落地時,也有一些問題被反復提及,比如:
?
為什么容器里只能跑“一個進程”?
之前一直用的某個 JVM 參數,在容器里怎么不好使了?
為什么 Kubernetes 不能固定 IP 地址?容器網絡連不通,該如何 Debug?
K8S?中 StatefulSet 和 Operator 到底什么區別?PV 和 PVC 又該怎么用?
?
這些問題的答案和原理并不復雜,但很難一兩句話解釋清楚。因為容器技術涉及操作系統、網絡、存儲、調度、分布式原理等方方面面的知識,是個名副其實的全棧技術。
?
而其技術體系里那些“牽一發而動全身”的主線,比如 Linux 進程模型對容器本身的重要意義,“控制器”模式對整個 K8S?項目提綱挈領的作用等等,不會詳細展現在 Docker 或 Kubernetes 官方文檔中,但偏偏就是它們,才是掌握容器技術體系的精髓所在。
?
說實話,這幾年 K8s?資料沒少看,但真正有體系的卻不多,張磊的專欄《深入剖析 Kubernetes》算是一個,給我啟發很大,分享一份他總結的?K8S核心知識圖譜,把零散的概念系統地整理在一起,是我的壓箱底存貨:
跟著學下來,不僅讓我對容器的理解上了一個新高度,還拓寬了視野。字里行間都能感受到磊哥扎實的知識體系,從原理到實踐都清晰明了,真正彌補了我在 Docker 容器知識方面的不足,上線那會兒還是追著更新看的,后來又二刷了一遍。
?
方法用對事半功倍,這次我是感受到了。張磊這個專欄,是我看過最好的 K8s教程,口碑也不錯,已有近?40,000?人訂閱了,這里推薦給你。
?
掃碼免費試讀????????
粉絲專屬口令「k8sk8sk8s」
立省 ¥80,到手僅?¥119!
?
上面提到了,張磊是?Kubernetes 社區維護者,也是 Kubernetes 容器運行和集群調度等多個核心特性的作者之一,長期專注于容器集群管理和云計算數據中心這一塊,曾任職于 Hyper 和微軟研究院 (MSR),連續三次被微軟授予該領域 MVP。
?
這兩天,我看 CNCF 基金會更新了全球技術監督委員會 TOC 的 9 人名單,國內唯一入選的就是張磊,不明覺歷。
?
在專欄中,他用深入淺出的方式,從看似復雜的 Kubernetes 項目中梳理出一條主線,帶你理解容器和 K8s?背后的設計思想和邏輯,從而解決工作中遇到的問題。
?
專欄總計?57?講,現已全部更新完畢,認真跟下來,感覺收獲非常大。毫不夸張地說,這是一個可以長期影響你的專欄,不僅脈絡清晰,而且文字功底了得——真正的高屋建瓴,被同學評價為“站在華山之巔看風景”,值得多刷幾遍。
?
另外,專欄有幾個非常不得不提的特色:
1、“白話”容器技術基礎:用講故事和提問的方式,梳理容器技術生態的發展脈絡,講述容器技術的來龍去脈與實現原理。由淺入深,讓人讀起來熱血澎湃,不但一點也不枯燥,還能將道理講得通俗易懂,十分有代入感。
?
2、從 0 帶你搭建 Kubernetes 集群:除了原理之外,張磊還會帶你從 0 開始搭建一套 Kubernetes 集群,領略 Kubernetes 集群的“一鍵安裝”。
?
3、剖析 Kubernetes 核心特性:張磊從分布式系統設計的視角出發,抽象和歸納出這些特性中體現出來的普遍方法,然后帶著這些指導思想去逐一闡述 Kubernetes 項目關于編排、調度和作業管理的各項核心特性。
?
特別要說的是,這個課在更新完結一年后,張磊還在寫加餐,可能是單純的分享精神,也是非常走心了,截了一些評價供你參考:
?
?
這門課我看了不止一遍,已經推薦給好幾個朋友了,其中還有我們技術總監。這里,也推薦給你。
?
老規矩:
老用戶專屬口令「k8sk8sk8s」
立省?¥80,到手僅?¥119!
新人首單無需口令,特惠價直接購買!
?
別的不說,錯過張磊這門課,你一定后悔。
可能你錯過了互聯網技術大爆炸的時代,也沒在數字貨幣早期狂熱里分到一杯羹。所以,這次以“容器”為名的歷史變革,又有什么理由作壁上觀呢?
?
?????點擊「閱讀原文」,免費試讀!
和張磊一起玩轉 K8s 進大廠!
總結
以上是生活随笔為你收集整理的从容器到容器云,什么才是 Kubernetes 的本质?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曹大带我学 Go(10)—— 如何给 G
- 下一篇: 为什么 Go 模块在下游服务抖动恢复后,