成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Kubernetes 架構(gòu)與設(shè)計(jì)

JowayYoung / 1184人閱讀

摘要:比如選取合適的節(jié)點(diǎn),配置相應(yīng)的負(fù)載均衡策略等行動(dòng)控制器會(huì)負(fù)責(zé)具體的工作執(zhí)行,以達(dá)到用戶聲明的應(yīng)用狀態(tài),該過(guò)程是全自動(dòng)化。

什么是kubernetes?
官方說(shuō)明:
Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.It groups containers that make up an application into logical units for easy management and discovery.

說(shuō)簡(jiǎn)單點(diǎn),Kubernetes 就是自動(dòng)化容器管理平臺(tái),它跟一般的 PaaS 平臺(tái)一樣,也都支持比如服務(wù)部署、自動(dòng)運(yùn)維、資源調(diào)度、擴(kuò)縮容、自我修復(fù)、負(fù)載均衡,服務(wù)發(fā)現(xiàn)等功能。

講點(diǎn)不一樣的,Kubernets 到底有什么特別的地方?以我的理解還是在于能力抽象,抽象可以分為兩大塊:基礎(chǔ)設(shè)施API。

1.基礎(chǔ)設(shè)施的抽象

基礎(chǔ)設(shè)施包括很多,比如runtime(docker、rkt、pouch),存儲(chǔ),網(wǎng)絡(luò)等。還有不同的云服務(wù)提供商,集群環(huán)境的差異都會(huì)很大。
像存儲(chǔ)、網(wǎng)絡(luò)這類都是難啃的骨頭,如果 Kubernetes 想吃,那就會(huì)出現(xiàn)大量的 PR,這些代碼量甚至?xí)戎黧w代碼倍上好幾倍,不僅會(huì)提升代碼的復(fù)雜度,還會(huì)影響系統(tǒng)的穩(wěn)定性。

所以 Kubernetes 根本不想吃,但是又想做云無(wú)關(guān),便開(kāi)始實(shí)現(xiàn)各類 interface,做各種抽象。比如容器運(yùn)行時(shí)接口(CRI)、容器網(wǎng)絡(luò)接口(CNI)、容器存儲(chǔ)接口(CSI)。這些接口讓 Kubernetes 變得無(wú)比開(kāi)放,而其本身則可以專注于內(nèi)部部署及容器調(diào)度。

Kubernetes 生態(tài)中也會(huì)有很多通用的功能,比如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、日志系統(tǒng)、監(jiān)控系統(tǒng)等,這些都有提供默認(rèn)方案,且這些方案都是可選、可插拔的。這些也都可以看作是 PaaS 平臺(tái)的基礎(chǔ)設(shè)施,在 Kubernetes 上也沒(méi)有強(qiáng)綁強(qiáng)銷的買賣,給用戶提供了高度的靈活性。

2. API 的抽象

Kubernetes 的各種功能都離不開(kāi)它定義的資源對(duì)象,這些對(duì)象都可以通過(guò) API 被提交到集群的 Etcd 中。API 的定義和實(shí)現(xiàn)都符合 HTTP REST 的格式,用戶可以通過(guò)標(biāo)準(zhǔn)的 HTTP 動(dòng)詞(POST、PUT、GET、DELETE)來(lái)完成對(duì)相關(guān)資源對(duì)象的增刪改查。

常用的資源對(duì)象,比如 Deployment、DaemonSet、Job、PV 等。API 的抽象也意在這部分資源對(duì)象的定義。Kubernetes 有新的功能實(shí)現(xiàn),一般會(huì)創(chuàng)建新的資源對(duì)象,而功能也依托于該對(duì)象進(jìn)行實(shí)現(xiàn)。

我覺(jué)得這兩部分的抽象,才是極大的成就了當(dāng)前的 Kubernetes,使其成為業(yè)界標(biāo)準(zhǔn)的關(guān)鍵之一。

設(shè)計(jì)

Kubernetes 已經(jīng)是一個(gè)非常龐大的分布式系統(tǒng)了,在深入各類源碼實(shí)現(xiàn)之前,值得先了解下 Kubernetes 的設(shè)計(jì)理念。
這里先學(xué)習(xí)下 Kubernetes 的聲明式設(shè)計(jì)控制閉環(huán)。

1. 聲明式

Kubernetes 采用了聲明式(Declarative)的資源管理模式,該模式會(huì)有如下幾個(gè)步驟:

聲明:用戶通過(guò)聲明式的配置文件(json/yaml等)向 Kubernetes 告訴所期望達(dá)到的應(yīng)用狀態(tài)。(比如:運(yùn)行 2 個(gè)副本的 nginx 服務(wù))

觀測(cè):Kubernetes 會(huì)觀測(cè)到用戶的聲明,并自動(dòng)分析出需要執(zhí)行的操作及用戶所期望達(dá)到的應(yīng)用狀態(tài)。(比如選取合適的節(jié)點(diǎn),配置相應(yīng)的負(fù)載均衡策略等)

行動(dòng):Kubernetes 控制器會(huì)負(fù)責(zé)具體的工作執(zhí)行,以達(dá)到用戶聲明的應(yīng)用狀態(tài),該過(guò)程是全自動(dòng)化。

持續(xù)觀測(cè)與收斂:大型分布式系統(tǒng)必然會(huì)存在各種異常,比如系統(tǒng)崩潰、容器退出等。Kubernetes 自然會(huì)持續(xù)關(guān)注系統(tǒng)的實(shí)時(shí)狀態(tài),當(dāng)遇到異常時(shí)能夠及時(shí)的進(jìn)行自我修復(fù)。比如用戶聲明了 2 個(gè) nginx 服務(wù),當(dāng)其中有個(gè) nginx 掛了,或者所在的宿主機(jī)掛了,kubernetes 會(huì)自動(dòng)發(fā)現(xiàn),并尋找合適的節(jié)點(diǎn),再運(yùn)行一個(gè)新的 nginx 服務(wù),以維持用戶所期望達(dá)到的應(yīng)用狀態(tài)。

在命令式(Imperative)設(shè)計(jì)模式中,用戶需要指明一步一步的具體流程和指令,而并非像聲明式模式一樣直接指明最終想要達(dá)到的狀態(tài)。
可以簡(jiǎn)單假想下,如果用命令式來(lái)實(shí)現(xiàn) Kubernetes集群,會(huì)如何實(shí)現(xiàn)?

必然 scheduler 模塊自身不僅需要完成原本的調(diào)度工作,還攜帶了 apiserver & controller等功能;scheduler 不僅需要執(zhí)行命令,還需要關(guān)心命令執(zhí)行的結(jié)果;很多復(fù)雜的概念都會(huì)堆積在 scheduler 模塊上,導(dǎo)致該模塊越來(lái)越重,越來(lái)越復(fù)雜。

相對(duì)于命令式操作,聲明式操作會(huì)更穩(wěn)定且更容易被用戶接受,因?yàn)樵揂PI中隱含了用戶想要操作的目標(biāo)對(duì)象,而這些對(duì)象剛好都是名詞性質(zhì)的,比如Service、Deployment、PV等;且聲明式的配置文件更貼近“人類語(yǔ)言”,比如YAML、JSON。

所以相比較,命令式思想在分布式系統(tǒng)和微服務(wù)架構(gòu)中會(huì)存在各種困境。

2. 控制閉環(huán)

Kubernetes 使用了聲明式設(shè)計(jì)模式,這里控制閉環(huán)又起到了什么作用呢?
我們可以從該系統(tǒng)的需求入手分析:

持續(xù)觀測(cè)、校正,最終將運(yùn)行狀態(tài)達(dá)到用戶期望的狀態(tài)。

感知用戶的行為并執(zhí)行。比如修改 Pod 數(shù)量,應(yīng)用升級(jí)/回滾等等。

聲明僅僅只是聲明,用戶丟過(guò)來(lái)一個(gè) yaml 文件后,該如何智能的轉(zhuǎn)化為一系列可執(zhí)行操作,且達(dá)到上面所描述的需求?

調(diào)度器是核心,但它只是負(fù)責(zé)從集群節(jié)點(diǎn)中選擇合適的 node 來(lái)運(yùn)行 pods,顯然讓調(diào)度器來(lái)實(shí)現(xiàn)上訴的功能不太合適,而需要有專門的控制器組件來(lái)實(shí)現(xiàn)。

Kubernetes 實(shí)現(xiàn)了大量的 controllers,它們通過(guò) list-watch etcd 來(lái)感知集群數(shù)據(jù)的更新,然后 24 小時(shí)不間斷的工作以達(dá)到期待的狀態(tài),在該過(guò)程中它們也會(huì)把創(chuàng)建的各類數(shù)據(jù)反饋回 kube-apiserver & etcd,從而形成了數(shù)據(jù)流的閉環(huán)。

Kube-controller-manager 不僅完成了 Kubernetes 集群功能的半片天,還提供很強(qiáng)大的擴(kuò)展能力,可以讓用戶輕松的實(shí)現(xiàn)自己的 controllers。

架構(gòu)

Kubernetes 架構(gòu)是借鑒了 Borg 的設(shè)計(jì)理念,如下圖:

Kubernetes 主要由以下幾個(gè)核心組件組成:

Etcd:是高可用的key/value存儲(chǔ)系統(tǒng),用于持久化存儲(chǔ)集群中的所有資源對(duì)象,比如:Node,Pod,Serivce,RC,namespace等。API server提供了操作etcd的封裝接口API,以Rest的方式提供,這些API基本上都是集群中資源對(duì)象的增刪改查及監(jiān)聽(tīng)資源變化的接口,比如創(chuàng)建Pod、RC,監(jiān)聽(tīng)Pod的變化等接口。API server是連接其他所有服務(wù)組件的中間樞紐。

API Server:提供了資源對(duì)象的唯一操作入口,其他組件都必須通過(guò)它提供的 API 來(lái)操作資源數(shù)據(jù),通過(guò)對(duì)相關(guān)的資源數(shù)據(jù)"全量查詢" + "變化監(jiān)聽(tīng)",這些組件可以很"實(shí)時(shí)"的完成相關(guān)的業(yè)務(wù)功能。比如提交一個(gè)新的 Pod 到 API server 中,Controller Manger 可以立即就發(fā)現(xiàn)并開(kāi)始作用。它還有一套完備的安全機(jī)制,包括認(rèn)證、授權(quán)及準(zhǔn)入控制等相關(guān)模塊。

Controller Manger:集群內(nèi)部的管理控制中心,主要完成了集群的故障檢測(cè)和恢復(fù)的自動(dòng)化工作。比如對(duì) RC 定義的 Pod 進(jìn)行維護(hù);根據(jù) service 和 Pod的關(guān)系,完成服務(wù)的 Endpoints 對(duì)象的創(chuàng)建和更新;還有 Node 的發(fā)現(xiàn)、管理和狀態(tài)監(jiān)控,死亡容器所占資源及本地緩存的鏡像文件的清理等工作。

Scheduler: 集群的調(diào)度器,負(fù)責(zé) Pod 在集群節(jié)點(diǎn)中的調(diào)度分配。

Kubelet:負(fù)責(zé)本地節(jié)點(diǎn)上 Pod 的創(chuàng)建、修改、監(jiān)控、刪除等生命周期管理,同時(shí)會(huì)上報(bào)本 Node 的狀態(tài)信息到 API server。

Kube-proxy:實(shí)現(xiàn) Service 的代理及軟件模式的負(fù)載均衡器。

Kubectl:集群內(nèi)部的客戶端可以直接使用 kubectl 命令管理集群;集群外的客戶端需要使用 kubectl Porxy 進(jìn)行反向代理來(lái)訪問(wèn) API server。

cAdvisor: 在 Node 節(jié)點(diǎn)運(yùn)行的 Kubelet 服務(wù)中內(nèi)嵌了一個(gè) cAdvisor 服務(wù),cAdvisor 是谷歌的開(kāi)源項(xiàng)目,用于實(shí)時(shí)監(jiān)控 Docker 上運(yùn)行的容器的性能指標(biāo)。

除了這些核心組件,還有一些推薦的服務(wù):

Kube-DNS:負(fù)責(zé)為整個(gè)集群提供 DNS 服務(wù)。

Heapster:提供資源監(jiān)控服務(wù)。

Dashboard:提供 GUI。

Fluentd-ES:提供集群日志系統(tǒng)。

….

分層架構(gòu)

Kubernetes 有類似于 Linux 的分層架構(gòu),如下圖所示:

基礎(chǔ)設(shè)施層:runtime、網(wǎng)絡(luò)、存儲(chǔ)等

核心層:Kubernetes 最核心的功能,對(duì)外提供 API 構(gòu)建高層的應(yīng)用,對(duì)內(nèi)提供插件式應(yīng)用執(zhí)行環(huán)境。

應(yīng)用層:部署(無(wú)狀態(tài)、有狀態(tài)應(yīng)用、Job等)和路由(服務(wù)發(fā)現(xiàn)、負(fù)載均衡等)

管理層:系統(tǒng)度量(如基礎(chǔ)設(shè)施、容器和網(wǎng)絡(luò)的度量),自動(dòng)化(如自動(dòng)擴(kuò)展、動(dòng)態(tài) Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)

接口層:kubectl 命令行工具、客戶端 SDK 以及集群聯(lián)邦

生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng),可以劃分為兩個(gè)范疇。

Kubernetes 外部:日志、監(jiān)控、配置管理、CI、CD、Workflow、FaaS、OTS應(yīng)用、ChatOps 等

Kubernetes 內(nèi)部:CRI、CNI、CSI、鏡像倉(cāng)庫(kù)、Cloud Provider、集群自身的配置和管理等。

參考資料

https://kubernetes.io/docs/co...

https://github.com/kubernetes...

https://kubernetes.feisky.xyz...

https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32724.html

相關(guān)文章

  • 數(shù)人云|當(dāng)K8S遇上微服務(wù)-京東金融PaaS平臺(tái)思考實(shí)踐

    摘要:平臺(tái)上的微服務(wù)架構(gòu)應(yīng)用再來(lái)看一下我眼中的基于當(dāng)前最流行的微服務(wù)架構(gòu)的設(shè)計(jì)是什么樣的,即我們平臺(tái)上要運(yùn)行的典型應(yīng)用是什么樣的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的數(shù)人云Container Meetup上,張龍老師做了《基于Kubernetes的PaaS平臺(tái)的設(shè)計(jì)和思考》的精彩分享,分別...

    Imfan 評(píng)論0 收藏0
  • Kubernetes 如何打贏容器之戰(zhàn)?

    摘要:此時(shí),一些聰明的技術(shù)公司紛紛跟進(jìn),推出了自家的容器集群管理項(xiàng)目,并且稱之為。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。管理集群的所有行為例如應(yīng)用調(diào)度改變應(yīng)用的狀態(tài),擴(kuò)縮容,更新降級(jí)應(yīng)用等。 showImg(https://segmentfault.com/img/remote/1460000018689306); 阿里妹導(dǎo)讀:Kubernetes 近幾年很熱門,在各大技術(shù)論壇上被...

    shiguibiao 評(píng)論0 收藏0
  • LC3視角:Kubernetes下日志采集、存儲(chǔ)處理技術(shù)實(shí)踐

    摘要:下需要為每個(gè)單獨(dú)進(jìn)行采集配置采集日志目錄,采集規(guī)則,存儲(chǔ)目標(biāo)等,不易維護(hù)。日志服務(wù)的日志架構(gòu)實(shí)踐我們提出基于阿里云日志服務(wù)的日志處理架構(gòu),用以補(bǔ)充社區(qū)的方案,來(lái)嘗試解決場(chǎng)景下日志處理的一些細(xì)節(jié)體驗(yàn)問(wèn)題。 摘要: 在Kubernetes服務(wù)化、日志處理實(shí)時(shí)化以及日志集中式存儲(chǔ)趨勢(shì)下,Kubernetes日志處理上也遇到的新挑戰(zhàn),包括:容器動(dòng)態(tài)采集、大流量性能瓶頸、日志路由管理等問(wèn)題。本文...

    Guakin_Huang 評(píng)論0 收藏0
  • 從 Pods 和 Nodes 的出生入死詳解 Kubernetes 的控制邏輯

    摘要:祈使式的腳本很難長(zhǎng)期地對(duì)系統(tǒng)狀態(tài)進(jìn)行自動(dòng)維護(hù)。這些事件包括的創(chuàng)建消亡的更新例如標(biāo)簽副本數(shù)量等。每當(dāng)上述事件發(fā)生,這個(gè)事件所牽扯到的具體的對(duì)象就會(huì)被放入這個(gè)工作隊(duì)列中。 本期文章來(lái)自才云科技(Caicloud)CEO 張?chǎng)蔚募夹g(shù)原創(chuàng)。導(dǎo)言:Kubernetes 是一個(gè)龐大的軟件系統(tǒng),欲從源碼層精通 Kubernetes 的進(jìn)階學(xué)習(xí)者往往會(huì)經(jīng)歷 Kubernetes:從入門到放棄 的挫敗...

    yhaolpz 評(píng)論0 收藏0
  • 個(gè)推微服務(wù)網(wǎng)關(guān)架構(gòu)實(shí)踐

    摘要:一方面,網(wǎng)關(guān)是個(gè)推微服務(wù)體系對(duì)外的唯一入口另一方面,網(wǎng)關(guān)中實(shí)現(xiàn)了很多后端服務(wù)的共性需求,避免了重復(fù)建設(shè)。個(gè)推微服務(wù)網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)個(gè)推微服務(wù)主要是基于和進(jìn)行實(shí)踐的。下圖是個(gè)推微服務(wù)體系的架構(gòu)圖。 作者:個(gè)推應(yīng)用平臺(tái)基礎(chǔ)架構(gòu)高級(jí)研發(fā)工程師 阿飛 在微服務(wù)架構(gòu)中,不同的微服務(wù)可以有不同的網(wǎng)絡(luò)地址,各個(gè)微服務(wù)之間通過(guò)互相調(diào)用完成用戶請(qǐng)求,客戶端可能通過(guò)調(diào)用N個(gè)微服務(wù)的接口完成一個(gè)用戶請(qǐng)求。因...

    MockingBird 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<