kubernetes,簡(jiǎn)稱 K8s,是用 8 代替中間 8 個(gè)字符 “ubernete” 而成的縮寫(xiě),是一個(gè)開(kāi)源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes 的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),Kubernetes 提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。
k8s 在企業(yè)中的應(yīng)用場(chǎng)景
首先我們了解一下 k8s 的三個(gè)基本特點(diǎn):
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可擴(kuò)展: 模塊化,插件化,可掛載,可組合
自動(dòng)化: 自動(dòng)部署,自動(dòng)重啟,自動(dòng)復(fù)制,自動(dòng)伸縮/擴(kuò)展
自動(dòng)化運(yùn)維平臺(tái)
對(duì)于中小型企業(yè),為了降本增效,使用 k8s 來(lái)構(gòu)建一套自動(dòng)化運(yùn)維平臺(tái),提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。 對(duì)于大型互聯(lián)網(wǎng)公司更要使用容器化部署。現(xiàn)在服務(wù)器越來(lái)越多,不可能都人工部署,需要使用自動(dòng)化的運(yùn)維平臺(tái)來(lái)監(jiān)控服務(wù),來(lái)實(shí)現(xiàn)自動(dòng)服務(wù)化的部署、運(yùn)維。
充分利用服務(wù)器資源
假設(shè)現(xiàn)在有一個(gè)開(kāi)發(fā)量為 200 個(gè)的請(qǐng)求,服務(wù)器配置為 2cpus 4G
靜態(tài)請(qǐng)求:150(訪問(wèn) CDN,Nginx,cache 等)
動(dòng)態(tài)請(qǐng)求:50(訪問(wèn)數(shù)據(jù)庫(kù),需要把數(shù)據(jù)讀入內(nèi)存)
估算服務(wù)器資源(只考慮內(nèi)存,不考慮程序響應(yīng)時(shí)間RT,不考慮CPU切換時(shí)間) 假設(shè)一個(gè)靜態(tài)請(qǐng)求進(jìn)程占用2M,一個(gè)動(dòng)態(tài)請(qǐng)求進(jìn)程占用10M,則這200個(gè)請(qǐng)求并發(fā)占用:150×2M + 50×10M = 800M 內(nèi)存 可以支持的 QPS (批發(fā)量,每秒查詢率) 為:200×4=800(因?yàn)?800 M× 4 < 4G) 因此如果要充分利用服務(wù)器資源,需要達(dá)到 QPS=800,此時(shí)占用內(nèi)存 3.2G(剩下 0.8G 給 OS 等) 實(shí)際上:800QPS 無(wú)法達(dá)到,還要考慮 RT、CPU 切換、內(nèi)存等因素,那就保守把 QPS=300,但這時(shí)沒(méi)能充分利用服務(wù)器的資源。更何況當(dāng)下服務(wù)器配置可不止 2cpus 4G 容器化解決方案,在服務(wù)器部署多個(gè)容器,容器當(dāng)中運(yùn)行著我們部署的各種服務(wù)
服務(wù)無(wú)縫遷移
在開(kāi)發(fā)環(huán)境開(kāi)發(fā),然后拿到測(cè)試環(huán)境去測(cè)試,但往往一上線就會(huì)有 bug,因?yàn)閼?yīng)用的運(yùn)行、配置、管理、所有生存周期將與當(dāng)前操作系統(tǒng)綁定,所以生產(chǎn)環(huán)境的不一致就可能導(dǎo)致錯(cuò)誤。 使用容器化解決方案,每個(gè)應(yīng)用可以被打包成一個(gè)容器鏡像(紅色圈起來(lái)表示把服務(wù)部署在容器中),使用容器可以在 開(kāi)發(fā) 或 測(cè)試 的階段,為應(yīng)用創(chuàng)建容器鏡像,這些鏡像能夠完全脫離環(huán)境,每個(gè)應(yīng)用不需要與其余的應(yīng)用堆棧組合,也不依賴于生產(chǎn)環(huán)境基礎(chǔ)結(jié)構(gòu),這使得從研發(fā)到測(cè)試、生產(chǎn)能提供一致環(huán)境。使用 kubernetes 來(lái)管理這些容器,便能夠?qū)崿F(xiàn)服務(wù)的無(wú)縫遷移。
服務(wù)部署模式變遷 & 服務(wù)部署變化問(wèn)題的思考
服務(wù)部署模式是如何變遷的
物理機(jī):傳統(tǒng)的應(yīng)用部署方式是通過(guò)插件或腳本來(lái)安裝應(yīng)用。這樣做的缺點(diǎn)是應(yīng)用的運(yùn)行、配置、管理、所有生存周期將與當(dāng)前操作系統(tǒng)綁定,這樣做并不利于應(yīng)用的升級(jí)更新/回滾等操作。
虛擬化 (虛擬機(jī)):當(dāng)然上面的問(wèn)題可以通過(guò)創(chuàng)建虛擬機(jī)的方式來(lái)實(shí)現(xiàn)某些功能,但是虛擬機(jī)本身就很占用資源,并不利于可移植性。(就是把服務(wù)部署在虛擬機(jī)中,達(dá)到分隔物理資源的作用——充分利用服務(wù)器資源)
容器部署:每個(gè)容器之間互相隔離,每個(gè)容器有自己的文件系統(tǒng) ,容器之間進(jìn)程不會(huì)相互影響,能區(qū)分計(jì)算資源。相對(duì)于虛擬機(jī),容器能快速部署,由于容器與底層設(shè)施、機(jī)器文件系統(tǒng)解耦的,所以它能在不同云、不同版本操作系統(tǒng)間進(jìn)行遷移。而且更輕量級(jí)、運(yùn)行效率更快。
服務(wù)部署模式變化,帶來(lái)了哪些問(wèn)題
前提條件:SOA 架構(gòu),微服務(wù)架構(gòu)模式下,服務(wù)拆分越來(lái)越多,部署維護(hù)的服務(wù)越來(lái)越多,該如何管理? 虛擬機(jī)服務(wù)部署方式(通過(guò) openstack 軟件提供可視化的方式來(lái)管理虛擬機(jī)) 容器化部署模式(通過(guò) k8s 軟件管理容器,其實(shí)容器也可以看成一個(gè)虛擬機(jī),只不過(guò)更輕量級(jí)) 容器化部署問(wèn)題:
如何對(duì)服務(wù)橫向擴(kuò)展?
容器宕機(jī)怎么辦?如何恢復(fù)?
重新發(fā)布版本如何更新且更新后不影響業(yè)務(wù)?
如何監(jiān)控容器?
容器如何調(diào)度創(chuàng)建?
數(shù)據(jù)安全性如何保證?
使用 k8s 管理容器,以上問(wèn)題都能夠完美的解決
云架構(gòu) & 云原生
云 和 k8s 的關(guān)系
云:使用容器構(gòu)建的一套服務(wù)集群網(wǎng)絡(luò),云是由很多的容器構(gòu)成。 k8s:用來(lái)管理云中的容器
云架構(gòu)
iaas:基礎(chǔ)設(shè)施即服務(wù)
用戶角度:租用(購(gòu)買(mǎi)或分配權(quán)限)云主機(jī),用戶不用考慮網(wǎng)絡(luò)、DNS、存儲(chǔ)和硬件環(huán)境等方面的問(wèn)題。 運(yùn)營(yíng)商角度:提供網(wǎng)絡(luò)、DNS、存儲(chǔ)等這樣的服務(wù)就叫做基礎(chǔ)設(shè)置服務(wù)
paas:平臺(tái)即服務(wù)
在平臺(tái)上提供了很多服務(wù),如 MySQL 服務(wù)、Redis 服務(wù)、MQ 服務(wù)、Elasticsearch 服務(wù)等等
saas:軟件即服務(wù)
釘釘、財(cái)務(wù)管理等等,一些軟件維護(hù)工作都是由運(yùn)行商來(lái)做,用戶只管體驗(yàn)軟件提供的服務(wù)就行了。
serverless:server 服務(wù),less 無(wú) —— 無(wú)服務(wù) 不需要服務(wù)器
站在用戶角度考慮問(wèn)題,用戶只需要使用云服務(wù)器即可。 在云服務(wù)器上的所有的基礎(chǔ)環(huán)境、軟件環(huán)境都不需要考慮和維護(hù),非常方便。 未來(lái)開(kāi)發(fā)的趨勢(shì)都是 severless,企業(yè)都構(gòu)建了自己的私有云或者公有云環(huán)境。使用 k8s 構(gòu)建非常方便。
云原生
為了讓?xiě)?yīng)用程序(項(xiàng)目,服務(wù)軟件)都運(yùn)行在云上的解決方案,這樣方案叫做云原生,有以下特點(diǎn):
容器化:所有的服務(wù)都必須部署在容器中。
微服務(wù):web 服務(wù)架構(gòu)是微服務(wù)架構(gòu)
CI/CD:可持續(xù)交互和可持續(xù)部署
DevOps:開(kāi)發(fā)和運(yùn)維密不可分
kubernetes 架構(gòu)原理
k8s 的歷史
k8s 是由 Google 公司 用go 語(yǔ)言開(kāi)發(fā)的。google 在全球有相當(dāng)多的服務(wù)器,當(dāng)然需要一個(gè)管理軟件。Google內(nèi)部本身就有一個(gè)叫 borg 的系統(tǒng)云平臺(tái)管理工具,已經(jīng)使用了十幾年。后來(lái)參照 borg 系統(tǒng)架構(gòu)開(kāi)發(fā)了 k8s,主要用它來(lái)編排、管理容器,為容器化的應(yīng)用提供部署運(yùn)行、資源調(diào)度、服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)伸縮等一系列完整功能,提高了大規(guī)模容器集群管理的便捷性。
k8s 的架構(gòu)
k8s 集群(Cluster)
一個(gè) master 對(duì)應(yīng)一群 node 節(jié)點(diǎn)
master 節(jié)點(diǎn)
api server:相當(dāng)于 k8s 的網(wǎng)關(guān),所有的指令請(qǐng)求都必須經(jīng)過(guò) api server
scheduler:調(diào)度器,使用調(diào)度算法,把請(qǐng)求資源調(diào)度到某個(gè) node 節(jié)點(diǎn)
controller:控制器,維護(hù) k8s 資源對(duì)象(CRUD:添加、刪除、更新、修改)
etcd:存儲(chǔ)資源對(duì)象(可以服務(wù)注冊(cè)、發(fā)現(xiàn)等等)
node 節(jié)點(diǎn)
docker:運(yùn)行容器的基礎(chǔ)環(huán)境,容器引擎
kubelet:每個(gè) node 節(jié)點(diǎn)都有一份kubelet,在 node 節(jié)點(diǎn)上的資源操作指令由 kuberlet 來(lái)執(zhí)行,scheduler 把請(qǐng)求交給api ,然后 api sever 再把信息指令數(shù)據(jù)存儲(chǔ)在 etcd 里,于是 kuberlet 會(huì)掃描 etcd 并獲取指令請(qǐng)求,然后去執(zhí)行
kube-proxy:代理服務(wù),負(fù)載均衡
fluentd:日志收集服務(wù)
pod:k8s 管理的基本單元(最小單元),pod 內(nèi)部是容器。k8s 不直接管理容器,而是管理 pod
回顧架構(gòu)特點(diǎn)
k8s 是用來(lái)管理容器的,但是不直接操作容器,最小的操作單元是 pod(間接管理容器)
一個(gè) master 對(duì)應(yīng)一群 node 節(jié)點(diǎn)。
master 節(jié)點(diǎn)不存儲(chǔ)容器,只負(fù)責(zé)調(diào)度,網(wǎng)關(guān),控制器,資源對(duì)象存儲(chǔ)等
容器存儲(chǔ)在 node 節(jié)點(diǎn) 的 pod 內(nèi)部
pod 內(nèi)部可以有一個(gè)或多個(gè)容器
kubelet 負(fù)責(zé)本地的 pod 的維護(hù),CRUD
kube-proxy 負(fù)責(zé)負(fù)載均衡,在多個(gè) pod 間負(fù)載均衡
編輯:黃飛
-
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217090 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9795瀏覽量
87991 -
容器
+關(guān)注
關(guān)注
0文章
511瀏覽量
22456 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
207瀏覽量
14283 -
kubernetes
+關(guān)注
關(guān)注
0文章
245瀏覽量
9069
原文標(biāo)題:通俗易懂 k8s ——架構(gòu)篇
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是 K8S,如何使用 K8S
全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對(duì)比
如何利用K8S全面擁抱微服務(wù)架構(gòu)?
OpenStack與K8s結(jié)合的兩種方案的詳細(xì)介紹和比較
Docker不香嗎為什么還要用K8s
簡(jiǎn)單說(shuō)明k8s和Docker之間的關(guān)系
K8S集群服務(wù)訪問(wèn)失敗怎么辦 K8S故障處理集錦

評(píng)論