新聞中心
拓?fù)涓兄崾?
FEATURE STATE: Kubernetes v1.23 [beta]

成都創(chuàng)新互聯(lián)公司成立于2013年,先為改則等服務(wù)建站,改則等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為改則企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
拓?fù)涓兄崾?nbsp;包含客戶怎么使用服務(wù)端點(diǎn)的建議,從而實(shí)現(xiàn)了拓?fù)涓兄穆酚晒δ堋?nbsp;這種方法添加了元數(shù)據(jù),以啟用 EndpointSlice 和/或 Endpoints 對(duì)象的調(diào)用者, 這樣,訪問(wèn)這些網(wǎng)絡(luò)端點(diǎn)的請(qǐng)求流量就可以在它的發(fā)起點(diǎn)附近就近路由。
例如,你可以在一個(gè)地域內(nèi)路由流量,以降低通信成本,或提高網(wǎng)絡(luò)性能。
“拓?fù)涓兄崾尽碧匦蕴幱?nbsp;Beta 階段,并且默認(rèn)情況下未啟用。 要試用此特性,你必須啟用 ?
TopologyAwareHints?特性門控。
動(dòng)機(jī)
Kubernetes 集群越來(lái)越多的部署到多區(qū)域環(huán)境中。 拓?fù)涓兄崾?nbsp;提供了一種把流量限制在它的發(fā)起區(qū)域之內(nèi)的機(jī)制。 這個(gè)概念一般被稱之為 “拓?fù)涓兄酚伞薄?nbsp;在計(jì)算 服務(wù)(Service) 的端點(diǎn)時(shí), EndpointSlice 控制器會(huì)評(píng)估每一個(gè)端點(diǎn)的拓?fù)洌ǖ赜蚝蛥^(qū)域),填充提示字段,并將其分配到某個(gè)區(qū)域。 集群組件,例如kube-proxy 就可以使用這些提示信息,并用他們來(lái)影響流量的路由(傾向于拓?fù)渖舷噜彽亩它c(diǎn))。
使用拓?fù)涓兄崾?
你可以通過(guò)把注解 ?service.kubernetes.io/topology-aware-hints? 的值設(shè)置為 ?auto?, 來(lái)激活服務(wù)的拓?fù)涓兄崾竟δ堋?nbsp;這告訴 EndpointSlice 控制器在它認(rèn)為安全的時(shí)候來(lái)設(shè)置拓?fù)涮崾尽?nbsp;重要的是,這并不能保證總會(huì)設(shè)置提示(hints)。
工作原理
此特性啟用的功能分為兩個(gè)組件:EndpointSlice 控制器和 kube-proxy。 本節(jié)概述每個(gè)組件如何實(shí)現(xiàn)此特性。
EndpointSlice 控制器
此特性開(kāi)啟后,EndpointSlice 控制器負(fù)責(zé)在 EndpointSlice 上設(shè)置提示信息。 控制器按比例給每個(gè)區(qū)域分配一定比例數(shù)量的端點(diǎn)。 這個(gè)比例來(lái)源于此區(qū)域中運(yùn)行節(jié)點(diǎn)的 可分配 CPU 核心數(shù)。 例如,如果一個(gè)區(qū)域擁有 2 CPU 核心,而另一個(gè)區(qū)域只有 1 CPU 核心, 那控制器將給那個(gè)有 2 CPU 的區(qū)域分配兩倍數(shù)量的端點(diǎn)。
以下示例展示了提供提示信息后 EndpointSlice 的樣子:
apiVersion: discovery.K8S.io/v1
kind: EndpointSlice
metadata:
name: example-hints
labels:
kubernetes.io/service-name: example-svc
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "10.1.2.3"
conditions:
ready: true
hostname: pod-1
zone: zone-a
hints:
forZones:
- name: "zone-a"kube-proxy
kube-proxy 組件依據(jù) EndpointSlice 控制器設(shè)置的提示,過(guò)濾由它負(fù)責(zé)路由的端點(diǎn)。 在大多數(shù)場(chǎng)合,這意味著 kube-proxy 可以把流量路由到同一個(gè)區(qū)域的端點(diǎn)。 有時(shí),控制器從某個(gè)不同的區(qū)域分配端點(diǎn),以確保在多個(gè)區(qū)域之間更平均的分配端點(diǎn)。 這會(huì)導(dǎo)致部分流量被路由到其他區(qū)域。
保護(hù)措施
Kubernetes 控制平面和每個(gè)節(jié)點(diǎn)上的 kube-proxy,在使用拓?fù)涓兄崾竟δ芮埃瑫?huì)應(yīng)用一些保護(hù)措施規(guī)則。 如果沒(méi)有檢出,kube-proxy 將無(wú)視區(qū)域限制,從集群中的任意節(jié)點(diǎn)上選擇端點(diǎn)。
- 端點(diǎn)數(shù)量不足: 如果一個(gè)集群中,端點(diǎn)數(shù)量少于區(qū)域數(shù)量,控制器不創(chuàng)建任何提示。
- 不可能實(shí)現(xiàn)均衡分配: 在一些場(chǎng)合中,不可能實(shí)現(xiàn)端點(diǎn)在區(qū)域中的平衡分配。 例如,假設(shè) zone-a 比 zone-b 大兩倍,但只有 2 個(gè)端點(diǎn), 那分配到 zone-a 的端點(diǎn)可能收到比 zone-b多兩倍的流量。 如果控制器不能確定此“期望的過(guò)載”值低于每一個(gè)區(qū)域可接受的閾值,控制器將不指派提示信息。 重要的是,這不是基于實(shí)時(shí)反饋。所以對(duì)于單獨(dú)的端點(diǎn)仍有可能超載。
- 一個(gè)或多個(gè)節(jié)點(diǎn)信息不足: 如果任一節(jié)點(diǎn)沒(méi)有設(shè)置標(biāo)簽 ?
topology.kubernetes.io/zone?, 或沒(méi)有上報(bào)可分配的 CPU 數(shù)據(jù),控制平面將不會(huì)設(shè)置任何拓?fù)涓兄崾荆?nbsp;繼而 kube-proxy 也就不能通過(guò)區(qū)域過(guò)濾端點(diǎn)。 - 一個(gè)或多個(gè)端點(diǎn)沒(méi)有設(shè)置區(qū)域提示: 當(dāng)這類事情發(fā)生時(shí), kube-proxy 會(huì)假設(shè)這是正在執(zhí)行一個(gè)從/到拓?fù)涓兄崾镜霓D(zhuǎn)移。 在這種場(chǎng)合下過(guò)濾Service 的端點(diǎn)是有風(fēng)險(xiǎn)的,所以 kube-proxy 回撤為使用所有的端點(diǎn)。
- 不在提示中的區(qū)域: 如果 kube-proxy 不能根據(jù)一個(gè)指示在它所在的區(qū)域中發(fā)現(xiàn)一個(gè)端點(diǎn), 它回撤為使用所有節(jié)點(diǎn)的端點(diǎn)。當(dāng)你的集群新增一個(gè)新的區(qū)域時(shí),這種情況發(fā)生概率很高。
限制
- 當(dāng) Service 的 ?
externalTrafficPolicy?或 ?internalTrafficPolicy?設(shè)置值為 ?Local?時(shí), 拓?fù)涓兄崾竟δ懿豢捎谩?nbsp;你可以在一個(gè)集群的不同服務(wù)中使用這兩個(gè)特性,但不能在同一個(gè)服務(wù)中這么做。 - 這種方法不適用于大部分流量來(lái)自于一部分區(qū)域的服務(wù)。 相反的,這里假設(shè)入站流量將根據(jù)每個(gè)區(qū)域中節(jié)點(diǎn)的服務(wù)能力按比例的分配。
- EndpointSlice 控制器在計(jì)算每一個(gè)區(qū)域的容量比例時(shí),會(huì)忽略未就緒的節(jié)點(diǎn)。 在大量節(jié)點(diǎn)未就緒的場(chǎng)景下,這樣做會(huì)帶來(lái)非預(yù)期的結(jié)果。
- EndpointSlice 控制器在計(jì)算每一個(gè)區(qū)域的部署比例時(shí),并不會(huì)考慮 容忍度。 如果服務(wù)后臺(tái)的 Pod 被限制只能運(yùn)行在集群節(jié)點(diǎn)的一個(gè)子集上,這些信息并不會(huì)被使用。
- 這種方法和自動(dòng)擴(kuò)展機(jī)制之間不能很好的協(xié)同工作。例如,如果大量流量來(lái)源于一個(gè)區(qū)域, 那只有分配到該區(qū)域的端點(diǎn)才可用來(lái)處理流量。這會(huì)導(dǎo)致 Pod 自動(dòng)水平擴(kuò)展 要么不能拾取此事件,要么新增 Pod 被啟動(dòng)到其他區(qū)域。
當(dāng)前文章:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes拓?fù)涓兄崾?
標(biāo)題鏈接:http://m.fisionsoft.com.cn/article/dhdipse.html


咨詢
建站咨詢
