華為云云原生鉆石集訓(xùn)營 第一課:容器運(yùn)行時技術(shù)深度剖析
課程目標(biāo):
學(xué)完本課程后,您將能夠:
了解容器隔離技術(shù)的基本原理;
了解主流的容器運(yùn)行時實(shí)現(xiàn);
了解華為云上使用到的容器運(yùn)行時。
課程大綱:
第1章 容器引擎和運(yùn)行時機(jī)制原理剖析
第2章 業(yè)界主流容器運(yùn)行時技術(shù)架構(gòu)剖析
第3章 華為云容器運(yùn)行時技術(shù)架構(gòu)剖析
第4章 容器運(yùn)行時技術(shù)的發(fā)展方向
容器引擎和運(yùn)行時原理1:CRI接口
CRI接口: kubelet調(diào)用容器運(yùn)行時的grpc接口
dockershim: kubernetes對接docker api的CRI接口適配器,kubernetes 1.21版本已經(jīng)將其標(biāo)注為廢棄接口。
CRl-containerd:通過containerd中的CRI插件實(shí)現(xiàn)了CRI接口,讓containerd可直接對接containerd啟動容器,無需調(diào)用docker api。當(dāng)前使用最廣泛的CRI接口接口實(shí)現(xiàn)。
CRI-O:專注于在kubernetes運(yùn)行容器的輕量級CRI接口實(shí)現(xiàn)(不關(guān)注開發(fā)態(tài))。
容器引擎和運(yùn)行時原理1:CRI接口
運(yùn)行時:負(fù)責(zé)容器的生命周期管理,包括容器創(chuàng)建,啟動、停止、日志和性能采集等接口。
鏡像:負(fù)責(zé)容器運(yùn)行的管理,包括顯示鏡像、拉取鏡像、刪除鏡像等接口。
容器引擎和運(yùn)行時原理2:OCI? runtime spec
OCI組織: Linux基金會于2015年6月成立OCI (Open ContainerInitiative)組織,旨在圍繞容器格式和運(yùn)行時制定一個開放的工業(yè)化標(biāo)準(zhǔn)。目前主要有兩個標(biāo)準(zhǔn)文檔:容器運(yùn)行時標(biāo)準(zhǔn)(runtime spec)和容器鏡像標(biāo)準(zhǔn)(image spec)
Runtime spec:容器運(yùn)行時標(biāo)準(zhǔn),定義了容器狀態(tài)和配置文件格式,容器生命周期管理命令格式和參數(shù)等。
runc: docker捐獻(xiàn)給OCl社區(qū)的一個runtime spec的參考實(shí)現(xiàn),docker容器也是基于runc創(chuàng)建的。
Kata-runtime:一種基于虛擬化的安全隔離的OCl runtime spec的實(shí)現(xiàn)。
gVisor:一種基于系統(tǒng)調(diào)用攔截技術(shù)的輕量級安全容器實(shí)現(xiàn)。
容器引擎和運(yùn)行時原理2:OCI runtime spec
config.json:定義容器運(yùn)行所需要的所有信息,包括rootfs、mounts、進(jìn)程、cgroups、namespaces、caps等。
命令:容器生命周期管理命令、包括創(chuàng)建、啟動、停止、刪除等。
容器引擎和運(yùn)行時原理3:runtime v2
shimv2:新的容器運(yùn)行時接口,基于ttrpc通信。
目的:讓運(yùn)行時更方便維護(hù)容器狀態(tài)和生命周期,減少安全容器實(shí)現(xiàn)中,節(jié)點(diǎn)的進(jìn)程數(shù)和資源調(diào)用。
業(yè)界主流容器運(yùn)行時1: runc
Namespace:資源和信息的可見性隔離,通過namespace隔離,容器中的應(yīng)用只能看到分配到該容器的資源、其他主機(jī)上的信息在容器中不可見。常用的namespace有PID(進(jìn)程號)、(網(wǎng)絡(luò))、UTS(主機(jī)名)和IPC(跨進(jìn)程通信)等
Cgroups:資源使用量的隔離,通過cgroup、限制了容器使用的資源量,通過不同的子系統(tǒng),限制不同的資源。包括CPU、內(nèi)存、io帶寬、大頁、fd數(shù)等等
Capability:權(quán)限限制,通過對進(jìn)程的capability定義,限制容器中的進(jìn)程調(diào)用某些系統(tǒng)調(diào)用,以達(dá)到容器進(jìn)程無法逃逸到主機(jī)的目的,比如容器中的進(jìn)程是不具有以下capability的:SYS ADMIN/MKNOD/SYS_RESOURCE/SYS_MODULES ...
業(yè)界主流容器運(yùn)行時1:? runc
業(yè)界主流容器運(yùn)行時2 : kata containers
1.虛擬化隔離:每個pod都運(yùn)行在一個獨(dú)立的虛擬機(jī)中,提供虛擬化接口對接不同的虛擬化實(shí)現(xiàn),包括qemu.cloud hypervisor、firecracker等等
⒉輕量化:為了達(dá)到和容器近似的使用體驗,需要對各組件進(jìn)行裁剪,達(dá)到輕量化和啟動加速的目的,對于hypervisor,去除通用虛擬化的各種不必要的設(shè)備、總線等。對于guest kernel,也裁剪了大量不需要的驅(qū)動和文件系統(tǒng)模塊。而運(yùn)行在虛擬機(jī)中的1號進(jìn)程(一般為kata-agent),資源占用可小于1MB。
3.主機(jī)資源訪問:通過virtio、vfio等方式訪問主機(jī)資源,如virtio-blk(塊設(shè)備)、virtio-fs(文件)、virtio-net (網(wǎng)絡(luò))、vfio(物理設(shè)備)、vhost-user (用戶態(tài)網(wǎng)絡(luò)或存儲)
業(yè)界主流容器運(yùn)行時3: gVisor
1.虛擬內(nèi)核:設(shè)置進(jìn)程的4種模式,HRO、HR3、GRO、GR3,通過攔截系統(tǒng)調(diào)用,實(shí)現(xiàn)了一個虛擬內(nèi)核,用戶進(jìn)程與host kernel不直接交互
2.攔截系統(tǒng)調(diào)用的方式:ptrace、kvm
3.優(yōu)點(diǎn):額外內(nèi)存消耗小,容器啟動速度快
4.缺點(diǎn):系統(tǒng)調(diào)用慢,導(dǎo)致IO、網(wǎng)絡(luò)等性能差,由于是模擬內(nèi)核,有POSIX兼容性問題
華為云中的容器運(yùn)行時: Enhanced Kata Containers
1.輕量化: hypervisor采用華為云自研的qemu-microvm,guest kernel采用裁剪EulerOS內(nèi)核、主機(jī)shimv2采用rust語言重寫。
2.豐富的硬件支持:GPU、nvlink、Ascend、IB、SDl
3.華為云基礎(chǔ)設(shè)施融合:evs(塊設(shè)備)、obs(對象存儲)、sfs (文件存儲)、vpc(華為云VPC網(wǎng)絡(luò))
4.產(chǎn)品形態(tài):CCI(全托管的云容器實(shí)例)、CCE turbo (CCE增強(qiáng)版)
容器運(yùn)行時技術(shù)的發(fā)展方向: 更輕量、更安全
1.定制虛擬化和內(nèi)核:提供更輕量的安全隔離? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.基于虛擬化的機(jī)密計算:TDX、SEV、PEF
2. Sandbox plugin:去除host上的shim。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.鏡像功能卸載:主機(jī)上看不到容器鏡像
3.Rust化: hypervisor、kernel、agent? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.遠(yuǎn)程認(rèn)證:確保運(yùn)行在機(jī)密環(huán)境中
總結(jié):
1.從API的角度介紹了kubernetes下容器運(yùn)行時的架構(gòu)和原理。
- Kubernetes定義的容器運(yùn)行時接口:CRI,當(dāng)前較為主流的實(shí)現(xiàn)包括dockershim、cri-containerd、cri-o。
- OCl runtime spec定義了運(yùn)行時實(shí)現(xiàn)中,文件格式和命令行格式,runc、 kata、gVisor等運(yùn)行時都符合這個標(biāo)準(zhǔn)
- Containerd定義了一套ttrpc接口,方便運(yùn)行時實(shí)現(xiàn)者更好地進(jìn)行容器狀態(tài)管理
2.介紹了當(dāng)前較為熱門的幾種容器運(yùn)行時的實(shí)現(xiàn)
- Runc:基于linux的namespace、cgroup和capability等技術(shù)實(shí)現(xiàn)隔離的容器實(shí)現(xiàn)- Kata containers:基于虛擬化隔離技術(shù)的容器實(shí)現(xiàn)
- gVisor:一種基于攔截系統(tǒng)調(diào)用的實(shí)現(xiàn)隔離的容器實(shí)現(xiàn)
3.介紹了華為云的容器產(chǎn)品和對應(yīng)的運(yùn)行時選擇及增強(qiáng)
-華為云的安全容器基于EulerOS和華為云自研的qemu-microvm對安全容器進(jìn)行了輕量化改造
-華為云的安全容器支持GPU、nvlink、Ascend、SDI等各種硬件設(shè)備
-華為云的安全容器和華為云的VPC網(wǎng)絡(luò)、OBS、SFS、EVS等服務(wù)可無縫對接。
4.介紹了容器運(yùn)行時未來的發(fā)展方向。
-通過rust改寫、減少host進(jìn)程,進(jìn)一步輕量化hypervisor等方式實(shí)現(xiàn)更加輕量級的安全容器
-結(jié)合機(jī)密計算技術(shù),實(shí)現(xiàn)更加安全的容器技術(shù)。
參考資料
容器運(yùn)行技術(shù)原理相關(guān)參考鏈接:
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
https://kubernetes.io/docs/concepts/containers/runtime-class/
https://github.com/opencontainers/runtime-spec/blob/master/spec.md
https://github.com/containerd/containerd#cri
https://cri-o.io/
https://github.com/opencontainers/runc
https://katacontainers.io/
https://gvisor.dev/
https://www.huaweicloud.com/product/cce.html
https://www.huaweicloud.com/product/cci.html
Kubernetes 云容器引擎 CCE 容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。