自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鐘成:Kubernetes的核心設(shè)計(jì)實(shí)現(xiàn)

企業(yè)動態(tài)
華為PaaS開發(fā)部高級工程師鐘成對黃玉奇的發(fā)言也做了補(bǔ)充。他表示,華為第一次嘗試去構(gòu)筑PaaS生態(tài)圈,希望能有更多的開發(fā)者關(guān)注這個平臺。在鐘成的演講中,他主要與眾開發(fā)者探討了圍繞Kubernetes的核心設(shè)計(jì)實(shí)現(xiàn)的多個技術(shù)細(xì)節(jié),如怎么落地、在網(wǎng)絡(luò)和存儲環(huán)節(jié)如何操作、華為針對做哪些內(nèi)容做了改動。社區(qū)應(yīng)用的親和性和反親和性這些內(nèi)容都是首次對外披露。

杭州是一座極有包容性的城市,古韻清雅的街道景點(diǎn)隨處可見,現(xiàn)代建筑群設(shè)計(jì)感十足,傳統(tǒng)底蘊(yùn)與現(xiàn)代科技被這座古城兼容并蓄,***融合。HDG華為開發(fā)者匯,就將杭州作為第四站,5位講師***揭秘華為的CloudOpera、PaaS、融合視頻3個生態(tài)圈,技術(shù)干貨無私分享,聽眾疑問現(xiàn)場解答,思想的小火花一直在碰撞,參會的開發(fā)者大呼過癮。

華為PaaS開發(fā)部高級工程師鐘成對黃玉奇的發(fā)言也做了補(bǔ)充。他表示,華為***次嘗試去構(gòu)筑PaaS生態(tài)圈,希望能有更多的開發(fā)者關(guān)注這個平臺。在鐘成的演講中,他主要與眾開發(fā)者探討了圍繞Kubernetes的核心設(shè)計(jì)實(shí)現(xiàn)的多個技術(shù)細(xì)節(jié),如怎么落地、在網(wǎng)絡(luò)和存儲環(huán)節(jié)如何操作、華為針對做哪些內(nèi)容做了改動。社區(qū)應(yīng)用的親和性和反親和性這些內(nèi)容都是***對外披露。

[[169857]]

現(xiàn)場實(shí)錄如下:

我廢話也不多說,直接開始講了,我也沒有什么特別可介紹的,我叫鐘成,也是華為的,2012實(shí)驗(yàn)室的。

剛才黃玉奇已經(jīng)把Kubernetes主要的背景都介紹了,它有什么夠能或者怎么做,我這里稍微再展開一些,講一些關(guān)于它底層設(shè)計(jì)的事。從大的方向來講,k8s這個東西是應(yīng)運(yùn)而生的,它出現(xiàn)在現(xiàn)在這個時代是因?yàn)楹芏嗪芏嗥髽I(yè)發(fā)現(xiàn)自己有很多計(jì)算機(jī),有很多集群在機(jī)房里面,但是并沒有非常好的手段管理它。傳統(tǒng)的軟件開發(fā)是一種單體式的開發(fā),這些軟件力度非常粗,比較大,而且要的東西比較長。換成現(xiàn)在這個時代會變成一種互聯(lián)網(wǎng)式的開發(fā),就是我會把我的過多軟件都微服務(wù)化,把這個邏輯打的比較碎,打的比較散,發(fā)布的周期可以變短。以前可能是做一個軟件,做一個系統(tǒng),你要做一兩年?,F(xiàn)在一個功能可能一天或者一周就會生成一次,這方面就會有一些優(yōu)點(diǎn)和缺點(diǎn),這里都會講,就不詳細(xì)說了。

這個是國外的一個組織對PaaS的定義,主要是完成這么幾個功能,一個是資源獲取自動化,語言跟框架的自動化,以及運(yùn)維管理的自動化。從解決集群管理這個角度來說,業(yè)界是有好幾個方案,對于集群管理來說主要就是調(diào)度器的設(shè)計(jì),當(dāng)你把這個下完之后,你怎么決定這個應(yīng)用到底跑在這個集群的什么地方。這里面列了有五種比較典型的方案,***種方案就是所謂的單體調(diào)度器的方案,就是我在這個系統(tǒng)中有一個調(diào)度器,由它來決定我這個應(yīng)用部署到什么地方。這種方案像目前為止Kubernetes就在采用這種方案。

第二種方案是我去采用兩層式的調(diào)度框架,下面這一層我只管資源,管到資源之后往上去報(bào)。比如說當(dāng)上面請求資源的時候,我會給它挑出來往上報(bào),上面的幾個東西去挑,上面的幾個調(diào)度器去選。如果上面的調(diào)度器覺得這臺機(jī)器合適,那就拿去用。這就是myDOS的一個思路,myDOS就是Kubernetes。

第三個則是一個共享狀態(tài)的調(diào)度方案,這個方案是我把所有集群的狀態(tài)全部都同步到各個調(diào)度器里面去,由各個調(diào)度器進(jìn)行決策,決策完了之后我往下試圖進(jìn)行部署。由于上面我看到的這些東西都是一樣的,你***合下來的就需要有一個沖突解決,避免多個角度器之間互相打架,這也是一種方案。

還有一種方案是所謂的分布式調(diào)度,這種分布式調(diào)度我沒有一個中央的調(diào)度器,只是我在中間任何一點(diǎn)都可以調(diào)度一些東西,我任何一臺機(jī)器上都可以決定我是不是要接受這個應(yīng)用,是不是要跑這個服務(wù)。這個調(diào)度其看起來可能比較散,是它其實(shí)是很有用的?,F(xiàn)在在亞馬遜的(03:57)里面就采用這種調(diào)度方案,對于非常短的一個任務(wù),它的本身生命周期只有三四秒,如果你再通過一個比較復(fù)雜的調(diào)度器,花個十秒鐘去調(diào)度的話,就比較得不償失了。

第五種是一種混合式的方案,我把***種跟第四種混合在一起。

這個是我后面列的表,各個系統(tǒng)調(diào)度方案的對應(yīng)表。包括它的一些調(diào)度的力度,多調(diào)度器,以及重調(diào)度的機(jī)器。

這個是k8s的一些優(yōu)勢,已經(jīng)講過。然后講一下k8s的一些設(shè)計(jì)理念,它是一個全功能的,該了網(wǎng)絡(luò)、服務(wù)發(fā)現(xiàn)、負(fù)載均衡和資源管理這些東西。你可以認(rèn)為它是一個集成商的操作系統(tǒng),有了這個操作系統(tǒng)以后,用心就不用操心這些底層的應(yīng)用到底怎么被調(diào)度,怎么被運(yùn)行,你只要向它提交任務(wù)就可以了。這個我覺得是k8s比較大的思路,包括網(wǎng)絡(luò),包括下面的這些資源調(diào)度,全部都是它進(jìn)行管理的。而且它沒有任何綁定,可以支持多種IaaS提供商。

這個我也不怎么講了,這里有一個簡單的動畫,當(dāng)你創(chuàng)建一個IS的時候會選擇一個節(jié)點(diǎn),然后把它布起來。如果這個節(jié)點(diǎn)上的容器或者(06:21)死掉的話,會它進(jìn)行遷移,遷移到另外一臺機(jī)器上面去。

這個是k8s的網(wǎng)絡(luò)模型,這里稍微復(fù)雜一點(diǎn),但是也是可以看得出來。當(dāng)我在Pods部署了一組應(yīng)用之后,我怎么從外部去訪問它。我會定義一個Frontend Service這么一個東西,這個Service會對應(yīng)下面的這些容器。這里有三個容器,這三個容器可以進(jìn)行訪問。第二個Service則是一個Redis Service,這個Service是給內(nèi)部使用的,不是對外使用的。內(nèi)部可能又有三個容器Pods的實(shí)例進(jìn)行互相之間的訪問。

目前k8s的網(wǎng)絡(luò)訪問方式有四種,一個是ClusterIP,就是我在集群內(nèi)部定義一個跟我現(xiàn)在網(wǎng)站完全不一樣的IP,這個IP只有在內(nèi)部可以訪問,它是通過IP(07:31),你可以認(rèn)為它造出一個IP,這個IP內(nèi)部會進(jìn)行合適的路由。第二個是Nodport,就是說我在集群的每個物理機(jī)上,每個部署的節(jié)點(diǎn)上面我去開一個端口,這個端口是由我的k8s的(07:44)進(jìn)行管理,當(dāng)你外部有流量訪問這個節(jié)點(diǎn)上的端口的時候,會把這個節(jié)點(diǎn)上的流量進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)到運(yùn)營的Pods上面去,這是第二種網(wǎng)絡(luò)方式。第三種是我結(jié)合Dodeport的這種功能,我在上面再放一層loadBalancer,類似于像ELB,我通過這個ELB訪問所有節(jié)點(diǎn)上的某個具體的端口,再去訪問具體的Service。

接下來我會談一下k8s的一些核心機(jī)制,這個會稍微偏向于代碼一些。這張大家在上面也看到過,就是list-watch目的。前面大黃那邊有一張圖,就是k8s是一個典型的中心式的架構(gòu),所有的數(shù)據(jù)都是存在中心的API Service上面,API Service后面存了ETCD。這個架構(gòu)在分布式集群里面是比較少見的,一般的分布式集群的做法是什么呢,我會寫很多個進(jìn)程在很多機(jī)器上面,我這些進(jìn)程之間互相通過消息隊(duì)列。連接完了之后,A進(jìn)程做一件事情,做完之后把這個結(jié)果扔到隊(duì)列里面去,然后用B進(jìn)程進(jìn)行這個操作,***再到C進(jìn)程。你可以認(rèn)為是一環(huán)扣一環(huán),是消息隊(duì)列的模式。但是Kubernetes的做法有點(diǎn)不一樣,它的核心思想是我把所有的數(shù)據(jù)都放到ETCD里面去,由一個強(qiáng)的分布式數(shù)據(jù)庫來進(jìn)行存儲,保證這個數(shù)據(jù)的強(qiáng)一致性,這是***個。

第二個我這些組建之間互相怎么通信呢?我通過中心的API Service進(jìn)行通信。這個通信方式和一般的生產(chǎn)者、消費(fèi)者也不大一樣,前面我講的是生產(chǎn)者、消費(fèi)者模型,就是A生產(chǎn),B消費(fèi)。A處理了這個消息之后,我把它存到數(shù)據(jù)庫里面去,就是下面的ETCD,ETCD會通知所有關(guān)注這個消息的人,把這個消息發(fā)給他,讓這些人去處理。我們可以從這里面看到,當(dāng)我從U客戶端創(chuàng)建一個pods之后,可能是創(chuàng)建一個Replicaset之后,它就會收到Replicaset創(chuàng)建的消息,然后它就會再去創(chuàng)建一個pods,你創(chuàng)建這個pods之后,這些pod其實(shí)是沒有被調(diào)度的。這時候由于一些變化,就會知道這些pods沒有調(diào)度,對它進(jìn)行處理,處理完之后去改變pod的狀態(tài),后面再這樣分拉下去。這種方式list-watch跟那個不是很一樣,理論上這個數(shù)據(jù)面比較廣,如果是消息隊(duì)列的話,A生產(chǎn)什么B就必須得消費(fèi)什么。但是list-watch的方式是,我所有的客戶端都可以關(guān)心自己想關(guān)心的東西,我可以通過watch這種方式去找到自己關(guān)心的那一部分,我可以關(guān)心node或者關(guān)心pods,我有選擇權(quán),所有的客戶端都有選擇權(quán)。

這里會稍微涉及到一些代碼,大家看代碼有問題嗎,簡單講一點(diǎn)。這個代碼也很簡單,我在客戶端就是起了一個函數(shù),這個函數(shù)就是給它提供一組,你可以認(rèn)為這就是一個http發(fā)起請求的一個函數(shù)。當(dāng)你收到這個apiService這邊發(fā)生變化的事件之后,就會調(diào)度你這里的三個函數(shù),就是我發(fā)生這個事件是增加事件,還是更新事件,還是刪除事件。也就是說當(dāng)我發(fā)起list-watch之后,apiService會不停的把事件發(fā)過來,這是在同一條http連接上面,它會不停的把事件發(fā)過來。發(fā)過來之后,我Client不需要捕捉每一條事件,我只要把我的處理函數(shù)掛在這個鉤子上面,這個就是它的一個框架,掛在這個鉤子上面,當(dāng)有新的事件過來之后,我這里會做相應(yīng)的處理。同時我會在底層保存一份數(shù)據(jù)的全樣數(shù)據(jù)的副本。這個是客戶端的代碼。

服務(wù)端的機(jī)制也是比較類似,我會在底層也存儲一個store,當(dāng)有http數(shù)據(jù)過來的時候,它會在本地保存一個滑動窗口,類似于CCD那個滑動窗口,每次事件發(fā)生了,就會給每個Client做一個相應(yīng)通知。

前面一個過程就是整個k8s list-watch的一個機(jī)制,這個我認(rèn)為是它跟傳統(tǒng)分布式集群軟件***的區(qū)別,就是它底層的通信機(jī)制不一樣。后面則是一些具體調(diào)度器的機(jī)制,k8s的調(diào)度器我這里大致的講了一下當(dāng)你有一個pods要被調(diào)度的時候它會怎么做。它***步就會辨認(rèn)這個集群中所有的節(jié)點(diǎn),先去找哪些節(jié)點(diǎn)是不是合適。合適的意思就是說它的資源足不足夠,能不能夠有足夠的網(wǎng)絡(luò),足夠的帶寬,先把我實(shí)在沒有辦法布的機(jī)器都過濾掉。第二步則是進(jìn)行打分,如果我有一千臺機(jī)器,里面有一百臺我這個應(yīng)用都可以布,我***給這一百個中間選一個。我怎么選呢?就是我給這一百個節(jié)點(diǎn)進(jìn)行打分。打分的依據(jù)包括了一些親和性或者反親和性的算法,也包括一些資源算法。也就是說k8s現(xiàn)在調(diào)度器的機(jī)制是先進(jìn)行過濾,然后進(jìn)行排序打分的模式。

這個就是過濾跟排序的一些算法,這些算法其實(shí)都是千差變化的,就是說你要想做的話,也可以實(shí)現(xiàn)一個k8s的調(diào)度器。就是你可以自己中間插入一些函數(shù),我想檢查哪些端口,或者有些什么條件之類的。其實(shí)很多業(yè)務(wù)邏輯都是寫在這個地方的,就是你可以自己去選擇這個集群怎么進(jìn)行部署。

這個就是講高可靠,這個就是那個社區(qū)的方案,接上面的那個問題,就是k8s怎么實(shí)現(xiàn)自己的高可靠。它的想法比較簡單,就是我把a(bǔ)piService分成多份,每一份都可以進(jìn)行獨(dú)立的訪問。前面會掛一個為load balancer,就是我所有的工作節(jié)點(diǎn)都經(jīng)過這個load balancer來訪問apiService。底層的ETCD,自身采用(14:56)的協(xié)議進(jìn)行數(shù)據(jù)同步。就是你的APIService從本質(zhì)上來說是無狀態(tài)的,而調(diào)度器和控制器目前還沒有辦法做到真正的多調(diào)度,或者是多控制。這個也是受制于前面的list-watch的機(jī)制,因?yàn)樗举|(zhì)上是所有的調(diào)度器或者是資源管理器得到的這個消費(fèi)者數(shù)據(jù)是一樣的,所以目前來說暫時還沒有能夠進(jìn)行拆分。最近我在社區(qū)里面跟ETCD的開發(fā)者進(jìn)行討論,我們能不能改善這個機(jī)制,讓我們這個集群把所有真正的調(diào)度和控制全部可以多副本。現(xiàn)在只能通過分布式鎖,我是有單調(diào)度器和單控制器,就是每種類型的控制器只能有一個。

后面過一下社區(qū)的方向,這方面聯(lián)邦我就不講了,前面大黃講過了,這是聯(lián)邦的一個創(chuàng)建過程,這個也不講了。應(yīng)用親和和反親和,大家知道這個意思就可以了,這是一個需求,這個有好幾個層級。包括是集群聯(lián)邦層級,包括集群內(nèi)部的層級,其實(shí)都會有。

這里講了一個我對不同pods進(jìn)行親和和反親和,這里是一些具體的案例,這個也不展開了,回頭可以具體去看。

這個是我們后面會投入的一些東西,華為這邊會做,也是我們在社區(qū)里面會做的,主要是集群的規(guī)模和性能,還有調(diào)度和重調(diào)度,以及集群聯(lián)邦,主要是三大塊。

后面我也做一個小小的廣告,左邊的是我們的微信號,后面是一個微信群,華為的微信群,大家可以在里面聊聊天,這個群是長期開設(shè)的。

責(zé)任編輯:藍(lán)雨淚 來源: 51CTO.com
相關(guān)推薦

2020-07-19 10:26:47

Kubernetes數(shù)據(jù)結(jié)構(gòu)

2016-01-04 11:18:00

KubernetesKubernetes概容器技術(shù)

2020-04-02 09:58:26

Kubernetes容器開發(fā)

2020-08-06 08:26:22

Kubernetes架構(gòu)開發(fā)

2020-08-06 08:16:26

Kubernetes架構(gòu)開源

2021-02-19 08:38:36

Kubernetes容器化分布式

2022-04-03 15:44:55

Vue.js框架設(shè)計(jì)設(shè)計(jì)與實(shí)現(xiàn)

2022-06-10 18:59:53

容器Kubernetes

2025-04-01 00:54:00

2016-06-06 17:48:07

2020-08-13 17:18:20

Kubernetes邊緣容器

2020-01-08 14:45:38

Kubernetes存儲架構(gòu)

2020-04-09 15:23:19

Kubernetes發(fā)布系統(tǒng)集群

2023-05-12 08:06:46

Kubernetes多云架構(gòu)

2021-01-11 09:33:37

Maven數(shù)目項(xiàng)目

2017-12-26 16:24:36

接口代碼數(shù)據(jù)

2023-09-05 23:38:36

Kubernetes集群

2023-06-14 08:49:22

PodKubernetes

2022-01-27 13:47:10

Kubernete命令Linux

2022-04-12 08:09:22

Nodejs前端面試題
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號