一文讀懂k8s必備知識,建議收藏?
這兩年,Kubernetes 擊敗了 Swarm 和 Mesos,幾乎成為容器編排的事實標準,BAT、滴滴、京東、頭條等大廠,都爭相把容器和 K8S 項目作為技術(shù)重心。
為什么在眾多容器平臺中,Kubernetes能夠脫穎而出,是因為Kubernetes的接口和概念設計是完全站在應用角度而非運維角度的。
如果站在傳統(tǒng)運維人員的角度看 Kubernetes,會覺得他是個奇葩所在,容器還沒創(chuàng)建出來,概念先來一大堆,文檔先讀一大把,編排文件也復雜,組件也多,讓很多人望而卻步。
但是如果開發(fā)人員的角度,尤其是從微服務應用的架構(gòu)的角度來看Kubernetes,則會發(fā)現(xiàn),他對于微服務的運行生命周期和相應的資源管控,做了非常好的抽象。

如圖中所示,和虛擬機運行傳統(tǒng)應用,只需要創(chuàng)建出資源來,并且保證網(wǎng)絡暢通即可的方式不同,微服務的運行,需要完成左面的一系列工具鏈。
為什么要使用這些工具鏈,以及如何使用這些工具鏈,請參考我的另外兩篇文章以業(yè)務為核心的云原生體系建設和從1到2000個微服務,史上最落地的實踐云原生25個步驟。
你會發(fā)現(xiàn),Kubernetes都有相應的工具鏈可以匹配。
微服務設計重要的一點就是區(qū)分無狀態(tài)和有狀態(tài),在 K8S 中,無狀態(tài)對應 deployment,有狀態(tài)對應 StatefulSet。
deployment 主要通過副本數(shù),解決橫向擴展的問題。
而 StatefulSet 通過一致的網(wǎng)絡 ID,一致的存儲,順序的升級,擴展,回滾等機制,保證有狀態(tài)應用,很好地利用自己的高可用機制。因為大多數(shù)集群的高可用機制,都是可以容忍一個節(jié)點暫時掛掉的,但是不能容忍大多數(shù)節(jié)點同時掛掉。而且高可用機制雖然可以保證一個節(jié)點掛掉后回來,有一定的修復機制,但是需要知道剛才掛掉的到底是哪個節(jié)點,StatefulSet 的機制可以讓容器里面的腳本有足夠的信息,處理這些情況,實現(xiàn)哪怕是有狀態(tài),也能盡快修復。
微服務少不了服務發(fā)現(xiàn),除了應用層可以使用 SpringCloud 或者 Dubbo 進行服務發(fā)現(xiàn),在容器平臺層當然是用 Service了,可以實現(xiàn)負載均衡,自修復,自動關(guān)聯(lián)。
服務編排,本來 K8S 就是編排的標準,可以將 yml 文件放到代碼倉庫中進行管理,而通過 deployment 的副本數(shù),可以實現(xiàn)彈性伸縮。
對于配置中心,K8S 提供了 configMap,可以在容器啟動的時候,將配置注入到環(huán)境變量或者 Volume 里面。但是唯一的缺點是,注入到環(huán)境變量中的配置不能動態(tài)改變了,好在 Volume 里面的可以,只要容器中的進程有 reload 機制,就可以實現(xiàn)配置的動態(tài)下發(fā)了。
統(tǒng)一日志中心,監(jiān)控中心,APM往往需要在 Node 上部署 Agent,來對日志和指標進行收集,當然每個 Node 上都有,daemonset 的設計,使得更容易實現(xiàn)。
Kubernetes本身能力比較弱的就是服務的治理能力,這一點 Service Mesh,可以實現(xiàn)更加精細化的服務治理,進行熔斷,路由,降級等策略。Service Mesh 的實現(xiàn)往往通過 sidecar 的方式,攔截服務的流量,進行治理。這也得力于 Pod 的理念,一個 Pod 可以有多個容器,如果當初的設計沒有 Pod,直接啟動的就是容器,會非常的不方便。
所以,掌握容器技術(shù)成為很多公司招聘時的重要選項。
這兩年,跟朋友探討 K8S落地時,也有一些問題被反復提及,比如:
為什么容器里只能跑“一個進程”?
之前一直用的某個 JVM 參數(shù),在容器里怎么不好使了?
為什么 Kubernetes 不能固定 IP 地址?容器網(wǎng)絡連不通,該如何 Debug?
K8S 中 StatefulSet 和 Operator 到底什么區(qū)別?PV 和 PVC 又該怎么用?
這些問題的答案和原理并不復雜,但很難一兩句話解釋清楚。因為容器技術(shù)涉及操作系統(tǒng)、網(wǎng)絡、存儲、調(diào)度、分布式原理等方方面面的知識,是個名副其實的全棧技術(shù)。
而其技術(shù)體系里那些“牽一發(fā)而動全身”的主線,比如 Linux 進程模型對容器本身的重要意義,“控制器”模式對整個 K8S 項目提綱挈領(lǐng)的作用等等,不會詳細展現(xiàn)在 Docker 或 Kubernetes 官方文檔中,但偏偏就是它們,才是掌握容器技術(shù)體系的精髓所在。
說實話,這幾年 K8s 資料沒少看,但真正有體系的卻不多,張磊的專欄《深入剖析 Kubernetes》算是一個,給我啟發(fā)很大,分享一份他總結(jié)的 K8S核心知識圖譜,把零散的概念系統(tǒng)地整理在一起,是我的壓箱底存貨:

跟著學下來,不僅讓我對容器的理解上了一個新高度,還拓寬了視野。字里行間都能感受到磊哥扎實的知識體系,從原理到實踐都清晰明了,真正彌補了我在 Docker 容器知識方面的不足,上線那會兒還是追著更新看的,后來又二刷了一遍。
方法用對事半功倍,這次我是感受到了。張磊這個專欄,是我看過最好的 K8s教程,口碑也不錯,已有近 40,000 人訂閱了,這里推薦給你。
掃碼免費試讀????
粉絲專屬口令「k8sk8sk8s」
立省 ¥80,到手僅 ¥119!
上面提到了,張磊是 Kubernetes 社區(qū)維護者,也是 Kubernetes 容器運行和集群調(diào)度等多個核心特性的作者之一,長期專注于容器集群管理和云計算數(shù)據(jù)中心這一塊,曾任職于 Hyper 和微軟研究院 (MSR),連續(xù)三次被微軟授予該領(lǐng)域 MVP。
這兩天,我看 CNCF 基金會更新了全球技術(shù)監(jiān)督委員會 TOC 的 9 人名單,國內(nèi)唯一入選的就是張磊,不明覺歷。
在專欄中,他用深入淺出的方式,從看似復雜的 Kubernetes 項目中梳理出一條主線,帶你理解容器和 K8s 背后的設計思想和邏輯,從而解決工作中遇到的問題。
專欄總計 57 講,現(xiàn)已全部更新完畢,認真跟下來,感覺收獲非常大。毫不夸張地說,這是一個可以長期影響你的專欄,不僅脈絡清晰,而且文字功底了得——真正的高屋建瓴,被同學評價為“站在華山之巔看風景”,值得多刷幾遍。
另外,專欄有幾個非常不得不提的特色:
1、“白話”容器技術(shù)基礎(chǔ):用講故事和提問的方式,梳理容器技術(shù)生態(tài)的發(fā)展脈絡,講述容器技術(shù)的來龍去脈與實現(xiàn)原理。由淺入深,讓人讀起來熱血澎湃,不但一點也不枯燥,還能將道理講得通俗易懂,十分有代入感。
2、從 0 帶你搭建 Kubernetes 集群:除了原理之外,張磊還會帶你從 0 開始搭建一套 Kubernetes 集群,領(lǐng)略 Kubernetes 集群的“一鍵安裝”。
3、剖析 Kubernetes 核心特性:張磊從分布式系統(tǒng)設計的視角出發(fā),抽象和歸納出這些特性中體現(xiàn)出來的普遍方法,然后帶著這些指導思想去逐一闡述 Kubernetes 項目關(guān)于編排、調(diào)度和作業(yè)管理的各項核心特性。
特別要說的是,這個課在更新完結(jié)一年后,張磊還在寫加餐,可能是單純的分享精神,也是非常走心了,截了一些評價供你參考:

這門課我看了不止一遍,已經(jīng)推薦給好幾個朋友了,其中還有我們技術(shù)總監(jiān)。這里,也推薦給你。
老規(guī)矩:
老用戶專屬口令「k8sk8sk8s」
立省 ¥80,到手僅 ¥119!
新人首單無需口令,特惠價直接購買!
別的不說,錯過張磊這門課,你一定后悔。
可能你錯過了互聯(lián)網(wǎng)技術(shù)大爆炸的時代,也沒在數(shù)字貨幣早期狂熱里分到一杯羹。所以,這次以“容器”為名的歷史變革,又有什么理由作壁上觀呢?
?? 點擊「閱讀原文」,免費試讀!
和張磊一起玩轉(zhuǎn) K8s 進大廠!
