美團點評Kubernetes叢集管理實踐
背景
美團點評叢集管理與排程系統
美團點評在叢集管理和資源最佳化這條道路上已經“摸爬滾打”多年。2013年,開始構建基於傳統虛擬化技術的資源交付方式;2015年7月,開始建立完善的叢集管理與排程系統——HULK,目標是推動美團點評服務容器化;2016年,完成基於Docker容器技術自研實現了彈性伸縮能力,來提升交付速度和應對快速擴縮容的需求,實現彈性擴容、縮容,提升資源利用率,提升業務運維效率,合理有效的降低企業IT運維成本;2018年,開始基於Kubernetes來進行資源管理和排程,進一步提升資源的使用效率。
架構全覽
架構介紹
Kubernetes管理與實踐
叢集運營現狀
叢集規模:10萬+級別線上例項,多地域部署,還在不斷快速增長中。
業務的監控告警:叢集對應用的啟動和狀態資料進行採集,container-init自動整合業務監控資訊,業務程式毋需關注,做到可插拔、可配置。
資源的健康告警:從資源的角度對 Node、Pod和 Container等重要資料監控採集,及時發現它們的狀態資訊,例如 Node不可用、Container不斷重啟等等。
定時巡檢與對賬:每天自動對所有宿主機進行狀態檢查,包括剩餘磁碟量(資料卷)、D程式數量、宿主機狀態等,並對AppKey擴容資料和實際的Pod和容器資料同步校驗,及時發現不一致情況。
叢集資料視覺化:對當前叢集狀態,包括宿主機資源狀態、服務數、Pod數、容器化率、服務狀態、擴縮容資料等等視覺化;並提供了介面化的服務配置、宿主機下線以及Pod遷移操作入口。
容量規劃與預測:提前感知叢集資源狀態,預先準備資源;基於規則和機器學習的方式感知流量和高峰,保證業務正常、穩定、高效地執行。
Kubernetes最佳化與改造
Kube-Scheduler效能最佳化
我們有叢集在使用1.6版本的排程器,隨著叢集規模的不斷增長,舊版本的Kubernetes排程器(1.10之前版本)在效能和穩定性的問題逐漸凸顯,由於排程器的吞吐量低,導致業務擴容超時失敗,在規模近3000臺的叢集上,一次Pod的排程耗時在5s左右。Kubernetes的排程器是佇列化的排程器模型,一旦擴容高峰等待的Pod數量過多就會導致後面Pod的擴容超時。為此,我們對排程器效能進行了大幅度的最佳化,並取得了非常明顯的提升,根據我們的實際生產環境驗證,效能比最佳化前提升了400%以上。
預選失敗中斷機制
預選階段:硬性條件,過濾掉不滿足條件的節點,這個過程稱為 Predicates。這是固定先後順序的一系列過濾條件,任何一個 Predicate不符合則放棄該 Node。
優選階段:軟性條件,對透過的節點按照優先順序排序,稱之為 Priorities。每一個Priority都是一個影響因素,都有一定的權重。
選定階段:從優選列表中選擇優先順序最高的節點,稱為 Select。選擇的Node即為最終部署Pod的機器。
為此,我們提出了“預選失敗中斷機制”,即一旦某個預選條件不滿足,那麼該 Node即被立即放棄,後面的預選條件不再做判斷計算,從而大大減少了計算量,排程效能也大大提升。如下圖所示:
區域性最優解
Kubelet改造
風險可控性
可擴充套件性
跨Site同步:保證伺服器總能從就近的映象倉庫拉取到擴容用的映象,減少拉取時間,降低跨Site頻寬消耗。
基礎映象預分發:美團點評的基礎映象是構建業務映象的公共映象。業務映象層是業務的應用程式碼,通常比基礎映象小很多。在容器擴容的時候如果基礎映象已經在本地,就只需要拉取業務映象的部分,可以明顯的加快擴容速度。為達到這樣的效果,我們會把基礎映象事先分發到所有的伺服器上。
P2P映象分發:基礎映象預分發在有些場景會導致上千個伺服器同時從映象倉庫拉取映象,對映象倉庫服務和頻寬帶來很大的壓力。因此我們開發了映象P2P分發的功能,伺服器不僅能從映象倉庫中拉取映象,還能從其他伺服器上獲取映象的分片。
資源管理與最佳化
最佳化關鍵技術
服務畫像:對應用的CPU、記憶體、網路、磁碟和網路 I/O 容量和負載畫像,瞭解應用的特徵、資源規格和應用型別以及不同時間對資源的真實使用,然後從服務角度和時間維度進行相關性分析,從而進行整體排程和部署最佳化。
親和性和互斥性:哪些應用放在一起使整體計算能力比較少而吞吐能力比較高,它們就存在一定親和性;反之如果應用之間存在資源競爭或相互影響,則它們之間就存在著互斥性。
場景優先:美團點評的業務大都是基本穩定的場景,所以場景劃分很有必要。例如一類業務對延遲非常敏感,即使在高峰時刻也不允許有太多的資源競爭產生,這種場景就要避免和減少資源競爭引起的延遲,保證資源充足;一類業務在有些時間段需要的CPU資源可能會突破配置的上限,我們透過CPU Set化的方式讓這類業務共享這部分資源,以便能夠突破申請規格的機器資源限制,不僅服務能夠獲得更高的效能表現,同時也把空閒的資源利用了起來,資源使用率進一步提升。
彈性伸縮:應用部署做到流量預測、自動伸縮、基於規則的高低峰伸縮以及基於機器學習的伸縮機制。
精細化資源調配:基於資源共享和隔離技術做到了精細化的資源排程和分配,例如Numa繫結、任務優先順序、CPU Set化等等。
策略最佳化
排程策略的主要作用在兩方面,一方面是按照既定策略部署目標機器;二是能做到叢集資源的排布最優。
親和性:有呼叫關係和依賴的應用,或哪些應用放在一起能使整體計算能力比較少、吞吐能力比較高,這些應用間就存在一定親和性。我們的CPU Set化即是利用了對CPU的偏好構建應用的親和性約束,讓不同CPU偏好的應用互補。
互斥性:跟親和性相對,主要是對有競爭關係或業務干擾的應用在排程時儘量分開部署。
應用優先順序:應用優先順序的劃分是為我們解決資源競爭提供了前提。當前當容器發生資源競爭時,我們無法決策究竟應該讓誰獲得資源,當有了應用優先順序的概念後,我們可以做到,在排程層,限制單臺宿主機上重要應用的個數,減少單機的資源競爭,也為單機底層解決資源競爭提供可能;在宿主機層,根據應用優先順序分配資源,保證重要應用的資源充足,同時也可執行低優先順序應用。
打散性:應用的打散主要是為了容災,在這裡分為不同級別的打散。我們提供了不同級別的打散粒度,包括宿主機、Tor、機房、Zone等等。
隔離與獨佔:這是一類特殊的應用,必須是獨立使用一臺宿主機或虛擬機器隔離環境部署,例如搜尋團隊的業務。
特殊資源:特殊資源是滿足某些業務對GPU、SSD、特殊網路卡等特殊硬體需求。
線上叢集最佳化
線上叢集資源的最佳化問題,不像離線叢集那樣可以透過預知資源需求從而達到非常好的效果,由於未來需求的未知性,線上叢集很難在資源排布上達到離線叢集的效果。針對線上叢集的問題,我們從上層排程到底層的資源使用都採取了一系列的最佳化。
Numa繫結:主要是解決業務側反饋服務不穩定的問題,透過繫結Numa,將同一個應用的CPU和Memory繫結到最合適的Numa Node上,減少跨Node訪問的開銷,提升應用效能。
CPU Set化:將一組特性互補的應用繫結在同一組CPU上,從而讓他們能充分使用CPU資源。
應用錯峰:基於服務畫像資料為應用錯開高峰,減少資源競爭和相互干擾,提升業務SLA。
重排程:資源排布最佳化,用更少的資源提升業務效能和SLA;解決碎片問題,提升資源的分配率。
干擾分析:基於業務監控資料指標和容器資訊判斷哪些容器有異常,提升業務SLA,發現並處理異常應用。
結束語
當前,在以下幾個方面我們正在積極探索:
線上-離線業務混合部署,進一步提升資源使用效率。
智慧化排程,業務流量和資源使用感知排程,提升服務SLA。
高效能、強隔離和更安全的容器技術。
作者簡介
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559353/viewspace-2654762/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 美團叢集排程系統的雲原生實踐
- Druid SQL和Security在美團點評的實踐UISQL
- 京東雲Kubernetes叢集最佳實踐
- Kubernetes叢集健康檢查最佳實踐
- Kubernetes 叢集無損升級實踐
- 三艾雲 Kubernetes 叢集最佳實踐
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- kubernetes叢集管理命令(三)
- kubernetes實踐之一:Etcd3叢集搭建
- 美團點評基於 Flink 的實時數倉建設實踐
- 評書:《美團機器學習實踐》機器學習
- 美團點評Java實習面試Java面試
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- 實踐展示openEuler部署Kubernetes 1.29.4版本叢集
- Kubernetes 叢集升級指南:從理論到實踐
- 美團點評:2018年美團點評上半年營收同比增長91.2%營收
- kubernetes叢集管理常用命令一
- 下一個 Kubernetes 前沿:多叢集管理
- vivo大規模Kubernetes叢集自動化運維實踐運維
- vivo大規模 Kubernetes 叢集自動化運維實踐運維
- 高可用:美團點評智慧支付核心交易系統的可用性實踐
- influxDB叢集模式實踐UX模式
- kubernetes實踐之十八:叢集各模組之間的通訊
- Kubernetes 叢集和應用監控方案的設計與實踐
- Redis Manager 叢集管理與節點管理Redis
- 美團點評資料平臺Kerberos優化實戰ROS優化
- 美團點評攜手 PingCAP 開啟新一代資料庫深度實踐之旅PingCAP資料庫
- RabbitMQ叢集運維實踐MQ運維
- Docker Swarm 叢集搭建實踐DockerSwarm
- 掌握 Kubernetes 故障排除:有效維護叢集的優秀實踐和工具
- 《從 0 到 1:搭建一個完整的 Kubernetes 叢集》實踐踩坑
- kubernetes與web叢集Web
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- 以對話的形式管理你的Kubernetes叢集
- 美團點評廣告實時索引的設計與實現索引