網易雲容器服務研發實踐分享

2021-09-17 01:18:08 字數 3846 閱讀 7288

3月25日,網易雲技術布道系列第三期•對話架構師上海站的活動中,網易雲基礎設施技術總監張曉龍帶來了題為「網易雲容器服務研發實踐分享」的乾貨演講。網易從2023年春開始雲計算研發,陸續上線私有雲iaas、paas服務,並實現網易95%以上的網際網路業務遷移上雲。本次活動中,張曉龍分享了網易雲基礎服務團隊在研發容器服務過程中的實戰經驗。

張曉龍,網易雲基礎設施技術總監,網易專業技術委員會委員。浙江大學本科、博士畢業。目前主導網易私有雲以及網易公有雲基礎設施服務的技術研發,在雲計算基礎設施、分布式系統方面有多年的架構設計與研發經驗。

張曉龍首先介紹了網易雲的研發歷程和整體架構。

網易雲的產品經歷了長期的技術積累,網易在2023年開始做雲計算,最早實現了iaas,交付了公司內部的私有雲基礎設施服務,包括主機、網路、儲存等服務;2023年8月,陸續上線了關係型資料庫、負載均衡、物件儲存等平台服務;2023年12月,網易內部95%以上的網際網路產品都實現了上雲;2023年5月,網易雲對外服務於合作夥伴——網新科技、中順易等;2023年1月,網易基於docker實現了容器雲,並在9月正式對外發布。

下圖是網易雲的簡單架構:

網易雲的技術架構從底到上分為三層:

基礎設施層主要採用虛擬化技術將伺服器、交換機/路由器以及硬碟等物理裝置虛擬成為可以按需分配的計算/儲存/網路資源。基礎設施層主要包括:雲主機、雲網路、雲硬碟等服務。基礎設施層不僅為網易雲容器服務執行提供計算/儲存/網路資源,同時也為為資料庫、快取、負載均衡等網易雲平台服務提供資源;

核心業務層主要包括兩塊:一是容器及容器編排:映象倉庫、日誌服務、容器服務、編排服務,主要覆蓋了以容器以及容器編排為中心的網易雲容器服務核心功能;二是paas外掛程式服務,主要包括資料庫、負載均衡、物件儲存、快取等;

最上面的外圍服務層,也是構成乙個平台不可或缺的一部分。主要包括:認證、api服務、計費服務、安全服務、監控服務

作為網易雲的核心服務之一,網易雲容器服務的定位是面向高效研發而打造的新一代雲計算平台,提供彈性計算、devops工具鏈及微服務基礎設施等,幫助企業解決it、架構、運維等問題,使企業更聚焦其業務。容器服務的功能包括3個方面:

提供有狀態/無狀態容器及其映象加速/構建/倉庫等在內的容器服務;

提供包括物件儲存、cdn、關聯式資料庫、mongodb、負載均衡、快取服務、安全服務等在內的完善平台服務,是實現網際網路應用的通用的基礎元件;

提供包括服務發現、編排服務、apm服務、持續整合、監控服務、日誌服務、持續發布等在內的完整devops工具鏈。

要構建乙個容器服務,需要三類核心的技術:基礎設施、容器、容器編排。從整個核心技術來看,網易雲容器服務基於流行的開源技術而打造,為實現極致的使用者體驗實施了各種優化和定製開發。

基礎設施提供容器執行所需計算/儲存/網路資源,高效管理這些資源並確保資源的按需分配、高效交付,同時要保證交付資源的qos比如計算能力、網路效能、i/o能力等;

基礎設施服務的技術基礎是虛擬化技術,包括計算、網路、儲存的虛擬化技術,計算的虛擬化無論在硬體或軟體層面都相對成熟,而在網路、儲存的虛擬化上網易雲的選擇是軟體定義的技術。

容器是網易雲容器服務資源交付的最小單位,網易雲採用了最新docker技術,實現應用交付的標準化;目前的容器服務基於docker1.12版本打造。

要基於容器實現乙個可水平擴充套件的產品服務端架構,需要使用容器編排技術實現對容器集群的發布、回滾、遷移、擴容、縮容等。網易雲的容器編排基於開源專案kubernetes,kubernetes服務將資源抽象為三個層次:容器(軟體及執行環境),pod(相關聯的容器組合)容納乙個或多個容器,node(提供計算/網路/儲存的資源節點)容納乙個或多個pod。

網易雲團隊對這些核心技術有全面的掌控力,一方面也體現在網易雲對這些開源技術的貢獻和參與上:

以openstack和kubernetes為例,網易從2023年4月開始對openstack e版本貢獻**,去年下半年網易雲開始向kubernetes社群貢獻**,是國內最早向這2個社群貢獻**的團隊之一。

網路儲存

計算首先,容器的計算資源應該如何提供?應該跑在物理機上還是虛擬機器上?從公有雲層面來說,在容器的隔離性不是特別好的情況下,還是要跑在雲主機上面,這是對使用者最基本的安全承諾。

容器網路

實現

容器網路由基礎設施服務來提供,並確保網路的效能、可擴充套件性;容器不關心和處理網路效能、可擴充套件性問題,只管用雲提供的網路服務建立和使用相應的網路。網易雲為每個租戶提供一張完全隔離的私有網路以及一張所有租戶共享的公網。

容器的儲存也是比較難解決的問題,多數容器都是無狀態的,也就是說容器內部不應該儲存使用者有用的資料,乙個容器掛掉後,用映象能很快啟動另乙個容器,保證系統的正常執行。從架構上來說這個設計很好,彈性可擴充套件。但如果架構設計能力不是太好的情況下,很容易出現有狀態容器的需求。

儲存需求

但不管是docker還是kubernetes都不解決容器的儲存問題,只可以用docker -v指定乙個資料目錄,所以在構建容器雲時有2個需求:

難點docker缺省會將所有容器rootfs都儲存在overlay目錄下,不同容器rootfs資料無法有效區分並隔離

方案網路安全也是雲平台設計非常重要的一點

網路過濾

l4過濾:過濾指定的tcp/udp埠,便於實施網路封禁

ddos攻擊防護

基於intel dpdk技術實現高效能實時抗攻擊

設計原則

實現方案

網路qos另乙個重要問題是網路小包過載的問題,

問題容器執行於雲主機,容器啟動依賴於雲主機先啟動,而基於硬體虛擬化技術的雲主機啟動速度較慢。

啟動速度優化

1、定製系統映象,裁剪不必要服務啟動載入項;

2、雲主機ip靜態化,加速網路初始化過程。ip靜態化的原因:雲主機網路初始化使用dhcp服務獲取網路ip和路由等資訊,會占用較多啟動時間。在網路服務啟動前使用cloud-init和configdrive完成網絡卡名稱匹配和ip配置資訊注入;

3、優化openstack建立雲主機流程,主要是在openstack的計算節點上做了一些優化。

優化效果

建立容器在40秒內完成

內網使用巨幀(jumbo frames)模式,提公升資料傳輸的吞吐量。

vxlan效能優化

使用不同核心版本和ovs版本的組合,vxlan效能差異很大,在萬兆網路環境下使用3.18版本核心 + 2.6版本ovs,雲主機單連線閘道器**效能可近4gbps,雲主機多連線閘道器**效能可達近9gbps,雲主機間互訪近4gbps

效能問題

社群ceph在osd程序重啟時會出現長時間、極其嚴重的效能衰減(80%+),原因是osd重啟時要恢復重啟期間髒資料物件,會消耗大量網路/磁碟開銷

解決手段

在pglog記錄重啟期間資料物件的增量資料,在重啟時增量恢復資料物件

解決效果

原生的kubernetes沒有租戶和多租戶的概念,意味著要給每個使用者部署一套kubernetes的集群管理系統,網易雲用一套kubernetes集群去管理所有租戶的容器,這跟社群版本中完全不一樣的地方

完善多租戶支援效能問題

優化手段

排程器並行優化

副本控制器多優先順序處理

內部負載均衡**表精簡

kubelet、kube-proxy、api-server記憶體優化

優化效果雲計算的研發是一項系統的基礎開發工作,有非常大的難度難,雲計算產品最重要的是穩定性、效能和安全,後續的工作也將圍繞這三方面展開。

網易容器雲平台的微服務化實踐(一)

同步通訊 使用者中心 非同步通訊 構建服務 資料強一致需求 etcd 同步服務 最終一致需求 資源 服務 吞吐量敏感型 日誌服務 延時敏感型 實時服務 cpu 計算密集型 簽名認證中心 網路 io 密集型 映象倉庫 批處理任務 計費日誌推送 定時任務 分布式定時任務 長連線 websocket 服務...

API閘道器實踐 網易雲輕舟微服務

微服務最佳實踐中,我們需要通過統一的 api 閘道器進行服務能力的共享,api 閘道器為使用者提供發布 管理 保護和監控 api的能力,幫助使用者在自己的多個系統之間,或者內部系統與合作夥伴以及第三方的系統之間實現跨系統 跨協議的服務能力互通。api閘道器應用場景 api閘道器有三種典型的應用場景 ...

網易雲原生架構實踐之服務治理

本文由 網易雲 發布。雲原生 cloud native 的高階實踐是分布式服務化架構。乙個良好的服務化架構,需要良好的服務發現 服務治理 服務編排等核心能力。本文為讀者解析網易雲的服務治理策略及其典型實踐。在優化了版本控制策略,研發並整合了自動化構建和發布工具,實現 專案工程化 之後,網易雲開始了分...