欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

超大規(guī)模商用K8s場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

作者 |?張曉宇(衷源)? 阿里云容器平臺技術專家

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設、成都網(wǎng)站設計與策劃設計,新縣網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:新縣等地區(qū)。新縣做網(wǎng)站價格咨詢:13518219792

導讀:資源利用率一直是很多平臺管理和研發(fā)人員關心的話題。本文作者通過阿里巴巴容器平臺團隊在這一領域的工作實踐,整理出了一套資源利用提升的方案,希望能夠帶給大家?guī)硪恍┯懻摵退伎肌?/p>

引言

不知道大家有沒有過這樣的經(jīng)歷:當我們擁有了一套 Kubernetes 集群,然后開始部署應用的時候,我們應該給容器分配多少資源呢?

這很難說。由于 Kubernetes 自己的機制,我們可以理解容器的資源實質(zhì)上是一個靜態(tài)的配置。

  • 如果我發(fā)現(xiàn)資源不足,為了分配給容器更多資源,我們需要重建 Pod;
  • 如果分配冗余的資源,那么我們的 worker node 節(jié)點似乎又部署不了多少容器。

試問,我們能做到容器資源的按需分配嗎?接下來,我們將在本次分享中和大家一起進行探討這個問題的答案。

生產(chǎn)環(huán)境中的真實挑戰(zhàn)

首先請允許我們根據(jù)我們的實際情況拋出我們實際生產(chǎn)環(huán)境的挑戰(zhàn)?;蛟S大家還記得 2018 年的天貓雙 11,這一天的總成交額達到了 2135 億。由此一斑可窺全豹,能夠支撐如此龐大規(guī)模的交易量背后的系統(tǒng),其應用種類和數(shù)量應該是怎樣的一種規(guī)模。

在這種規(guī)模下,我們常常聽到的容器調(diào)度,如:容器編排,負載均衡,集群擴縮容,集群升級,應用發(fā)布,應用灰度等等這些詞,在被“超大規(guī)模集群”這個詞修飾后,都不再是件容易處理的事情。規(guī)模本身也就是我們最大的挑戰(zhàn)。如何運營和管理好這么一個龐大的系統(tǒng),并遵循業(yè)界 dev-ops 宣傳的那樣效果,猶如讓大象去跳舞。但是馬老師曾說過,大象就該干大象該干的事情,為什么要去跳舞呢。

Kubernetes 的幫助

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?cdn.com/a20c0dfb35bf47b45d1f7791daa53c7531222775.png">

大象是否可以跳舞,帶著這個問題,我們需要從淘寶、天貓等 APP 背后系統(tǒng)說起。

這套互聯(lián)網(wǎng)系統(tǒng)應用部署大致可分為三個階段,傳統(tǒng)部署,虛擬機部署和容器部署。相比于傳統(tǒng)部署,虛擬機部署有了更好的隔離性和安全性,但是在性能上不可避免的產(chǎn)生了大量損耗。而容器部署又在虛擬機部署實現(xiàn)隔離和安全的背景下,提出了更輕量化的解決方案。我們的系統(tǒng)也是沿著這么一條主航道上運行的。假設底層系統(tǒng)好比一艘巨輪,面對巨量的集裝箱---容器,我們需要一個優(yōu)秀的船長,對它們進行調(diào)度編排,讓系統(tǒng)這艘大船可以避開層層險阻,操作難度降低,且具備更多靈活性,最終達成航行的目的。

理想與現(xiàn)實

在開始之初,想到容器化和 Kubernetes 的各種美好場景,我們理想中的容器編排效果應該是這樣的:

  • 從容:我們的工程師更加從容的面對復雜的挑戰(zhàn),不再眉頭緊鎖而是更多笑容和自信;
  • 優(yōu)雅:每一次線上變更操作都可以像品著紅酒一樣氣定神閑,優(yōu)雅地按下執(zhí)行的回車鍵;
  • 有序:從開發(fā)到測試,再到灰度發(fā)布,一氣呵成,行云流水;
  • 穩(wěn)定:系統(tǒng)健壯性良好,任爾東西南北風,我們系統(tǒng)巋然不動。全年系統(tǒng)可用性 N 多個 9;
  • 高效:節(jié)約出更多人力,實現(xiàn)“快樂工作,認真生活”。

然而理想很豐滿,現(xiàn)實很骨感。迎接我們的卻是雜亂和形態(tài)各異的窘迫。

雜亂,是因為作為一個異軍突起的新型技術棧,很多配套工具和工作流的建設處于初級階段。Demo 版本中運行良好的工具,在真實場景下大規(guī)模鋪開,各種隱藏的問題就會暴露無遺,層出不窮。從開發(fā)到運維,所有的工作人員都在各種被動地疲于奔命。另外,“大規(guī)模鋪開”還意味著,要直接面對形態(tài)各異的生產(chǎn)環(huán)境:異構(gòu)配置的機器、復雜的需求,甚至是適配用戶的既往的使用習慣等等。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

除了讓人心力交瘁的混亂,系統(tǒng)還面臨著應用容器的各種崩潰問題:內(nèi)存不足導致的 OOM,CPU quota 分配太少,導致進程被 throttle,還有帶寬不足,響應時延大幅上升...甚至是交易量在面對訪問高峰時候由于系統(tǒng)不給力導致的斷崖式下跌等等。這些都使我們在大規(guī)模商用 Kubernetes 場景中積累非常多的經(jīng)驗。

直面問題

穩(wěn)定性

問題總要進行面對的。正如某位高人說過:如果感覺哪里不太對,那么肯定有些地方出問題了。于是我們就要剖析,問題究竟出在哪里。針對于內(nèi)存的 OOM,CPU 資源被 throttle,我們可以推斷我們給與容器分配的初始資源不足。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

資源不足就勢必造成整個應用服務穩(wěn)定性下降。例如上圖的場景:雖然是同一種應用的副本,或許是由于負載均衡不夠強大,或者是由于應用自身的原因,甚至是由于機器本身是異構(gòu)的,相同數(shù)值的資源,可能對于同一種應用的不同副本并具有相等的價值和意義。在數(shù)值上他們看似分配了相同的資源,然而在實際負載工作時,極有可能出現(xiàn)的現(xiàn)象是肥瘦不均的。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

而在資源 overcommit 的場景下,應用在整個節(jié)點資源不足,或是在所在的 CPU share pool 資源不足時,也會出現(xiàn)嚴重的資源競爭關系。資源競爭是對應用穩(wěn)定性最大的威脅之一。所以我們要盡力在生產(chǎn)環(huán)境中清除所有的威脅。

我們都知道穩(wěn)定性是件很重要的事情,尤其對于掌控上百萬容器生殺大權的一線研發(fā)人員?;蛟S不經(jīng)心的一個操作就有可能造成影響面巨大的生產(chǎn)事故。

因此,我們也按照一般流程做了系統(tǒng)預防和兜底工作。

  • 在預防維度,我們可以進行全鏈路的壓力測試,并且提前通過科學的手段預判應用需要的副本數(shù)和資源量。如果沒法準確預算資源,那就只采用冗余分配資源的方式了。
  • 在兜底維度,我們可以在大規(guī)模訪問流量抵達后,對不緊要的業(yè)務做服務降級并同時對主要應用進行臨時擴容。

但是對于陡然增加幾分鐘的突增流量,這么多組合拳的花費不菲,似乎有些不劃算?;蛟S我們可以提出一些解決方案,達到我們的預期。

資源利用率

回顧一下我們的應用部署情況:節(jié)點上的容器一般分屬多種應用,這些應用本身不一定,也一般不會同時處于訪問的高峰。對于混合部署應用的宿主機,如果能都錯峰分配上面運行容器的資源或許更科學。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

應用的資源需求可能就像月亮一樣有陰晴圓缺,有周期變化。例如在線業(yè)務,尤其是交易業(yè)務,它們在資源使用上呈現(xiàn)一定的周期性,例如:在凌晨、上午時,它的使用量并不是很高,而在午間、下午時會比較高。

打個比方:對于 A 應用的重要時刻,對于 B 應用可能不那么重要,適當打壓 B 應用,騰挪出資源給 A 應用,這是個不錯的選擇。這聽起來有點像是分時復用的感覺。但是如果我們按照流量峰值時的需求配置資源就會產(chǎn)生大量的浪費。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

除了對于實時性要求很高的在線應用外,我們還有離線應用和實時計算應用等:離線計算對于 CPU 、Memory 或網(wǎng)絡資源的使用以及時間不那么敏感,所以在任何時間段它都可以運行;實時計算,可能對于時間敏感性就會很高。

早期,我們業(yè)務是在不同的節(jié)點按照應用的類型獨立進行部署。從上面這張圖來看,如果它們進行分時復用資源,針對實時性這個需求層面,我們會發(fā)現(xiàn)它實際的最大使用量不是 2+2+1=5,而是某一時刻重要緊急應用需求量的最大值,也就是 3 。如果我們能夠數(shù)據(jù)監(jiān)測到每個應用的真實使用量,給它分配合理值,那么就能產(chǎn)生資源利用率提升的實際效果。

對于電商應用,對于采用了重量級 Java 框架和相關技術棧的 Web 應用,短時間內(nèi) HPA 或者 VPA 都不是件容易的事情。

先說 HPA,我們或許可以秒級拉起了 Pod,創(chuàng)建新的容器,然而拉起的容器是否真的可用呢。從創(chuàng)建到可用,可能需要比較久的時間,對于大促和搶購秒殺-這種訪問量“洪峰”可能僅維持幾分鐘或者十幾分鐘的實際場景,如果我們等到 HPA 的副本全部可用,可能市場活動早已經(jīng)結(jié)束了。

至于社區(qū)目前的 VPA 場景,刪掉舊 Pod,創(chuàng)建新 Pod,這樣的邏輯更難接受。所以綜合考慮,我們需要一個更實際的解決方案彌補 HPA 和 VPA 的在這一單機資源調(diào)度的空缺。

解決方案

交付標準

我們首先要對解決方案設定一個可以交付的標準那就是—— “既要穩(wěn)定性,也要利用率,還要自動化實施,當然如果能夠智能化那就更好”,然后再交付標準進行細化:

  • 安全穩(wěn)定:工具本身高可用。所用的算法和實施手段必須做到可控;
  • 業(yè)務容器按需分配資源:可以及時根據(jù)業(yè)務實時資源消耗對不太久遠的將來進行資源消耗預測,讓用戶明白業(yè)務接下來對于資源的真實需求;
  • 工具本身資源開銷?。汗ぞ弑旧碣Y源的消耗要盡可能小,不要成為運維的負擔;
  • 操作方便,擴展性強:能做到無需接受培訓即可玩轉(zhuǎn)這個工具,當然工具還要具有良好擴展性,供用戶 DIY;
  • 快速發(fā)現(xiàn) & 及時響應:實時性,也就是最重要的特質(zhì),這也是和HPA或者VPA在解決資源調(diào)度問題方式不同的地方。

設計與實現(xiàn)

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

上圖是我們最初的工具流程設計:當一個應用面臨很高的業(yè)務訪問需求時,體現(xiàn)在 CPU、Memory 或其他資源類型需求量變大,我們根據(jù) Data Collector 采集的實時基礎數(shù)據(jù),利用 Data Aggregator 生成某個容器或整個應用的畫像,再將畫像反饋給 Policy engine。 Policy engine 會瞬時快速修改容器 Cgroup 文件目錄下的的參數(shù)。

我們最早的架構(gòu)和我們的想法一樣樸實,在 kubelet 進行了侵入式的修改。雖然我們只是加了幾個接口,但是這種方式確實不夠優(yōu)雅。每次 kubenrnetes 升級,對于 Policy engine 相關組件升級也有一定的挑戰(zhàn)。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

為了做到快速迭代并和 Kubelet 解耦,我們對于實現(xiàn)方式進行了新的演進。那就是將關鍵應用容器化。這樣可以達到以下功效:

  • 不侵入修改 K8s 核心組件;
  • 方便迭代&發(fā)布;
  • 借助于 Kubernetes 相關的 QoS Class 機制,容器的資源配置,資源開銷可控。

當然在后續(xù)演進中,我們也在嘗試和 HPA,VPA 進行打通,畢竟這些和 Policy engine 存在著互補的關系。因此我們架構(gòu)進一步演進成如下情形。當 Policy engine 在處理一些更多復雜場景搞到無力時,上報事件讓中心端做出更全局的決策。水平擴容或是垂直增加資源。

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

下面我們具體討論一下 Policy engine 的設計。Policy engine 是單機節(jié)點上進行智能調(diào)度并執(zhí)行 Pod 資源調(diào)整的核心組件。它主要包括 api server,指揮中心 command center 和執(zhí)行層 executor。

  • 其中 api server 用于服務外界對于 policy engine 運行狀態(tài)的查詢和設置的請求;
  • command center 根據(jù)實時的容器畫像和物理機本身的負載以及資源使用情況,作出 Pod 資源調(diào)整的決策;
  • Executor 再根據(jù) command center 的決策,對容器的資源限制進行調(diào)整。同時,executor 也把每次調(diào)整的 revision info 持久化,以便發(fā)生故障時可以回滾。

指揮中心定期從 data aggregator 獲取容器的實時畫像,包括聚合的統(tǒng)計數(shù)據(jù)和預測數(shù)據(jù),首先判斷節(jié)點狀態(tài),例如節(jié)點磁盤異常,或者網(wǎng)絡不通,表示該節(jié)點已經(jīng)發(fā)生異常,需要保護現(xiàn)場,不再對Pod進行資源調(diào)整,以免造成系統(tǒng)震蕩,影響運維和調(diào)試。如果節(jié)點狀態(tài)正常,指揮中心會策略規(guī)則,對容器數(shù)據(jù)進行再次過濾。比如容器 CPU 率飆高,或者容器的響應時間超過安全閾值。如果條件滿足,則對滿足條件的容器集合給出資源調(diào)整建議,傳遞給executor。

在架構(gòu)設計上,我們遵循了以下原則:

  • 插件化:所有的規(guī)則和策略被設計為可以通過配置文件來修改,盡量與核心控制流程的代碼解耦,與 data collector 和 data aggregator 等其他組件的更新和發(fā)布解耦,提升可擴展性;

  • 穩(wěn)定,這包括以下幾個方面:

    • 控制器穩(wěn)定性。指揮中心的決策以不影響單機乃至全局穩(wěn)定性為前提,包括容器的性能穩(wěn)定和資源分配穩(wěn)定。例如,目前每個控制器僅負責一種 cgroup 資源的控制,即在同一時間窗口內(nèi),Policy engine 不同時調(diào)整多種資源,以免造成資源分配震蕩,干擾調(diào)整效果;
    • 觸發(fā)規(guī)則穩(wěn)定性。例如,某一條規(guī)則的原始觸發(fā)條件為容器的性能指標超出安全閾值,但是為避免控制動作被某一突發(fā)峰值觸發(fā)而導致震蕩,我們把觸發(fā)規(guī)則定制為:過去一段時間窗口內(nèi)性能指標的低百分位超出安全閾值;如果規(guī)則滿足,說明這段時間內(nèi)絕大部分的性能指標值都已經(jīng)超出了安全閾值,就需要觸發(fā)控制動作了;
    • 另外,與社區(qū)版? Vertical-Pod-Autoscaler 不同,Policy engine 不主動驅(qū)逐騰挪容器,而是直接修改容器的 cgroup 文件;
  • 自愈:資源調(diào)整等動作的執(zhí)行可能會產(chǎn)生一些異常,我們在每個控制器內(nèi)都加入了自愈回滾機制,保證整個系統(tǒng)的穩(wěn)定性;

  • 不依賴應用先驗知識:為所有不同的應用分別進行壓測、定制策略,或者提前對可能排部在一起的應用進行壓測,會導致巨大開銷,可擴展性降低。我們的策略在設計上盡可能通用,盡量采用不依賴于具體平臺、操作系統(tǒng)、應用的指標和控制策略。

在資源調(diào)整方面,Cgroup 支持我們對各個容器的 CPU、內(nèi)存、網(wǎng)絡和磁盤 IO 帶寬資源進行隔離和限制,目前我們主要對容器的 CPU 資源進行調(diào)整,同時在測試中探索在時分復用的場景下動態(tài)調(diào)整 memory limit 和 swap usage 而避免 OOM 的可行性;在未來我們將支持對容器的網(wǎng)絡和磁盤 IO 的動態(tài)調(diào)整。

調(diào)整效果

超大規(guī)模商用 K8s 場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?

上圖展示了我們在測試集群得到的一些實驗結(jié)果。我們把高優(yōu)先級的在線應用和低優(yōu)先級的離線應用混合部署在測試集群里。SLO 是 250ms,我們希望在線應用的 latency 的 95 百分位值低于閾值 250ms。

在實驗結(jié)果中可以看到:

  • 在大約90s前,在線應用的負載很低;latency 的均值和百分位都在 250ms 以下;
  • 到了? 90s后,我們給在線應用加壓,流量增加,負載也升高,導致在線應用 latency 的 95 百分位值超過了 SLO;
  • 在大約 150s 左右,我們的小步快跑控制策略被觸發(fā),漸進式地 throttle 與在線應用發(fā)生資源競爭的離線應用;
  • 到了大約 200s 左右,在線應用的性能恢復正常,latency 的 95 百分位回落到 SLO 以下。

這說明了我們的控制策略的有效性。

經(jīng)驗和教訓

下面我們總結(jié)一下在整個項目的進行過程中,我們收獲的一些經(jīng)驗和教訓,希望這些經(jīng)驗教訓能夠?qū)τ龅筋愃茊栴}和場景的人有所幫助。

  1. 避開硬編碼,組件微服務化,不僅便于快速演進和迭代,還有利于熔斷異常服務。
  2. 盡可能不要調(diào)用類庫中還是 alpha 或者 beta 特性的接口。 例如我們曾經(jīng)直接調(diào)用 CRI 接口讀取容器的一些信息,或者做一些更新操作,但是隨著接口字段或者方法的修改,共建有些功能就會變得不可用,或許有時候,調(diào)用不穩(wěn)定的接口還不如直接獲取某個應用的打印信息可能更靠譜。
  3. 基于 QoS 的資源動態(tài)調(diào)整方面:如我們之前所講,阿里集團內(nèi)部有上萬個應用,應用之間的調(diào)用鏈相當復雜。應用 A 的容器性能發(fā)生異常,不一定都是在單機節(jié)點上的資源不足或者資源競爭導致,而很有可能是它下游的應用 B、應用 C,或者數(shù)據(jù)庫、cache 的訪問延遲導致的。由于單機節(jié)點上這種信息的局限性,基于單機節(jié)點信息的資源調(diào)整,只能采用“盡力而為”,也就是 best effort 的策略了。在未來,我們計劃打通單機節(jié)點和中心端的資源調(diào)控鏈路,由中心端綜合單機節(jié)點上報的性能信息和資源調(diào)整請求,統(tǒng)一進行資源的重新分配,或者容器的重新編排,或者觸發(fā) HPA,從而形成一個集群級別的閉環(huán)的智能資源調(diào)控鏈路,這將會大大提高整個集群維度的穩(wěn)定性和綜合資源利用率。
  4. 資源v.s.性能模型:可能有人已經(jīng)注意到,我們的調(diào)整策略里,并沒有明顯地提出為容器建立“資源v.s.性能”的模型。這種模型在學術論文里非常常見,一般是對被測的幾種應用進行了離線壓測或者在線壓測,改變應用的資源分配,測量應用的性能指標,得到性能隨資源變化的曲線,最終用在實時的資源調(diào)控算法中。在應用數(shù)量比較少,調(diào)用鏈比較簡單,集群里的物理機硬件配置也比較少的情況下,這種基于壓測的方法可以窮舉到所有可能的情況,找到最優(yōu)或者次優(yōu)的資源調(diào)整方案,從而得到比較好的性能。但是在阿里集團的場景下,我們有上萬個應用,很多重點應用的版本發(fā)布也非常頻繁,往往新版本發(fā)布后,舊的壓測數(shù)據(jù),或者說資源性能模型,就不適用了。另外,我們的集群很多是異構(gòu)集群,在某一種物理機上測試得到的性能數(shù)據(jù),在另一臺不同型號的物理機上就不會復現(xiàn)。這些都對我們直接應用學術論文里的資源調(diào)控算法帶來了障礙。所以,針對阿里集團內(nèi)部的場景,我們采用了這樣的策略:不對應用進行離線壓測,獲取顯示的資源性能模型。而是建立實時的動態(tài)容器畫像,用過去一段時間窗口內(nèi)容器資源使用情況的統(tǒng)計數(shù)據(jù)作為對未來一小段時間內(nèi)的預測,并且動態(tài)更新;最后基于這個動態(tài)的容器畫像,執(zhí)行小步快跑的資源調(diào)整策略,邊走邊看,盡力而為。

總結(jié)與展望

總結(jié)起來,我們的工作主要實現(xiàn)了以下幾方面的收益:

  • 通過分時復用以及將不同優(yōu)先級的容器(也就是在線和離線任務)混合部署,并且通過對容器資源限制的動態(tài)調(diào)整,保證了在線應用在不同負載情況下都能得到足夠的資源,從而提高集群的綜合資源利用率。
  • 通過對單機節(jié)點上的容器資源的智能動態(tài)調(diào)整,降低了應用之間的性能干擾,保障高優(yōu)先級應用的性能穩(wěn)定性
  • 各種資源調(diào)整策略通過 Daemonset 部署,可以自動地、智能地在節(jié)點上運行,減少人工干預,降低了運維的人力成本。

展望未來,我們希望在以下幾個方面加強和擴展我們的工作:

  • 閉環(huán)控制鏈路:前面已經(jīng)提到,單機節(jié)點上由于缺乏全局信息,對于資源的調(diào)整有其局限性,只能盡力而為。未來,我們希望能夠打通與 HPA 和 VPA 的通路,使單機節(jié)點和中心端聯(lián)動進行資源調(diào)整,最大化彈性伸縮的收益。
  • 容器重新編排:即使是同一個應用,不同容器的負載和所處的物理環(huán)境也是動態(tài)變化的,單機上調(diào)整 pod 的資源,不一定能夠滿足動態(tài)的需求。我們希望單機上實時容器畫像,能夠為中心端提供更多的有效信息,幫助中心端的調(diào)度器作出更加智能的容器重編排決策。
  • 策略智能化:我們現(xiàn)在的資源調(diào)整策略仍然比較粗粒度,可以調(diào)整的資源也比較有限;后續(xù)我們希望讓資源調(diào)整策略更加智能化,并且考慮到更多的資源,比如對磁盤和網(wǎng)絡IO帶寬的調(diào)整,提高資源調(diào)整的有效性。
  • 容器畫像精細化:目前的容器畫像也比較粗糙,僅僅依靠統(tǒng)計數(shù)據(jù)和線性預測;刻畫容器性能的指標種類也比較局限。我們希望找到更加精確的、通用的、反映容器性能的指標,以便更加精細地刻畫容器當前的狀態(tài)和對不同資源的需求程度。
  • 查找干擾源:我們希望能找到在單機節(jié)點上找到行之有效的方案,來精準定位應用性能受損時的干擾源;這對策略智能化也有很大意義。

Q & A

Q1:直接修改 cgroup 容器一定會獲得資源嗎?
A1:容器技術隔離的技術基礎就是 cgroup 層面。在宿主機騰出足夠資源的情況下,給 cgroup 設置更大的值可以獲取更多的資源。同理,對于一般優(yōu)先級不高的應用,設置較低的 cgroup 資源值就會達到抑制容器運行的效果。

Q2:底層是如何區(qū)分在線和離線優(yōu)先級的?
A2:底層是無法自動獲取誰是在線,誰是離線,或者誰的優(yōu)先級高,誰的優(yōu)先級低的。這個我們可以通過各種 Kubernetes 提供的擴展實現(xiàn)。最簡單的是通過 label,Annotation 標識。當然通過擴展 QoS class 也是一種思路。社區(qū)版本的 QoS class設置太過于保守,給予用戶發(fā)揮的空間不大。我們通過這些方面也進行了增強。在合適的時候或許會推向社區(qū)。自動感知是個方向,感知誰是干擾源,感知誰是某種資源型應用,這塊我們還在研發(fā)中。做到真正的動態(tài),肯定是具備自動感知的智能系統(tǒng)。

Q3:“與社區(qū)版? Vertical-Pod-Autoscaler 不同,Policy engine 不主動驅(qū)逐騰挪容器,而是直接修改容器的 cgroup 文件”,想問一下,不主動驅(qū)逐的話,如果 Node 的資源達到上線了會怎么處理?
A3:這是一個好問題。首先這里要先區(qū)分是哪種資源,如果是 CPU 型的,我們可以調(diào)整低優(yōu)先級容器的 cgroup 下 cpu quota 的值,首先抑制低優(yōu)先級的容器對于 CPU 的爭搶。然后再適當上調(diào)高優(yōu)先級容器的相關資源值。如果是內(nèi)存型資源,這個不能直接去縮小低優(yōu)先級容器的 cgroup 值,否則會造成 OOM,對于學習內(nèi)存型資源的調(diào)整,我們會在其他分享中繼續(xù)討論。這個技術比較特殊。

Q4:只修改 cgroup,怎么保證 K8s 對單個物理機能夠分配更多的容器?
A4:文字直播有了一定說明,容器的資源消耗并非是一成不變的,很多時候它們的資源消耗呈現(xiàn)潮汐現(xiàn)象,相同的資源條件下部署更多應用,完成更多作業(yè)就是達到資源利用的最大化的效果。資源出現(xiàn)超賣才是我們這個主題討論的最大價值。

Q5:也就是說,低優(yōu)先級的容器,request 設置的比 limit 小很多,然后你們再動態(tài)的調(diào)整 cgroup?
A5:在現(xiàn)有 QoS 場景下,你可以理解被調(diào)整的 Pod 都是 burstable 的。但是我們并不是直接調(diào)整 Pod 元數(shù)據(jù)的 limit 的值,而是調(diào)整 limit 在 cgroup 反映的值,這個值在資源競爭緩和的時候還會被調(diào)整回去的。我們并不建議單機的 cgroup 數(shù)據(jù)和 etcd 的中心數(shù)據(jù)割裂太久。如果長期偏離,我們會像 VPA 發(fā)出警報,聯(lián)動 VPA 做調(diào)整。當然在容器運行的高峰期,任何重建容器的操作都是不明智的。

Q6:整體的理解就是你們開始就讓物理機超配了一定比例的 pod,然后通過策略動態(tài)調(diào)整容器的 cgroup 值?
A6:如果資源完全是富足冗余的,這個動態(tài)調(diào)整也有一定意義。就是并非資源用滿場景下,高優(yōu)先級應用會被干擾,實際上,當主機的 CPU 達到一定比例,打個比方例如 50%,應用的時延就變大。為了完全確保高優(yōu)先級應用的 SLO,犧牲低優(yōu)先級的 CPU 正常運行也是有價值的。

Q7:Policy engine 有沒有考慮開源?
A7:有計劃進行開源,Policy engine 更多的是和自身的應用屬性相關,電商應用或者大數(shù)據(jù)處理應用的策略都是不相同的,我們開源會首先開源框架和附帶一些簡單的策略,更多的策略可以用戶自定義。

Q8:我之前遇到的大部分應用都無法正確感知 cgroup 的配置,因此很多情況都需要在啟動參數(shù)里面根據(jù) cpu 或者 mem 設置參數(shù),那么也就是說即使改變了 cgroup 對于他們來說都無效,那么使用場景也就有限了
A8:限制容器的資源使用這個還是有價值的。限制低優(yōu)先級應用本身也可以提升高優(yōu)先級應用的 SLO,雖然效果沒有那么明顯。穩(wěn)定性的考量同樣也很重要。

Q9:Policy engine 目前在阿里的使用如何?在生產(chǎn)上有多上的規(guī)模使用這種方式進行動態(tài)調(diào)整?是否和社區(qū)的 HPA VPA 配合使用?
A9:?Policy engine 在阿里某些集群已經(jīng)使用。至于規(guī)模暫時無法透漏。涉及到很多組件之間的聯(lián)動,社區(qū)的 HPA 和 VPA 目前都不太能滿足我們的需求。因此阿里的 HPA 和 VPA 都是我們自行開發(fā)的,但是和社區(qū)的原理是一致的。阿里 HPA 的開源可以關注 Openkruise 社區(qū)。VPA 開源計劃我這里還沒有確切消息。

Q10:當單機節(jié)點資源不足以提供容器擴容時,目前是否可以進行 HPA 或 VPA 擴容呢?
A10:單機節(jié)點不足的時候,應用可以通過 HPA 進行增加副本應對。但是 VPA 如果選擇原節(jié)點進行更新的話,是失敗的。只能調(diào)度到其他資源豐富的節(jié)點。在流量陡升的場景下,重建容器未必能滿足需求,很可能導致雪崩,即重建過程中,整個應用其他未升級的副本接受更多流量,OOM 掉,新啟動的容器再瞬間被 OOM,所以重啟容器需要慎重。快速擴容(HPA)或者快速提升高優(yōu)先級資源,抑制低優(yōu)先級容器資源的方式效果更明顯。

關注『阿里巴巴云原生』公眾號,回復關鍵詞“1010”,可獲取本文 PPT。

“ 阿里巴巴云原生微信公眾號(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦云原生流行技術趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的技術公眾號?!?/strong>

分享文章:超大規(guī)模商用K8s場景下,阿里巴巴如何動態(tài)解決容器資源的按需分配問題?
URL分享:http://aaarwkj.com/article42/peeshc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、自適應網(wǎng)站、品牌網(wǎng)站建設全網(wǎng)營銷推廣、響應式網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

久久最新视频中文字幕| 精品一区二区三区高清| 中文字幕乱码日韩在线| 久久国产精品亚洲熟女66r| 中国毛片一区二区三区| 一区二区中文字幕精品| 亚洲精品污一区二区三区| 久久日韩精品人妻一区二区| 亚洲成人高清在线视频| 91免费视频精品麻豆| 亚洲av产在线精品亚洲第| 国产精品偷伦一区二区| 欧美激情三级一区二区| 中文字幕91在线播放| 麻豆国产国语精品三级在线观看| 青草成人在线视频观看| 国产精品亚洲欧美日韩在线播放| 欧美欧美欧美欧美在线| 亚洲精品成人在线国产| 91欧美精品综合在线| 熟女另类视频在线观看| 亚洲成人免费在线一区| 国产91人妻精品一区二区三区| av色狠狠一区二区三区| 两性色午夜视频免费网站| 国产精品一区欧美精品| 日韩电影一区二区在线观看中文字幕| 亚洲日本成人一区二区| 日韩精品少妇一区二区在线看| 国产av剧情免费在线观看| 亚洲综合日韩精品国产av| 久热视频这里只有精品99| 高清在线一区二区在线| 中文字幕人妻久久一区| 日本亚洲精品在线观看| 蜜臀91精品视频在线观看| 国产高清不卡午夜福利| 国产精品一区二区三区欧美| 国产精品国产三级国产av丨| 日本女优邻居人妻中文字幕| 日本成人午夜福利在线观看|