天天看點

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.6容器服務與彈性容器執行個體(四)

3.6.3 實作技術

與社群開源的Kubernetes 相比,阿裡雲Kubernetes 服務除了提供便捷的安裝、更新及輕松地實作 Kubernetes 叢集的擴容和縮容等管理功能,還提供了更為強大的功能,其相關實作元件如圖3-78 所示。

…… 

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.6容器服務與彈性容器執行個體(四)

圖 3-78  Kubernetes 相關實作元件

1. 自研網絡插件

以網絡插件為例,圍繞Kubernetes 實作的CNI 插件種類豐富、數量繁多。而如何選擇一款穩定、高性能,并能支援流量控制、網絡政策等進階特性的網絡插件, 對于Kubernetes 的網絡運作至關重要。以阿裡雲容器服務的Terway 插件為例,它遵從業界的CNI 設計方式,針對阿裡雲VPC 網絡進行了優化,在Kubernetes 場景下使用,支援網絡政策,可以實作Pod 之間的通路隔離。同時,通過在Pod 上聲明annotation: k8s.aliyun.com/ingress-bandwidth 和k8s.aliyun.com/egress-bandwidth 可以限制Pod 的入網和出網帶寬。

按照部署和調用方式劃分,Terway 包含Daemon 和Binary 兩部分,如圖3-79 所示。

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.6容器服務與彈性容器執行個體(四)

圖 3-79  網絡插件Terway 

Daemon: 供Binary 調用,配置設定和管理網絡資源。

Binary: 與Kubelet 互動及Daemon 互動,配置Pod 的網絡連接配接

Kubelet 監聽到Pod 建立在自己的節點上時, 會通過容器運作時建立Sandbox 容器,然後通過cni 調用Terway Binary 來處理網絡命名空間,Terway Binary 調用Terway Daemon 來擷取網絡資源,Terway Daemon 調用Aliyun Open API 配置設定網絡資源并傳回給Terway Binary,最後Terway Binary 為容器的網絡命名空間配置網絡和聯通網絡。

Serverless Kubernetes 的實作依賴彈性容器執行個體ECI 和Virtual Kubelet。

2. 彈性容器執行個體ECI 技術實作

彈性容器執行個體ECI 提供面向雲原生的免運維容器組(Pod)資源傳遞。使用者隻需要提供容器鏡像,指定ECI 執行個體規格,即可運作容器執行個體,無須關心容器運作在哪台實體伺服器上。

作為彈性計算的“一等公民”,ECI 充分發揮底層的計算、網絡、存儲能力,不僅在資源上與ECS 複用整個阿裡雲彈性計算資源池,還複用了阿裡雲網絡的基礎設施,ECI 和ECS 可以在同一個VPC 内,中間沒有虛拟網關的轉發開銷。ECI 也複用了阿裡雲存儲的基礎設施,基于ESSD 的系統盤和資料盤最高可以支援100 萬的随機讀寫IOPS,穩定性和讀寫帶寬都有充分的保障。

資源複用技術

這樣做的好處是大幅提升排程的彈性深度。使用者直覺的感受就是,建立 ECI 的時候除了可以單獨指定 CPU、存儲容量進行靈活搭配,還可以直接通過 ECS 執行個體的

規格指定 ECI 的規格,ECI 與 ECS 的資源複用技術,ECI 與 ECS 的資源複用技術如圖 3-80 所示。

除了庫存的複用,單台實體伺服器還支援 ECS/ECI 混合部署,結合新的庫存排程算法,提高單台實體機的資源使用率,降低 ECI 甚至整個彈性計算的成本。ECI 目前支援遠比 ECS 更小的規格,這在一定程度上可以彌補目前實體機排程的資源碎片的缺陷。

ECI 的成本

ECI 的成本主要包含ECI 執行個體、網絡和存儲的使用費用。ECI 執行個體能夠支援兩種資源申請和計費模式。

模式一:根據 CPU/ 記憶體進行資源申請和計費。ECI 會利用 ECS 多個規格族的庫存,保障資源的傳遞。例如:2C4G,會嘗試使用 ECS 的 ecs.c6.large、ecs.sn1ne. large、ecs.se1ne.large 等規格進行資源的傳遞。

模式二:根據 ECS 規格進行資源申請和計費,價格參考各地域 ECS 按量價格, 使用者可以根據需要指定 ECS 規格族來使用各規格族的指定能力,例如:指定使用 ecs. sn1ne 規格族,來使用網絡增強能力。網絡的使用費用主要包括VPC 網絡中的負載均衡裝置、彈性公網IP、privateZone 等費用;存儲的使用費用主要包括NAS、OSS、EBS 快照等的使用費用。

ECI 和ECS 最大的不同就在于ECI 是按量秒級計費的,而不是ECS 常用的包年包月形式。ECI 隻會收取使用者從開始拉取業務鏡像,到執行個體狀态從Running 變成Succeed 或者Failed 之間的費用。ECI 與ECS 如圖3-81 所示,用一個2C4G 的執行個體來說明,如果每天業務運作的時間正好是14 個小時的話,那麼ECI 按量付費的成本和ECS 包月的成本是持平的。如果業務每天運作的時間小于14 個小時,那麼按量的ECI 成本會比包月的ECS 更低。

除了幫助使用者降低顯性的使用成本,ECI 還能幫助使用者降低隐性成本。Serverless 容器不向使用者收取機器的資源成本,而直接按應用消耗的資源來收費。Serverless Kubernetes 提供了開箱即用的容器服務,大大降低了環境部署成本和時間, 同時阿裡雲在官網上提供了大量的幫助文檔和最佳實踐,大大降低了開發人員的使用門檻。

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.6容器服務與彈性容器執行個體(四)

ECI 的啟動速度

ECI 的彈性能力在很大程度上取決于ECI 并發建立時的啟動速度,是以優化ECI

執行個體的并發啟動速度非常關鍵。

這裡以Nginx 容器的端到端的建立時間(如圖3-82 所示)為例,除去執行個體啟動占到的7% 的時間,資源排程的時間占到了43%,而鏡像拉取的時間占到了50%。

帶你讀《彈性計算—無處不在的算力》第三章:計算産品和技術3.6容器服務與彈性容器執行個體(四)

圖 3-82  Nginx 容器端到端建立時間分析

容器在每次啟動時,都會檢查本地是否有相應的鏡像,如果不存在,則會從遠端的容器鏡像倉庫拉取鏡像。在阿裡雲上的容器執行個體是運作在阿裡雲的安全沙箱内的,執行個體每次重建時都會銷毀整個安全沙箱,其中也包括了已緩存到本地的鏡像, 這就導緻容器重建後依然會拉取鏡像。為了減少拉取時間,業界主要有以下三種優化方法。

第一種方法是在所有的計算節點上都緩存基礎鏡像層,比如centos、ubuntu 等, 如果本地存儲資源足夠,還可以緩存部分常用的業務鏡像。

第二種方法是采取P2P 傳輸的方式,從多台實體機并行拉取業務鏡像的不同層,已緩存該業務鏡像的實體機越多,并行拉取鏡像的效率越高。

第三種方法是把系統盤和資料盤儲存至分布式存儲系統,借助存儲系統的快照技術,在啟動容器時,将快照克隆出的雲盤動态挂載到容器中去。

經過大量的優化,目前ECI 啟動時已經不需要從遠端的容器鏡像倉庫拉取鏡像, 并發建立執行個體的并行效率提升了數十倍。

繼續閱讀