一、k8s設(shè)計思想更先進(jìn)
k8s的主要設(shè)置思想,是從更宏觀的角度,以統(tǒng)一的方式來定義任務(wù)之間的各種關(guān)系
1.k8s的核心功能圖
2.k8s的全局架構(gòu)圖
把微服務(wù)比喻為人,服務(wù)治理解決的是人的溝通,人太多了就需要生存空間和溝通方式的優(yōu)化,這就需要集群和編排。
compose和swarm可以解決少數(shù)人之間的關(guān)系,比如把手機(jī)號給你,你就可以方便的找到我,但是如果手機(jī)號變更的時候就會麻煩,人多了也會麻煩。
而k8s是站在上帝視角的高度抽象,看到了
* 總體有哪些組織,不同組織有什么樣的特點(Job、CronJob、Autoscaler、StatefulSet、DaemonSet...)
*
不同組織之間交流可能需要什么(ConfigMap,Secret...),這樣比較緊密的人在相同的pod中,通過Service-不會變更的手機(jī)號,來和不同的組織進(jìn)行溝通,
* 幫助人們快速構(gòu)建組織(Deployment、RC)。
k8s就是把組織協(xié)調(diào)這項管理學(xué)落實到了計算機(jī)工程上
二、功能對比
1. swarm偏重的是容器的部署,而k8s偏重應(yīng)用的部署
swarm中最小單元是容器,而k8s是pod,pod可以由多個容器組成,在pod內(nèi)共享volume和namespace,同一pod內(nèi)的通信更為高效
pod有什么好處?
例如有一個web容器,為了收集web日志,需要安裝一個日志插件,如果把插件安裝在web容器內(nèi):
* 如果插件有更新,即使服務(wù)沒有變化也要重新把鏡像構(gòu)建部署一遍
* 如果插件存在內(nèi)存泄露問題,整個容器都會被連累
而pod可以為日志插件和web應(yīng)用各自創(chuàng)建一個容器,兩者共享volume,web應(yīng)用只需要日志保存到volume,兩個容器各自有自己的鏡像,更新互不影響
2. k8s比swarm有更多的調(diào)度策略,更適合大規(guī)模容器的的管理
swarm只有三種調(diào)度策略:spread、binpack、random,而k8s策略數(shù)更多多,還有端口沖突策略、容器掛載卷沖突策略、指定特定宿主機(jī)策略等。
Composer中,通過link將容器關(guān)聯(lián)起來,如DB的的連接寫入環(huán)境變量供進(jìn)程使用,如果DB發(fā)生變化(如鏡像)
集群中的節(jié)點,只要在同一network內(nèi),服務(wù)之間
3. k8s的負(fù)載均衡機(jī)制比swarm更靈活
swarm采用的是nginx+consul。
consul保存了各個docker中應(yīng)用的網(wǎng)絡(luò)信息,nginx在compose時,在dockerfile中指定consul的地址,配置到nginx配置中,從而實現(xiàn)負(fù)載均衡,這樣有個缺點,就是新添加的容器IP和網(wǎng)絡(luò)需要手動添加到nginx文件中
而k8s負(fù)載均衡通過service實現(xiàn),沒有容器IP變更問題,只要有相同的label的pod都可以通過service訪問,新添加的容器IP和網(wǎng)絡(luò)不會影響負(fù)載均衡器
4.k8s支持彈性伸縮
k8s可以根據(jù)Pod的CPU、內(nèi)存自動的調(diào)整Pod的個數(shù),保障服務(wù)的可用性,swarm則不具備這樣的功能
熱門工具 換一換