還能再漲23%!AI寵兒NVIDIA成大摩明年首選AMD FSR 4.0將與RX 9070 XT顯卡同步登場(chǎng)羅永浩細(xì)紅線最新進(jìn)展,暫別AR,迎來AI Jarvis構(gòu)建堅(jiān)實(shí)數(shù)據(jù)地基,南京打造可信數(shù)據(jù)空間引領(lǐng)數(shù)字城市建設(shè)下單前先比價(jià)不花冤枉錢 同款圖書京東價(jià)低于抖音6折日媒感慨中國電動(dòng)汽車/智駕遙遙領(lǐng)先:本田、日產(chǎn)、三菱合并也沒戲消委會(huì)吹風(fēng)機(jī)品質(zhì)檢測(cè)結(jié)果揭曉 徠芬獨(dú)占鰲頭 共話新質(zhì)營銷力,2024梅花數(shù)據(jù)峰會(huì)圓滿落幕索尼影像專業(yè)服務(wù) PRO Support 升級(jí),成為會(huì)員至少需注冊(cè) 2 臺(tái) α 全畫幅相機(jī)、3 支 G 大師鏡頭消息稱vivo加碼電池軍備競賽:6500mAh 旗艦機(jī)+7500mAh中端機(jī)寶馬M8雙門轎跑車明年年初將停產(chǎn),后續(xù)無2026款車型比亞迪:2025 款漢家族車型城市領(lǐng)航智駕功能開啟內(nèi)測(cè)雷神預(yù)告2025年首次出席CES 將發(fā)布三款不同技術(shù)原理智能眼鏡realme真我全球首發(fā)聯(lián)發(fā)科天璣 8400 耐玩戰(zhàn)神共創(chuàng)計(jì)劃iQOO Z9 Turbo長續(xù)航版手機(jī)被曝電池加大到6400mAh,搭驍龍 8s Gen 3處理器普及放緩 銷量大跌:曝保時(shí)捷將重新評(píng)估電動(dòng)汽車計(jì)劃來京東參與榮耀Magic7 RSR 保時(shí)捷設(shè)計(jì)預(yù)售 享365天只換不修國補(bǔ)期間電視迎來換機(jī)潮,最暢銷MiniLED品牌花落誰家?美團(tuán)旗下微信社群團(tuán)購業(yè)務(wù)“團(tuán)買買”宣布年底停運(yùn)消息稱微軟正與第三方廠商洽談,試圖合作推出Xbox游戲掌機(jī)設(shè)備
  • 首頁 > 數(shù)據(jù)存儲(chǔ)頻道 > 數(shù)據(jù)庫頻道 > 數(shù)據(jù)庫

    Airbnb的動(dòng)態(tài) Kubernetes 集群擴(kuò)縮

    2022年08月26日 18:54:21   來源:David Morrison

      Airbnb 基礎(chǔ)設(shè)施的一個(gè)重要作用是保證我們的云能夠根據(jù)需求上升或下降進(jìn)行自動(dòng)擴(kuò)縮容。我們每天的流量波動(dòng)都非常大,需要依靠動(dòng)態(tài)擴(kuò)縮容來保證服務(wù)的正常運(yùn)行。

      為了支持?jǐn)U縮容,Airbnb 使用了 Kubernetes 編排系統(tǒng),并且使用了一種基于 Kubernetes 的服務(wù)配置接口[1]。

      本文我們將討論如何使用 Kubernetes Cluster Autoscaler 來動(dòng)態(tài)調(diào)整集群的大小,并著重介紹了我們?yōu)?Sig-Autoscalsing 社區(qū)[2]做出的貢獻(xiàn)。這些改進(jìn)增加了可定制性和靈活性,以滿足 Airbnb 獨(dú)特的業(yè)務(wù)需求。

      Airbnb 的 Kubernetes 集群

      過去幾年中,Airbnb 已經(jīng)將幾乎所有的在線服務(wù)從手動(dòng)編排的 EC2 實(shí)例遷移到了 Kubernetes。如今,我們?cè)诮賯(gè)集群中運(yùn)行了上千個(gè)節(jié)點(diǎn)來適應(yīng)這些工作負(fù)載。然而,這些變化并不是一蹴而就的。在遷移過程中,隨著新技術(shù)棧上的工作負(fù)載和流量越來越多,我們底層的 Kubernetes 集群也隨之變得越來越復(fù)雜。這些演變可以劃分為如下三個(gè)階段:

      階段 1:同質(zhì)集群,手動(dòng)擴(kuò)縮容

      在使用 Kubernetes 之前,每個(gè)服務(wù)實(shí)例都運(yùn)行在其所在的機(jī)器上,通過手動(dòng)分配足夠的容量來滿足流量增加的場(chǎng)景。每個(gè)團(tuán)隊(duì)的容量管理方式都不盡相同,且一旦負(fù)載下降,很少會(huì)取消配置。

      一開始我們的 Kubernetes 集群的配置相對(duì)比較簡單。我們有幾個(gè)集群,每個(gè)集群都有單獨(dú)的底層節(jié)點(diǎn)類型和配置,它們只運(yùn)行無狀態(tài)的在線服務(wù)。隨著服務(wù)開始遷移到 Kubernetes,我們開始在多租戶環(huán)境中運(yùn)行容器化的服務(wù)。這種聚合方式減少了資源浪費(fèi),并且將這些服務(wù)的容量管理整合到 Kuberentes 控制平面上。在這個(gè)階段,我們手動(dòng)擴(kuò)展我們的集群,但相比之前仍然有著顯著的提升。

      階段 2:多集群類型,獨(dú)立擴(kuò)縮容

      我們集群配置的第二個(gè)階段是因?yàn)楦鄻踊墓ぷ髫?fù)載而出現(xiàn)的,每個(gè)試圖在 Kubernetes 上運(yùn)行的工作負(fù)載都有著不同的需求。為了滿足這些需求,我們創(chuàng)建了一個(gè)抽象的集群類型。集群類型定義了集群的底層配置,這意味著集群類型的所有集群都是相同的,從節(jié)點(diǎn)類型到集群組件設(shè)置都是相同的。

      越來越多的集群類型導(dǎo)致出現(xiàn)了越來越多的集群,我們最初通過手動(dòng)方式來調(diào)節(jié)每個(gè)集群容量的方式,很快就變得崩潰了。為了解決這個(gè)問題,我們?yōu)槊總(gè)集群添加了 Kubernetes Cluster Autoscaler[3] 組件。該組件會(huì)基于pod requests來動(dòng)態(tài)調(diào)節(jié)集群的大小。如果一個(gè)集群的容量被耗盡,則 Cluster Autoscaler 會(huì)添加一個(gè)新的節(jié)點(diǎn)來滿足pending狀態(tài)的pods。同樣,如果在一段時(shí)間內(nèi)集群的某些節(jié)點(diǎn)的利用率偏低,則Cluster Autoscaler會(huì)移除這些節(jié)點(diǎn)。這種方式非常適合我們的場(chǎng)景,為我們節(jié)省了大約5%的總的云開銷,以及手動(dòng)擴(kuò)展集群的運(yùn)維開銷。

      階段 3:異構(gòu)集群,自動(dòng)擴(kuò)縮容

      當(dāng) Airbnb 的幾乎所有在線計(jì)算都轉(zhuǎn)移到 Kubernetes 時(shí),集群類型的數(shù)量已經(jīng)增長到 30 多個(gè)了,集群的數(shù)量也增加到了 100 多個(gè)。這種擴(kuò)展使得 Kubernetes 集群管理相當(dāng)乏味。例如,在集群升級(jí)時(shí)需要單獨(dú)對(duì)每種類型的集群進(jìn)行單獨(dú)測(cè)試。

      在第三個(gè)階段,我們會(huì)通過創(chuàng)建異構(gòu)集群來整合我們的集群類型,這些集群可以通過單個(gè) Kubernetes 控制平面來容納許多不同的工作負(fù)載。首先,這種方式極大降低了集群管理的開銷,因?yàn)閾碛懈、更通用的集群?huì)減少需要測(cè)試的配置數(shù)量。其次,現(xiàn)在大多數(shù) Airbnb 的服務(wù)已經(jīng)運(yùn)行在了 Kubernetes 集群上,每個(gè)集群的效率可以為成本優(yōu)化提供一個(gè)很大的杠桿。整合集群類型允許我們?cè)诿總(gè)集群中運(yùn)行不同的工作負(fù)載。這種工作負(fù)載類型的聚合(有些大,有些小)可以帶來更好的封裝和效率,從而提高利用率。通過這種額外的工作負(fù)載靈活性,我們可以有更多的空間來實(shí)施復(fù)雜的擴(kuò)展策略,而不是默認(rèn)的 Cluster Autoscaler 擴(kuò)展邏輯。具體來說就是我們計(jì)劃實(shí)現(xiàn)與 Airbnb 特定業(yè)務(wù)邏輯相關(guān)的擴(kuò)縮容邏輯。

      隨著對(duì)集群的擴(kuò)展和整合,我們實(shí)現(xiàn)了異構(gòu)(每個(gè)集群有多種實(shí)例類型),我們開始在擴(kuò)展期間實(shí)現(xiàn)特定的業(yè)務(wù)邏輯,并且意識(shí)到有必要對(duì)擴(kuò)縮容的行為進(jìn)行某些變更。下一節(jié)將描述我們是如何修改 Cluster Autoscaler,使其變得更加靈活。

      Cluster Autoscaler 的改進(jìn)

      自定義 gRPC 擴(kuò)展器

      我們對(duì) Cluster Autoscaler 所做的最重要的改進(jìn)是提供了一種新方法來確定要擴(kuò)展的節(jié)點(diǎn)組。在內(nèi)部,Cluster Autoscaler 會(huì)維護(hù)一系列映射到不同候選擴(kuò)容對(duì)象的節(jié)點(diǎn)組,它會(huì)針對(duì)當(dāng)前 Pending 狀態(tài)的 pods 執(zhí)行模擬調(diào)度,然后過濾掉不滿足調(diào)度要求的節(jié)點(diǎn)組。如果存在 Pending 的 pods,Cluster Autoscaler 會(huì)嘗試通過擴(kuò)展集群來滿足這些 pods。所有滿足 pod 要求的節(jié)點(diǎn)組都會(huì)被傳遞給一個(gè)名為 Expander 的組件。

      Expander 負(fù)責(zé)根據(jù)需求進(jìn)一步過濾節(jié)點(diǎn)組。Cluster Autoscaler 有大量內(nèi)置的擴(kuò)展器選項(xiàng),每個(gè)選型都有不同的處理邏輯。例如,默認(rèn)是隨機(jī)擴(kuò)展器,它會(huì)隨機(jī)選擇可用的節(jié)點(diǎn)組。另一個(gè)是 Airbnb 曾經(jīng)使用過的 優(yōu)先級(jí)擴(kuò)展器[4],它會(huì)根據(jù)用戶指定的分級(jí)優(yōu)先級(jí)列表來選擇需要擴(kuò)展的節(jié)點(diǎn)組。

      當(dāng)我們使用異構(gòu)集群邏輯的同時(shí),我們發(fā)現(xiàn)默認(rèn)的擴(kuò)展器無法在成本和實(shí)例類型選擇方面滿足我們復(fù)雜的業(yè)務(wù)需求。

      假設(shè),我們想要實(shí)現(xiàn)一個(gè)基于權(quán)重的優(yōu)先級(jí)擴(kuò)展器。目前的優(yōu)先級(jí)擴(kuò)展器僅允許用戶為節(jié)點(diǎn)組設(shè)置不同的等級(jí),這意味著它會(huì)始終以確定的順序來擴(kuò)展節(jié)點(diǎn)組。如果某個(gè)等級(jí)有多個(gè)節(jié)點(diǎn)組,則會(huì)隨機(jī)選擇一個(gè)節(jié)點(diǎn)組;跈(quán)重的優(yōu)先級(jí)策略可以支持在同一個(gè)等級(jí)下設(shè)置兩個(gè)節(jié)點(diǎn)組,其中 80% 的時(shí)間會(huì)擴(kuò)展一個(gè)節(jié)點(diǎn)組,另外 20% 的時(shí)間會(huì)擴(kuò)展另一個(gè)節(jié)點(diǎn)組。但默認(rèn)并不支持基于權(quán)重的擴(kuò)展器。

      除了當(dāng)前支持的擴(kuò)展器的某些限制外,還有一些操作上的問題:

      Cluster Autoscaler 的發(fā)布流水線比較嚴(yán)格,在合并到上游之前,需要花大量時(shí)間來審核變更。但我們的業(yè)務(wù)邏輯和所需的擴(kuò)展策略是在不斷變化的。能夠滿足當(dāng)前需求的擴(kuò)展器并不一定能夠滿足未來的需求。

      我們的業(yè)務(wù)邏輯是與 Airbnb 關(guān)聯(lián)的,其他用戶則沒有這種業(yè)務(wù)邏輯。因此我們實(shí)現(xiàn)的特定邏輯并不一定對(duì)上游用戶有用。

      所以我們對(duì) Cluster Autoscaler 中的新擴(kuò)展器類型提出了一些要求:

      我們希望擴(kuò)展器是可擴(kuò)展的,能夠被其他用戶使用。其他用戶在使用默認(rèn)的 Expanders 可能會(huì)遇到類似的限制,我們希望提供一個(gè)通用的解決方案,并回饋上游。

      我們的解決方案應(yīng)該能夠獨(dú)立于 Cluster Autoscaler 部署,這樣可以讓我們能夠響應(yīng)快速變更的業(yè)務(wù)需求。

      我們的解決方案應(yīng)該能夠融入 Kubernetes Cluster Autoscaler 生態(tài)系統(tǒng),這樣就無需一直維護(hù)一個(gè) Cluster Autoscale 的分支。

      鑒于這些需求,我們提出了一種設(shè)計(jì),將擴(kuò)展職責(zé)從 Cluster Autoscaler 的核心邏輯中分離出來。我們?cè)O(shè)計(jì)了一種可插拔的 自定義擴(kuò)展器[5],它實(shí)現(xiàn)了gRPC客戶端(類似 custom cloud provider[6] ),該自定義擴(kuò)展器分為兩個(gè)組件。

      第一個(gè)組件是內(nèi)置到 Cluster Autoscaler 中的 gRPC 客戶端,這個(gè) Expander 與 Cluster Autoscaler 中的其他擴(kuò)展器遵循相同的接口,負(fù)責(zé)將 Cluster Autoscaler 中的有效節(jié)點(diǎn)組信息轉(zhuǎn)換為定義好的 protobuf 格式(見下文),并接收來自gRPC 服務(wù)端的輸出,將其轉(zhuǎn)換回 Cluster Autoscaler 要擴(kuò)展的最終的可選列表。

      第二個(gè)組件是 gRPC 服務(wù)端,這需要由用戶實(shí)現(xiàn),該服務(wù)端作為一個(gè)獨(dú)立的應(yīng)用或服務(wù)運(yùn)行。通過客戶端傳遞的信息以及復(fù)雜的擴(kuò)展邏輯來選擇需要擴(kuò)容的節(jié)點(diǎn)組。當(dāng)前通過 gRPC 傳遞的 protobuf 消息是 Cluster Autoscaler 中傳遞給 Expander 的內(nèi)容的(略微)轉(zhuǎn)換版本。

      在前面的例子中,可以非常容易地實(shí)現(xiàn)加權(quán)隨機(jī)優(yōu)先級(jí)擴(kuò)展器,方法是讓服務(wù)器從優(yōu)先級(jí)列表中讀取,并通過 confimap 讀取權(quán)重百分比,然后進(jìn)行相應(yīng)的選擇。

      我們的實(shí)現(xiàn)還包含一個(gè)故障保護(hù)選項(xiàng)。建議使用該選項(xiàng)將 多個(gè)擴(kuò)展器[7] 作為參數(shù)傳遞給 Cluster Autoscaler。使用該選擇后,如果服務(wù)端出現(xiàn)故障,Cluster Autoscaler 仍然能夠使用一個(gè)備用的擴(kuò)展器進(jìn)行擴(kuò)展。

      由于服務(wù)端作為一個(gè)獨(dú)立的應(yīng)用運(yùn)行,因此可以在 Cluster Autoscaler 外開發(fā)擴(kuò)展邏輯,且 gRPC 服務(wù)端可以根據(jù)用戶需求實(shí)現(xiàn)自定義,因此這種方案對(duì)整個(gè)社區(qū)來說也非常有用。

      在內(nèi)部,從 2022 年開始,Airbnb 就一直在使用這種方案來擴(kuò)縮容所有的集群,期間一直沒有出現(xiàn)任何問題。它允許我們動(dòng)態(tài)地選擇何時(shí)去擴(kuò)展特定的節(jié)點(diǎn)組來滿足 Airbnb 的業(yè)務(wù)需求,從而實(shí)現(xiàn)了我們開發(fā)一個(gè)可擴(kuò)展的自定義擴(kuò)展器。

      我們的自定義擴(kuò)展器在今年早些時(shí)候被上游 Cluster Autoscaler 接受,并將在下一個(gè)版本 (v1.24.0) 版本中可以使用。

      總結(jié)

      在過去的四年里,Airbnb 在我們的 Kubernetes 集群配置中取得了長足的進(jìn)步。通過在 Cluster Autoscaler 中開發(fā)和引入更加成熟的擴(kuò)展器,我們已經(jīng)能夠?qū)崿F(xiàn)圍繞成本和多實(shí)例類型開發(fā)復(fù)雜的、特定業(yè)務(wù)的擴(kuò)展策略目標(biāo),同時(shí)還向社區(qū)貢獻(xiàn)了一些有用的功能。

      文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請(qǐng)謹(jǐn)慎對(duì)待。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。

    即時(shí)

    新聞

    明火炊具市場(chǎng):三季度健康屬性貫穿全類目

    奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。

    企業(yè)IT

    重慶創(chuàng)新公積金應(yīng)用,“區(qū)塊鏈+政務(wù)服務(wù)”顯成效

    “以前都要去窗口辦,一套流程下來都要半個(gè)月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關(guān)材料,僅幾秒鐘,重慶市民曾某的賬戶就打進(jìn)了21600元。

    3C消費(fèi)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,高能實(shí)力,創(chuàng)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準(zhǔn)的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實(shí)質(zhì)性的幫助,雙十一期間低至2799元,性價(jià)比很高,簡直是創(chuàng)作者們的首選。