《2019年騰訊基于Kubernetes的企業級容器云實踐.pdf》由會員分享,可在線閱讀,更多相關《2019年騰訊基于Kubernetes的企業級容器云實踐.pdf(24頁珍藏版)》請在三個皮匠報告上搜索。
1、騰訊基于kubernetes的企業級容器云實踐騰訊 專家工程師目錄 架構簡介 企業級容器云解決方案 Next企業級容器云架構產品功能企業級容器云解決方案企業級場景易用 全組件自動化部署、統一配置管理、多策略灰度升級 提供可視化、自動化的運維能力,降低使用者的人力成本和學習成本可靠 所有組件無單點;平臺本身支持熱升級;組件自身HA機制,如docker;多地域多可用區的容災設計 管理機掛掉:對應用無影響 計算節點掛掉:跨機遷移 健康探針 存活探針 就緒探針 負載均衡 重啟機制 區分異常原因 本地重啟/跨機重啟 黑名單機制 集群核心數據的備份和恢復 Etcd 核心數據庫 云盤機制保護應用數據 舉例:
2、1.4升級1.9版本 Pod Hash發生變化 Container名稱發生變化,點分隔改為了下劃線分隔 容器標簽發生變化pause容器的標簽io.kubernetes.container.name=POD改為io.kubernetes.docker.type=podsandboxio.kubernetes.container.restartCount改為annotation.io.kubernetes.container.restartCoun Cgroup目錄結構發生變化,新增Pod層級平臺容災應用容災數據容災企業內部各個集群灰度運營??煽抠Y源管理CPUMemoryDisk SpaceNet
3、work TXNetwork RXDisk IO(include buffer IO)GPU背景:廣告業務,8個集群,4個在線集群,4個離線集群,分布在四個地區:北京、天津、成都、深圳。需求:減少機器,降低成本。手段:在線離線集群做合并。問題:容器只能管理CPU和內存,不能對網絡和磁盤IO做管理,導致在線應用受離線業務影響。一次現網事故一個用戶需求可靠設計目標在某個cgroup網絡繁忙時,能保證其設定配額不會被其他cgroup擠占在某個cgroup沒有用滿其配額時,其他cgroup可以自動使用其空閑的部分帶寬在多個cgroup分享其他cgroup的空閑帶寬時,優先級高的優先;優先級相同時,配額
4、大的占用多,配額小的占用少盡量減少為了流控而主動丟包下圖是兩個進程都拼命爭搶網絡帶寬時的效果。兩個進程的帶寬和時延都得不到任何程度的保證。隊列:不增加隊列,對每個報文直接在正常代碼路徑上進行決策Cgroup區分(標記):在正常處理流程中,報文查找到目標socket結構之后,根據socket的owner process來確定cgroup報文決策:令牌桶+共享令牌池+顯式借令牌限速方式:ECN標記+TCP滑窗+丟包可靠短信Email微信自定義渠道4種告警方式可隨時修改158項告警87項指標采集通用 不同的應用可以選擇不同的網絡模式 同一主機的不同容器可以選擇不同的網絡模式自研容器網絡解決方案Gal
5、axy(CNI網絡插件+調度器插件+控制器),面向所有場景:高性能互聯網業務、離線業務、在線離線混合場景、傳統有狀態服務、公有云性能2219072611646248611744255482146168280500010000150002000025000TCP_RR(r/s)TCP_CRR(r/s)Overlay方案性能hostvxlanipipgateway2354083682212776752100772310500010000150002000025000TCP_RR(64)TCP_CRR(64)Underlay方案性能HostBridgeNATIPIP+Gateway混合Overlay
6、方案短鏈接IPIP包量比Vxlan多14.1%Gateway比Vxlan多40.5%方案被Flannel社區合并Underlay方案 Bridge方式僅比Host差6%,一般overlay比Host差2040%SRIOV方式比Bridge CPU下降38.3%,包量+6%性能Docker、Docket、Gaiastack P2P Agent下載鏡像對比Registry與P2P Agent流量占比對比 鏡像下載引入BT協議 對Docker Daemon零入侵 每層分別做種 優化blob下載策略發表論文:FID:A Faster Image Distribution System for Dock
7、er Platform2017 IEEE 2nd International Workshops on FASW安全能力擴展:彈性伸縮PodPodPod微服務/通用服務AutoscalercontrollerprometheusMetrics-serverAPP彈性伸縮:主動擴縮容 擴容可以指定新版本 縮容可以定點裁撤自動擴縮容資源閾值自定義指標閾值實例個數范圍周期性自動伸縮AutoscalercontrollerApiservercluster-agentCloud API集群彈性伸縮:監控節點資源使用率自動遷移低負載Node上的Pod,完成縮容一定數量Pod因資源不足pending時,自動
8、擴容能力擴展:灰度升級 在GPU集群中有一個長時間服務應用prd-cloud-str-003-p40-cluster1。該應用有25個實例,每個實例需要2個GPU卡。用來提供圖片識別的OCR服務。當該服務要升級新的版本時,如果對所有實例停止,則會造成服務中斷;如果采用滾動升級,無法保證升級過程是否有異常,以及無法充分驗證新版本的可用性(即使經過了測試階段的測試)。通常采用灰度升級的方式:即選擇某一個或N個實例先升級到新版本,在充分穩定驗證后,再考慮升級其他實例,而該灰度的過程可以分為任意批次。有時為了驗證多個版本,一個應用內也可以同時又多個版本并行存在。充分保證現網的服務質量以及版本的可控性。
9、能力升級:灰度升級如左圖所示,對某一個實例從v7升級到v8版本。2018-02-06 11:46:38 V7版本開時候運行 2018-02-09 09:33:02 對該實例做灰度升級,從V7版本升級到V8版本 2018-02-09 09:33:02 開始pull V8版本的imagePS:灰度升級屬于原地升級,因此不需要重新過調度,升級的效率也會提升。每次升級可以選擇要升級的實例個數以及具體哪些(個)實例。能力擴展:存儲場景物理硬盤cephFScephRBDcephRBD權限管理quota在線擴容containercontainercontainer本地磁盤container空間上報自動調度共
10、享云盤container內置云盤container 基于本機磁盤 上報至調度器 作為資源進行調度本地磁盤2類存儲,3種場景本地磁盤:延時低,不可遷移共享云盤:云存儲,多容器共享,同時讀寫內置云盤:云存儲,每容器獨享,用戶無感知云存儲 支持在線擴容、quota管理、權限管理 共享云盤基于cephFS 內置云盤基于cephRBD 騰訊內部ceph版本,微信同款能力擴展:GPU支持分布式存儲Ceph海量小數據讀寫優化不同用戶配額管理任務帶盤遷移智能拓撲感知GPU卡拓撲感知資源訪問代價樹決策資源調度算法解決碎片化異構GPU統一管理多種調度策略,多租戶管理GPU卡與CPU核自動綁定支持單機多卡和多機多卡
11、發表論文:Gaia Scheduler:A Kubernetes-based Scheduler FrameworkThe IEEE ISPA 2018(16th IEEE International Symposium on Parallel and Distributed Processing with Applications)能力擴展:GPU支持資源-訪問代價樹四類通信方式分類中,通信開銷最大的是SOC,其次是PXB,再次是PHB,PIX通信方式的GPU之間的通信開銷最小。拓撲節點中存儲3個信息:子節點的GPU通信方式(SOC、PXB、PHB或PIX)可用的GPU資源數(如果下屬n張G
12、PU卡則為n)節點通信開銷(非GPU節點為0)GPU節點存儲3個信息:GPU id 可用的GPU資源數(GPU節點為1)節點通信開銷(數字越小,訪問代價越低)Singular and linkFragment成本GPU使用方式實現VCUDA 在vm中構建wrapper library以攔截GPU調用并將這些調用重定向到宿主機執行Amazon將設備直接掛在到vm中GPUvm在Zen的hypervisor層實現了全虛擬化。為了隔離運行在物理GPU上的多個VM,GPUvm將物理GPU分成幾個部分,并將每個部分分配給單個VM。NVIDIA GRID在硬件層面實現GPU虛擬化,每個容器可以綁定一個虛擬G
13、PUNVIDIA Docker通過將GPU設備及運行時的庫轉為volume掛載到容器中實現了容器與驅動的解耦。但是一個GPU設備僅能掛載到一個容器中,不支持容器間共享GPU設備ConvGPU僅支持內存資源的共享且僅處理單個GPU容器使用GPU的問題:需要特定的硬件設備 不支持容器共享 僅支持內存資源虛擬化 僅支持單個GPU卡采用Device Plugin:GPU資源的發現 為任務分配相應的硬件資源及配置容器運行時環境transparent.GaiaGPU不應修改Kubernetes代碼或容器鏡像以共享GPU。使用共享GPU執行應用程序應該就像在物理GPU上執行一樣。Performance.Ga
14、iaGPU應當保證vGPU的性能與原生GPU性能相近。Isolation.GaiaGPU可以有效的分配和回收每個容器使用的GPU資源并實現不同容器間的資源隔離。Native_time(seconds)GaiaGPU_time(seconds)Difference(%)Tensorflow 47.82 47.88 0.13 Caffe 22.47 22.50 0.15 PyTorch 69.33 69.64 0.44 CNTK 7.39 7.41 0.27 Number of vGPUs12345resource per vGPU10.50.30.250.2發表論文:GaiaGPU:Sharing GPUs in Container CloudsThe IEEE ISPA 2018(16th IEEE International Symposium on Parallel and Distributed Processing with Applications)生態NextTencent Kubernetes Engine