本篇內(nèi)容主要講解“基于Kubernetes服務(wù)機(jī)制怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“基于Kubernetes服務(wù)機(jī)制怎么理解”吧!
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供蓮池網(wǎng)站建設(shè)、蓮池做網(wǎng)站、蓮池網(wǎng)站設(shè)計、蓮池網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、蓮池企業(yè)網(wǎng)站模板建站服務(wù),10年蓮池做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
注冊中?作為一般的RPC/Web服務(wù)中的底層設(shè)施提供了服務(wù)進(jìn)程元數(shù)據(jù)(IP, Port, Interface, Group,Method等)存儲,被Watch的功能,每個服務(wù)進(jìn)程均需接?同?組持久化的K/V介質(zhì)集群(?如: zookeeper,etcdv3等)。各進(jìn)程均需將本進(jìn)程的元數(shù)據(jù)存儲于注冊中?,并且能夠Watch到其他服務(wù)進(jìn)程的元數(shù)據(jù)變化(包括創(chuàng)建,更新等)。
Kubernetes作為容器集群化管理?案管理資源的維度可主觀的分為服務(wù)進(jìn)程管理和服務(wù)接?管理。服務(wù)進(jìn)程管理,主要體現(xiàn)?式為Pod設(shè)計模式加控制器模式,控制器保證具有特定標(biāo)簽(Kubernetes-Label)的Pod保持在恒定的數(shù)量(多刪,少補(bǔ))。服務(wù)接?管理,主要為Kubernetes-Service,該Service默認(rèn)為具有特定標(biāo)簽(KubernetesLabel)的Pod統(tǒng)?提供?個VIP(Kubernetes-ClusterIP)所有需要請求該組Pod的請求都會按照round-robin的負(fù)載策略轉(zhuǎn)發(fā)到真正提供服務(wù)的Pod。并且CoreDNS為該Kubernetes-Service提供集群內(nèi)唯?的域名。
Kubernetes-Service標(biāo)準(zhǔn)的資源對象具有的服務(wù)描述字段 中并未提供完整的服務(wù)進(jìn)程元數(shù)據(jù)字段因此,?法直接使?Kubernetes-Service進(jìn)?服務(wù)注冊與發(fā)現(xiàn)。
RPC/Web服務(wù)的服務(wù)注冊是基于每個進(jìn)程的,每個服務(wù)進(jìn)程均需進(jìn)?獨?的注冊。
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ù)注冊與發(fā)現(xiàn)的時候只能選擇放棄該資源對象。
RPC/Web服務(wù)既然選擇了每個RPC/Web服務(wù)進(jìn)程獨?注冊,因此RPC/Web服務(wù)選擇將該進(jìn)程具有的獨有的元數(shù)據(jù)寫?運?該RPC/Web服務(wù)進(jìn)程的Pod在Kubernetes中的Pod資源對象的描述信息中。
每個運?RPC/Web服務(wù)進(jìn)程的Pod將本進(jìn)程的元數(shù)據(jù)寫?Kubernetes-Pod Annotations字段。為了避免與其他使?Annotations字段的Operator或者其他類型的控制器(Istio)的字段沖突,使?Key為 app.io/annotation value為具體存儲的K/V對的數(shù)組的json編碼后的base64編碼。
apiVersion: v1kind: Podmetadata: annotations: app.io/annotation: 5LiN55So55yL5LqG5bCx5piv5LiA5Liq5paH5pys5Y2P6K6u
由于每個RPC/Web服務(wù)的Pod均只負(fù)責(zé)注冊本進(jìn)程的元數(shù)據(jù),因此Annotations字段?度也不會因為運?RPC/Web服務(wù)進(jìn)程的Pod數(shù)量增加?增加。
解決掉了服務(wù)注冊問題,接下來需要解決的是服務(wù)發(fā)現(xiàn)的問題。Kubernetes Api-Server提供了Watch的功能,可以觀察特定namespace甚?整個集群內(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到對應(yīng)Pod的變化后實時更新本地Cache,并通過Registry提供的Subscribe通知建?在注冊中?之上的服務(wù)集群管理,或者其他功能。
啟動RPC/Web服務(wù)的Deployment或其他類型控制器使?Kubernetes Downward-Api將本Pod所在namespace通過環(huán)境變量的形式注?RPC/Web服務(wù)進(jìn)程。
RPC/Web服務(wù)進(jìn)程的Pod啟動后通過環(huán)境變量獲得當(dāng)前的namespace以及該Pod名稱, 調(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,并解碼對應(yīng)的Annotations字段獲取其他Pod的信息。
RPC/Web服務(wù)進(jìn)程 WATCH 當(dāng)前namespace下其他具有同樣標(biāo)簽的Pod的Annotations的字段變化。
到此,相信大家對“基于Kubernetes服務(wù)機(jī)制怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!