您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“基于Kubernetes服務(wù)機(jī)制怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“基于Kubernetes服務(wù)機(jī)制怎么理解”吧!
注冊(cè)中?作為一般的RPC/Web服務(wù)中的底層設(shè)施提供了服務(wù)進(jìn)程元數(shù)據(jù)(IP, Port, Interface, Group,Method等)存儲(chǔ),被Watch的功能,每個(gè)服務(wù)進(jìn)程均需接?同?組持久化的K/V介質(zhì)集群(?如: zookeeper,etcdv3等)。各進(jìn)程均需將本進(jìn)程的元數(shù)據(jù)存儲(chǔ)于注冊(cè)中?,并且能夠Watch到其他服務(wù)進(jìn)程的元數(shù)據(jù)變化(包括創(chuàng)建,更新等)。
Kubernetes作為容器集群化管理?案管理資源的維度可主觀的分為服務(wù)進(jìn)程管理和服務(wù)接?管理。服務(wù)進(jìn)程管理,主要體現(xiàn)?式為Pod設(shè)計(jì)模式加控制器模式,控制器保證具有特定標(biāo)簽(Kubernetes-Label)的Pod保持在恒定的數(shù)量(多刪,少補(bǔ))。服務(wù)接?管理,主要為Kubernetes-Service,該Service默認(rèn)為具有特定標(biāo)簽(KubernetesLabel)的Pod統(tǒng)?提供?個(gè)VIP(Kubernetes-ClusterIP)所有需要請(qǐng)求該組Pod的請(qǐng)求都會(huì)按照round-robin的負(fù)載策略轉(zhuǎn)發(fā)到真正提供服務(wù)的Pod。并且CoreDNS為該Kubernetes-Service提供集群內(nèi)唯?的域名。
Kubernetes-Service標(biāo)準(zhǔn)的資源對(duì)象具有的服務(wù)描述字段 中并未提供完整的服務(wù)進(jìn)程元數(shù)據(jù)字段因此,?法直接使?Kubernetes-Service進(jìn)?服務(wù)注冊(cè)與發(fā)現(xiàn)。
RPC/Web服務(wù)的服務(wù)注冊(cè)是基于每個(gè)進(jìn)程的,每個(gè)服務(wù)進(jìn)程均需進(jìn)?獨(dú)?的注冊(cè)。
Kubernetes-Service默認(rèn)為服務(wù)創(chuàng)建VIP,提供round-robin的負(fù)載策略也與RPC/Web服務(wù)?有的負(fù)載策略形成了沖突。
Kubernetes-Service與RPC/Web服務(wù)現(xiàn)有架構(gòu)的沖突導(dǎo)致RPC/Web服務(wù)在選擇服務(wù)注冊(cè)與發(fā)現(xiàn)的時(shí)候只能選擇放棄該資源對(duì)象。
RPC/Web服務(wù)既然選擇了每個(gè)RPC/Web服務(wù)進(jìn)程獨(dú)?注冊(cè),因此RPC/Web服務(wù)選擇將該進(jìn)程具有的獨(dú)有的元數(shù)據(jù)寫?運(yùn)?該RPC/Web服務(wù)進(jìn)程的Pod在Kubernetes中的Pod資源對(duì)象的描述信息中。
每個(gè)運(yùn)?RPC/Web服務(wù)進(jìn)程的Pod將本進(jìn)程的元數(shù)據(jù)寫?Kubernetes-Pod Annotations字段。為了避免與其他使?Annotations字段的Operator或者其他類型的控制器(Istio)的字段沖突,使?Key為 app.io/annotation value為具體存儲(chǔ)的K/V對(duì)的數(shù)組的json編碼后的base64編碼。
apiVersion: v1kind: Podmetadata: annotations: app.io/annotation: 5LiN55So55yL5LqG5bCx5piv5LiA5Liq5paH5pys5Y2P6K6u
由于每個(gè)RPC/Web服務(wù)的Pod均只負(fù)責(zé)注冊(cè)本進(jìn)程的元數(shù)據(jù),因此Annotations字段?度也不會(huì)因?yàn)檫\(yùn)?RPC/Web服務(wù)進(jìn)程的Pod數(shù)量增加?增加。
解決掉了服務(wù)注冊(cè)問題,接下來需要解決的是服務(wù)發(fā)現(xiàn)的問題。Kubernetes Api-Server提供了Watch的功能,可以觀察特定namespace甚?整個(gè)集群內(nèi)各類資源的變化。RPC/Web服務(wù)為了避免RPC/Web服務(wù)進(jìn)程watch到與RPC/Web服務(wù)進(jìn)程?關(guān)的Pod的變化,RPC/Web服務(wù)將watch的條件限制在當(dāng)前Pod所在的namespace,以及 watch 具有 app.io/label Value為app.io-value 的Pod。在Watch到對(duì)應(yīng)Pod的變化后實(shí)時(shí)更新本地Cache,并通過Registry提供的Subscribe通知建?在注冊(cè)中?之上的服務(wù)集群管理,或者其他功能。
啟動(dòng)RPC/Web服務(wù)的Deployment或其他類型控制器使?Kubernetes Downward-Api將本Pod所在namespace通過環(huán)境變量的形式注?RPC/Web服務(wù)進(jìn)程。
RPC/Web服務(wù)進(jìn)程的Pod啟動(dòng)后通過環(huán)境變量獲得當(dāng)前的namespace以及該P(yáng)od名稱, 調(diào)?
Kubernetes-Apiserver PATCH 功能為本Pod添加Key為app.io/label Value為app.io-value的label。
RPC/Web服務(wù)進(jìn)程調(diào)?Kubernetes-Apiserver 將本進(jìn)程的元數(shù)據(jù)通過PATCH接?寫?當(dāng)前Pod的Annotations字段。
RPC/Web服務(wù)進(jìn)程 LIST 當(dāng)前namespace下其他具有同樣標(biāo)簽的Pod,并解碼對(duì)應(yīng)的Annotations字段獲取其他Pod的信息。
RPC/Web服務(wù)進(jìn)程 WATCH 當(dāng)前namespace下其他具有同樣標(biāo)簽的Pod的Annotations的字段變化。
到此,相信大家對(duì)“基于Kubernetes服務(wù)機(jī)制怎么理解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。