容器技術(shù)概述
應(yīng)用虛擬化的歷史
- 1979描孟,Unix v7 支持為應(yīng)用構(gòu)建一個(gè)獨(dú)立的虛擬文件系統(tǒng)
- 2004-2008, Google 內(nèi)部大規(guī)模使用 Cgroups 虛擬化技術(shù)
- 2008, Cgroups 進(jìn)入了 Linux 內(nèi)核主線
- 2008, LXC(Linux Container)項(xiàng)目發(fā)布,具備了 Linux 容器的雛型
- 2013, Docker 項(xiàng)目正式發(fā)布
- 2014, Kubernetes 項(xiàng)目正式發(fā)布
- 2016, 容器生態(tài)開始模塊化梢夯、規(guī)范化,容器服務(wù)商業(yè)化
容器是什么
一句話總結(jié)就是:容器是應(yīng)用虛擬化侦镇,虛擬機(jī)是操作系統(tǒng)虛擬化
kubernetes
容器的價(jià)值
- 容器實(shí)例更輕量,更彈性,更容易流動(dòng)
- 容器技術(shù)是面向應(yīng)用快压,比操作系統(tǒng)虛擬化效率更高
- 容器可以更好的和微服務(wù)融合,更容易與DevOPS理念結(jié)合
- 容器技術(shù)做到了運(yùn)行環(huán)境與操作系統(tǒng)解耦垃瞧,一處構(gòu)建的標(biāo)準(zhǔn)鏡像蔫劣,無需修改的處處運(yùn)行
容器的形態(tài)
從計(jì)算提供的方式演進(jìn)方向來看,先后經(jīng)歷了
- 機(jī)房IDC托管
- 軟件定義計(jì)算个从,網(wǎng)絡(luò)脉幢,存儲(chǔ)(IaaS)
- 平臺(tái)即服務(wù)(PaaS), 后端即服務(wù) (BaaS)
- 函數(shù)即服務(wù)(FaaS), 和Serverless架構(gòu)
容器的形態(tài)
- 面向應(yīng)用歪沃,融合在了PaaS, BaaS, FaaS,Serverless之中
- 面向操作系統(tǒng),具備資源強(qiáng)隔離的MicroVM和高效嫌松,彈性的Container互相結(jié)合
- 面向基礎(chǔ)設(shè)施沪曙,統(tǒng)一容器編排的Kubernetes正在下沉,成為分布式OS的組成部分
云原生的世界
容器應(yīng)用部署架構(gòu)的演進(jìn)
傳統(tǒng)應(yīng)用完成容器化方式運(yùn)行演進(jìn)過程如下:
第一階段, 應(yīng)用容器化
非容器應(yīng)用 → 編寫 DockerFile萎羔,構(gòu)建成鏡像 液走,以容器方式運(yùn)行
第二階段, 單一集群模式:
開發(fā),測(cè)試贾陷,生產(chǎn)環(huán)境育灸,集群內(nèi)命名空間隔離
第三階段,多集群模式
開發(fā),測(cè)試昵宇,生產(chǎn)集群,公共基礎(chǔ)服務(wù)(日志儿子,監(jiān)控瓦哎,CICD服務(wù))獨(dú)立部署
- 集群的管理模式,需要更強(qiáng)的DevOPS能力
- 微服務(wù)可用性柔逼,性能觀測(cè)
- 引入APM分布式應(yīng)用鏈路追蹤
第四階段, 超大規(guī)模模式
超大規(guī)模容器服務(wù)面臨的問題蒋譬,數(shù)以千計(jì)的微服務(wù),數(shù)萬量級(jí)的POD,以及不可預(yù)估的業(yè)務(wù)流量愉适。犯助。。维咸,這個(gè)使用 ServiceMesh,ClusterMesh 模式就是會(huì)提上日程了
- 需要更快的發(fā)布剂买,更強(qiáng)的微服務(wù)治理能力
- 需要更強(qiáng)可觀測(cè)性能,容器網(wǎng)絡(luò)流量分析
- 需要更低延遲癌蓖,更大帶寬的容器網(wǎng)絡(luò)
典型的容器應(yīng)用部署方式
集群視角
單集群/多命名空間
多集群
開發(fā)瞬哼,測(cè)試,生產(chǎn)環(huán)境使用獨(dú)立集群租副,數(shù)據(jù)坐慰,基礎(chǔ)服務(wù)(日志,監(jiān)控用僧,注冊(cè)中心结胀,CICD等)拆分獨(dú)立集群
集群Mesh模式
將多個(gè)集群組建成一個(gè)邏輯集群,提升跨集群間服務(wù)互通能力责循,可以實(shí)現(xiàn)業(yè)務(wù)容災(zāi)糟港,多活等
應(yīng)用視角
通用容器應(yīng)用
ingress+容器服務(wù)
微服務(wù)
ingress+注冊(cè)中心+微服務(wù)+分布式應(yīng)用調(diào)用鏈
常見的微服務(wù)框架,比如 SpringCloud / SpringBoot沼死,Dubbo着逐,Go-Micro
以一個(gè)典型的微服務(wù)框架具備如下功能:
Spring Boot 是 Spring 的腳手架,快速開發(fā)單個(gè)微服務(wù); SpringCloud 是基于Spring Boot的分布式系統(tǒng)基礎(chǔ)設(shè)施,提供如服務(wù)發(fā)現(xiàn)注冊(cè)耸别、配置中心健芭、消息總線、負(fù)載均衡秀姐、流量控制(斷路慈迈,熔斷,重試等)省有、數(shù)據(jù)監(jiān)控的微服務(wù)治理功能
第一代微服務(wù)局限性如下:
服務(wù)治理 SDK 化痒留,需要入侵業(yè)務(wù)代碼
語言綁定,特定的微服務(wù)框架僅支持特定的語言
服務(wù)網(wǎng)格
ingress+服務(wù)網(wǎng)格控制層面+微服務(wù)應(yīng)用+分布式應(yīng)用調(diào)用鏈+ServiceMesh
Service Mesh解決了如下問題:
- 屏蔽分布式系統(tǒng)通信的復(fù)雜性(負(fù)載均衡伸头、服務(wù)發(fā)現(xiàn)扫步、認(rèn)證授權(quán)游岳、監(jiān)控追蹤擂橘、流量控制等等)哭懈,服務(wù)只用關(guān)注業(yè)務(wù)邏輯容达;
- 語言無關(guān),服務(wù)可以用任何語言編寫氏涩,只需和Service Mesh通信即可;
- 對(duì)應(yīng)用透明弦疮,Service Mesh組件可以單獨(dú)升級(jí)压语;
Service Mesh 局限性如下:
- 復(fù)雜性增加啸罢,Service Mesh 通過 Sidecar 侵入到業(yè)務(wù)數(shù)據(jù)流
- Service Mesh,更多的解決的是服務(wù)間通信胎食,對(duì)于分布式系統(tǒng)的狀態(tài)管理扰才,綁定外部數(shù)據(jù)存儲(chǔ)、事件驅(qū)動(dòng)
UCloud 容器服務(wù)
容器平臺(tái)能力矩陣
支撐程度/類別 | Cube實(shí)例 | Uk8s集群 | 監(jiān)控 | 日志 | 鏈路追蹤 | 服務(wù)網(wǎng)格 | 微服務(wù) | 應(yīng)用網(wǎng)關(guān) | DevOPS |
---|---|---|---|---|---|---|---|---|---|
產(chǎn)品支持 | √ | √ | √ | √ | -- | ||||
方案支持 | √ | √ | √ | √ | -- | √ | √ |
容器產(chǎn)品能力矩陣
功能 | ucloud | cube | 備注 |
---|---|---|---|
集群網(wǎng)絡(luò) | vpc cni (underlay) | ||
負(fù)載均衡 | 支持 | ||
Ingress | 需要部署開源軟件 | ||
塊存儲(chǔ)卷(storage-class) | 支持 | ||
NFS 動(dòng)態(tài)存儲(chǔ)卷(storage-class) | 支持 | ||
對(duì)象存儲(chǔ)(storage-class) | 支持 | ||
彈性伸縮CA HPA VPA | 支持 | ||
GPU節(jié)點(diǎn) | 支持 | ||
高性能計(jì)算節(jié)點(diǎn) | 支持 | ||
混合云/托管區(qū)節(jié)點(diǎn) | 支持 | ||
需要打通托管區(qū)網(wǎng)絡(luò)厕怜,只能添加托管區(qū)節(jié)點(diǎn)作為node節(jié)點(diǎn) | |||
制品庫 | uhub,支持外部registry | ||
多集群管理 | 僅限創(chuàng)建衩匣,刪除 |
產(chǎn)品與解決方案架構(gòu)圖
面向銷售
目前已經(jīng)大量的客戶在容器化管理應(yīng)用蕾总,并且客戶是需要花更多類型的容器產(chǎn)品和服務(wù),容器可以帶來大量云資源消費(fèi)的
- 什么值得買琅捏,UC最大的容器服務(wù)消費(fèi)客戶生百,雙十一期間,峰值可達(dá)近千臺(tái)節(jié)點(diǎn)午绳,萬核量級(jí)的計(jì)算資源
- 核桃編程 平臺(tái)百臺(tái)兩集的計(jì)算資源置侍,十余個(gè)高配節(jié)點(diǎn)K8S集群
- 百望客戶 云主機(jī)運(yùn)行容器化應(yīng)用,部分業(yè)務(wù) rancher+uk8s
- 天天用車拦焚,混合云容器集群蜡坊,深度學(xué)習(xí)模型訓(xùn)練
- 蓋婭客戶,探探客戶 赎败,嘗試測(cè)試cube的使用
- 快準(zhǔn)車服 容器多活方案
- 風(fēng)電客戶秕衙,uk8s 集群擴(kuò)展高性能計(jì)算節(jié)點(diǎn)
容器技術(shù)賣點(diǎn)
- 擴(kuò)展容器服務(wù)客戶的能力,除了常規(guī)的云主機(jī)資源的的消費(fèi)僵刮,可以帶來更多的消費(fèi)
- 容器技術(shù)方案:鏡像倉庫据忘,CICD,日志搞糕,監(jiān)控系統(tǒng)勇吊,告警能帶來US3,短信的消費(fèi)窍仰,
- 彈性計(jì)算資源容器化汉规,job+ uk8s+高性能node
- AI訓(xùn)練計(jì)算資源容器化+ GPU主機(jī)
面向架構(gòu)師
基礎(chǔ)的產(chǎn)品,ULB驹吮,Uhost 针史,UDisk,UFS碟狞,US3啄枕,Uk8s, Cube
DevOPS
Gitlab,jenkins族沃,jenkinX
鏡像倉庫
為什么需要鏡像同步
由于對(duì)鏡像的訪問是一個(gè)核心的容器概念频祝,在實(shí)際使用過程中,一個(gè)鏡像庫可能是不夠用的脆淹,下例情況下智润,我們可能會(huì)需要部署多個(gè)鏡像倉庫:
國外的公有鏡像下載過慢,需要一個(gè)中轉(zhuǎn)倉庫進(jìn)行加速
容器規(guī)模較大未辆,一個(gè)鏡像倉庫不堪重負(fù)
對(duì)系統(tǒng)穩(wěn)定性要求高窟绷,需要多個(gè)倉庫保證高可用性
鏡像倉庫有多級(jí)規(guī)劃,下級(jí)倉庫依賴上級(jí)倉庫
更常用的場(chǎng)景是咐柜,在企業(yè)級(jí)軟件環(huán)境中兼蜈,會(huì)在軟件開發(fā)的不同階段存在不同的鏡像倉庫攘残,
在開發(fā)環(huán)境庫,開發(fā)人員頻繁修改鏡像为狸,一旦代碼完成歼郭,生成穩(wěn)定的鏡像即需要同步到測(cè)試環(huán)境。
在測(cè)試環(huán)境庫辐棒,測(cè)試人員對(duì)鏡像是只讀操作病曾,測(cè)試完成后,將鏡像同步到預(yù)上線環(huán)境庫漾根。
在預(yù)上線環(huán)境庫泰涂,運(yùn)維人員對(duì)鏡像也是只讀操作,一旦運(yùn)行正常辐怕,即將鏡像同步到生產(chǎn)環(huán)境庫逼蒙。
在這個(gè)流程中,各環(huán)境的鏡像庫之間都需要鏡像的同步和復(fù)制寄疏。
Harbor的鏡像同步機(jī)制
有了多個(gè)鏡像倉庫是牢,在多個(gè)倉庫之間進(jìn)行鏡像同步馬上就成為了一個(gè)普遍的需求。比較傳統(tǒng)的鏡像同步方式陕截,有兩種:
第一種方案驳棱,使用Linux提供的RSYNC服務(wù)來定義兩個(gè)倉庫之間的鏡像數(shù)據(jù)同步。
第二種方案农曲,對(duì)于使用IaaS服務(wù)進(jìn)行鏡像存儲(chǔ)的場(chǎng)景蹈胡,利用IaaS的配置工具來對(duì)鏡像的同步進(jìn)行配置。
這兩種方案都依賴于倉庫所在的存儲(chǔ)環(huán)境朋蔫,而需要采用不同的工具策略。Harbor則提供了更加靈活的方案來處理鏡像的同步却汉,其核心是三個(gè)概念:
用Harbor自己的API來進(jìn)行鏡像下載和傳輸驯妄,作到與底層存儲(chǔ)環(huán)境解耦。
利用任務(wù)調(diào)度和監(jiān)控機(jī)制進(jìn)行復(fù)制任務(wù)的管理合砂,保障復(fù)制任務(wù)的健壯性青扔。在同步過程中,如果源鏡像已刪除翩伪,Harbor會(huì)自動(dòng)同步刪除遠(yuǎn)端的鏡像微猖。在鏡像同步復(fù)制的過程中,Harbor會(huì)監(jiān)控整個(gè)復(fù)制過程缘屹,遇到網(wǎng)絡(luò)等錯(cuò)誤凛剥,會(huì)自動(dòng)重試。
提供復(fù)制策略機(jī)制保證項(xiàng)目級(jí)的復(fù)制需求轻姿。在Harbor中犁珠,可以在項(xiàng)目中創(chuàng)建復(fù)制策略逻炊,來實(shí)現(xiàn)對(duì)鏡像的同步。與Docker Registry的不同之處在于犁享,Harbor的復(fù)制是推(PUSH)的策略余素,由源端發(fā)起,而Docker Registry的復(fù)制是拉(PULL)的策略炊昆,由目標(biāo)端發(fā)起桨吊。
日志方案
傳統(tǒng)的filebeat +ELK
新興的Vector+Loki+ Grafana
監(jiān)控方案
promethus+cortex++Grafana
https://cortexmetrics.io/docs/architecture/
鏈路追蹤
jaeger+Tempo+Grafana
服務(wù)網(wǎng)格
linkerd2
流量調(diào)度
- linkerd2 流量調(diào)度
- DNS權(quán)重+Ingress
跨集群服務(wù)調(diào)用
- Ingress+LB
- Cilium Mesh
多集群應(yīng)用管理
高性能容器網(wǎng)絡(luò)
開源的 Cilium (ebpf/Ipvlan)