<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 EndpointSlice 擴(kuò)展 Kubernetes 網(wǎng)絡(luò)

          共 2920字,需瀏覽 6分鐘

           ·

          2021-08-06 07:11

          EndpointSlice 是一個(gè)新 API,它提供了 Endpoint API 可伸縮和可拓展的替代方案。EndpointSlice 會(huì)跟蹤 Service Pod 的 IP 地址、端口、readiness 和拓?fù)湫畔ⅰ?/span>

          在 Kubernetes v1.19 中,此功能將默認(rèn)啟用:從 EndpointSlice (不是 Endpoint)中讀取 kube-proxy。盡管這個(gè)更改看起來并不起眼,但實(shí)際上它能讓大型集群的可伸縮性得到顯著提高。另外,它還與 Kubernetes 未來版本中的重要新功能有關(guān),例如 Topology Aware Routing。

          K8sMeetup

          Endpoint API 可伸縮性限制

          如果使用 Endpoint API,Service 只有一個(gè) Endpoint 資源。這意味著它需要為 Service 的每個(gè) Pod 都存儲(chǔ)好 IP 地址和端口(網(wǎng)絡(luò)端點(diǎn)),這需要大量的 API 資源。另外,kube-proxy 會(huì)在每個(gè)節(jié)點(diǎn)上運(yùn)行,并監(jiān)控 Endpoint 資源的任何更新。如果 Endpoint 資源中有一個(gè)端口發(fā)生更改,那么整個(gè)對(duì)象都會(huì)分發(fā)到 kube-proxy 的每個(gè)實(shí)例。

          Endpoint API 另一個(gè)局限是,它會(huì)限制跟蹤 Service 的網(wǎng)絡(luò)端點(diǎn)數(shù)量。一般存儲(chǔ)在 etcd 中的對(duì)象默認(rèn)大小限制為 1.5MB。在某些情況下,它會(huì)將 Endpoint 資源限制為 5000 個(gè) Pod IP。對(duì)于大多數(shù)用戶而言,這沒什么關(guān)系,但是對(duì)于接近這個(gè)大小的 Service 而言,就有大問題了。
          為了說明這些問題的嚴(yán)重程度,這里舉一個(gè)簡(jiǎn)單的例子。如果一個(gè) Service 有 5000 個(gè) Pod,它如果有 1.5MB 的 Endpoint 資源。當(dāng)該列表中的某個(gè)網(wǎng)絡(luò)端點(diǎn)發(fā)生了變化,那么就要將完整的 Endpoint 資源分發(fā)給集群中的每個(gè)節(jié)點(diǎn)。在具有 3000 個(gè)節(jié)點(diǎn)的大型集群中,這會(huì)是個(gè)很大的問題。每次更新將跨集群發(fā)送 4.5GB 的數(shù)據(jù)(1.5MB*3000,即 Endpoint 大小 * 節(jié)點(diǎn)個(gè)數(shù)),并且每次端點(diǎn)更新都要發(fā)送這么多數(shù)據(jù)。想象一下,如果進(jìn)行一次滾動(dòng)更新,共有 5000 個(gè) Pod 全部被替換,那么傳輸?shù)臄?shù)據(jù)量將超過 22 TB。
          K8sMeetup

          EndpointSlice API 拆分 Endpoint

          EndpointSlice API 旨在通過類似于分片的方法來解決該問題。我們不跟蹤 Service Pod IP 的單個(gè) Endpoint 資源,而是將它們拆分為多個(gè)較小的 EndpointSlice。

          舉個(gè)例子,現(xiàn)在有 15 個(gè) Pod 在支持一個(gè) Service,那么就有跟蹤這些的一個(gè) Endpoint 資源。如果將 EndpointSlice 配置為每個(gè) EndpointSlice 存儲(chǔ) 5 個(gè)端點(diǎn),就得到了 3 個(gè)不同的 EndpointSlice:

          默認(rèn)情況下,EndpointSlice 每個(gè)存儲(chǔ)能多達(dá) 100 個(gè)端點(diǎn),我們可以使用 kube-controller-manager 的 --max-endpoints-per-slice 標(biāo)簽進(jìn)行配置。

          K8sMeetup

          EndpointSlice 提升 10 倍可伸縮性

          EndpointSlice API 大大提高了網(wǎng)絡(luò)的可伸縮性,因?yàn)楝F(xiàn)在添加或刪除 Pod 時(shí),只需更新 1 個(gè)小的 EndpointSlice。尤其是成百上千個(gè) Pod 支持單個(gè) Service 時(shí),差異將非常明顯。

          更重要的是,既然 Service 的所有 Pod IP 都不需要存儲(chǔ)在單個(gè)資源中,那么我們就不必?fù)?dān)心 etcd 中存儲(chǔ)對(duì)象的大小限制。EndpointSlice 可以用于擴(kuò)展到超過 10 萬個(gè)網(wǎng)絡(luò)端點(diǎn)的 Service。
          當(dāng)這些與 kube-proxy 的一些重大性能改進(jìn)結(jié)合在一起后,再大規(guī)模地使用 EndpointSlice 時(shí),用于端點(diǎn)更新的數(shù)據(jù)將大大減少,kube-proxy 還可以更快更新 iptables 和 ipvs 規(guī)則。這樣,Service 現(xiàn)在的可伸縮性能達(dá)到以前的至少 10 倍。
          K8sMeetup

          EndpointSlice 有關(guān)新功能

          作為 Kubernetes v1.16 中的 alpha 功能引入的 EndpointSlice 在 Kubernetes 未來版本中,會(huì)和一些令人興奮的新功能有關(guān),例如 dual-stack Service、topology aware routing 和 endpoint subsetting。

          Dual-stack Service 是一項(xiàng)與 EndpointSlice 一起開發(fā)的新功能。它們利用 IPv4 和 IPv6 地址提供 Service,并依靠 EndpointSlice 上的 addressType 字段按 IP 系列跟蹤這些地址。

          Topology aware routing 會(huì)更新 kube-proxy 以 prefer 同一區(qū)域或區(qū)域內(nèi)的路由請(qǐng)求。這使用了為 EndpointSlice 端點(diǎn)存儲(chǔ)的拓?fù)渥侄巍A硗猓壳斑€在探索 endpoint subsetting 的潛力,未來 kube-proxy 將只允許觀察 EndpointSlice 的子集。這可以與 topology aware routing 結(jié)合使用,這樣 kube-proxy 只需要監(jiān)控包含同一區(qū)域內(nèi)端點(diǎn)的 EndpointSlice,這將提供另一個(gè)非常顯著的可伸縮性改進(jìn)。

          K8sMeetup

          這對(duì) Endpoint API 意味著什么?

          盡管 EndpointSlice API 為 Endpoint API 提供了更強(qiáng)伸縮性的替代方案,但是 Endpoint API 目前還被認(rèn)為是普遍可用且穩(wěn)定的選擇。Endpoint API 最重要的更改計(jì)劃需要包括 truncate Endpoint,否則肯定會(huì)遇到可伸縮性問題。

          Endpoint API 不會(huì)就此消失,但許多新功能會(huì)依賴于 EndpointSlice API。為了利用 EndpointSlice 提供的可伸縮性和新功能,當(dāng)前在使用 Endpoint 的應(yīng)用程序可能會(huì)在未來考慮使用 EndpointSlice。
          原文地址:https://kubernetes.io/blog/2020/09/02/scaling-kubernetes-networking-with-endpointslices/


          K8S 進(jìn)階訓(xùn)練營(yíng)


           點(diǎn)擊屏末  | 即刻學(xué)習(xí)


          掃描二維碼獲取

          更多云原生知識(shí)





          k8s 技術(shù)圈

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐免费视频在线观看 | 日本女人毛片全网推荐免费看 | 免费黄片网站在线观看 | 国产免费无码精品视频网站 | 91精品国产99久久久久久 |