成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于容器和容器運(yùn)行時(shí)的那些事

云計(jì)算 虛擬化
容器,容器編排,微服務(wù),云原生,這些無疑都是當(dāng)下軟件開發(fā)領(lǐng)域里面最熱門的術(shù)語。容器技術(shù)的出現(xiàn)并迅速的廣泛應(yīng)用于軟件開發(fā)的各個(gè)領(lǐng)域里,主要的原因是容器技術(shù)革命性的改變了軟件開發(fā)和部署的基本方式。作為一個(gè)架構(gòu)師,了解容器技術(shù)是非常重要的一個(gè)話題,我們今天就來聊聊它。

 容器技術(shù)是一種虛擬化技術(shù),也就是我們常常說的“軟件定義XXX”。在容器之前被廣泛應(yīng)用的是虛擬機(jī)技術(shù),也就是軟件定義的硬件。代表產(chǎn)品就是VMWare。我早年在EMC工作的時(shí)候,公司常常提起收購(gòu)VMWare是多么多么英明的一項(xiàng)決策,那個(gè)時(shí)候虛擬機(jī)技術(shù)真的很火。例如軟件模擬硬件,用戶可以很方便的在自己的主機(jī)上運(yùn)行不用的硬件和操作系統(tǒng),并且可以方便的把整個(gè)系統(tǒng)的快照作為文件遷移,真的非常方便。

[[337147]]

但是虛擬機(jī)需要模擬整個(gè)的硬件,它的開銷是非常大的。內(nèi)存,CPU和磁盤空間都是獨(dú)占的。在系統(tǒng)架構(gòu)的層面,虛擬機(jī)技術(shù)仍然非常有用,但是對(duì)日常的開發(fā)工作來說,虛擬機(jī)技術(shù)就太重了。

從軟件開發(fā)和部署的角度來看,我們希望有一個(gè)這樣的虛擬化技術(shù):

  • 能夠隔離CPU,內(nèi)存,磁盤,網(wǎng)絡(luò)等資源
  • 能夠控制資源使用的量和優(yōu)先級(jí)
  • 能夠運(yùn)行獨(dú)立的操作系統(tǒng)
  • 比較輕量級(jí)的系統(tǒng)開銷
  • 比較方便的管理功能

在Unix/Linux世界,我們第一個(gè)想到的類似的東西是Chroot。

1.Chroot

Chroot是在Unix系統(tǒng)的一個(gè)操作,即 change root directory (更改 root 目錄)。在 Linux 系統(tǒng)中,系統(tǒng)默認(rèn)的目錄結(jié)構(gòu)都是以 `/`,即是以根 (root) 開始的。而在使用 chroot 之后,系統(tǒng)的目錄結(jié)構(gòu)將以指定的位置作為 `/` 位置。由Chroot創(chuàng)造出的那個(gè)根目錄,叫做“chroot jail”(chroot jail,或chroot prison)。

 

 

 

只有root用戶可以執(zhí)行chroot。大多數(shù)Unix系統(tǒng)都沒有以完全文件系統(tǒng)為導(dǎo)向,以及可能通過網(wǎng)絡(luò)和過程控制,通過系統(tǒng)調(diào)用接口來提供一個(gè)破壞chroot的程序。

在經(jīng)過chroot 之后,系統(tǒng)讀取到的目錄和文件將不在是舊系統(tǒng)根下的而是新根下(即被指定的新的位置)的目錄結(jié)構(gòu)和文件,因此它帶來的好處大致有以下3個(gè):

  • 增加了系統(tǒng)的安全性,限制了用戶的權(quán)力;在經(jīng)過 chroot 之后,在新根下將訪問不到舊系統(tǒng)的根目錄結(jié)構(gòu)和文件,這樣就增強(qiáng)了系統(tǒng)的安全性。這個(gè)一般是在登錄 (login) 前使用 chroot,以此達(dá)到用戶不能訪問一些特定的文件。
  • 建立一個(gè)與原系統(tǒng)隔離的系統(tǒng)目錄結(jié)構(gòu),方便用戶的開發(fā);使用 chroot 后,系統(tǒng)讀取的是新根下的目錄和文件,這是一個(gè)與原系統(tǒng)根下文件不相關(guān)的目錄結(jié)構(gòu)。在這個(gè)新的環(huán)境中,可以用來測(cè)試軟件的靜態(tài)編譯以及一些與系統(tǒng)不相關(guān)的獨(dú)立開發(fā)。
  • 切換系統(tǒng)的根目錄位置,引導(dǎo) Linux 系統(tǒng)啟動(dòng)以及急救系統(tǒng)等。chroot 的作用就是切換系統(tǒng)的根位置,而這個(gè)作用最為明顯的是在系統(tǒng)初始引導(dǎo)磁盤的處理過程中使用,從初始 RAM 磁盤 (initrd) 切換系統(tǒng)的根位置并執(zhí)行真正的 init。另外,當(dāng)系統(tǒng)出現(xiàn)一些問題時(shí),我們也可以使用 chroot 來切換到一個(gè)臨時(shí)的系統(tǒng)。

但是Chroot并不能滿足我們之前提到的哪些需求,chroot的隔離功能非常有限,chroot的機(jī)制本身不是為限制資源的使用而設(shè)計(jì),如I/O,帶寬,磁盤空間或CPU時(shí)間。

為了實(shí)現(xiàn)我們之前提到的那些需求,我們需要一種更為強(qiáng)大的虛擬化技術(shù),容器也就隨之發(fā)展起來。

2.容器VS.虛機(jī)

Linux的容器和虛擬機(jī)的差比我想大家都比較了解了,我這里再簡(jiǎn)單敘述一下:

 

對(duì)于使用虛擬機(jī)的傳統(tǒng)虛擬化,每個(gè)虛擬機(jī)都有自己的完整操作系統(tǒng),因此在運(yùn)行內(nèi)置于虛擬機(jī)的應(yīng)用程序時(shí),內(nèi)存使用量可能會(huì)高于必要值,虛擬機(jī)可能會(huì)開始耗盡主機(jī)所需的資源。容器共享操作系統(tǒng)環(huán)境(內(nèi)核),因此它們比完整虛擬機(jī)使用更少的資源,并減輕主機(jī)內(nèi)存的壓力。

傳統(tǒng)虛擬機(jī)可占用大量磁盤空間:除了虛擬機(jī)托管的任何應(yīng)用程序外,它們還包含完整的操作系統(tǒng)和相關(guān)工具。

容器相對(duì)較輕:它們僅包含使容器化應(yīng)用程序運(yùn)行所需的庫(kù)和工具,因此它們比虛擬機(jī)更緊湊,并且啟動(dòng)速度更快。

在更新或修補(bǔ)操作系統(tǒng)時(shí),必須逐個(gè)更新傳統(tǒng)計(jì)算機(jī):必須單獨(dú)修補(bǔ)每個(gè)客戶操作系統(tǒng)。對(duì)于容器,只需更新容器主機(jī)(托管容器的機(jī)器)的操作系統(tǒng)。這顯著簡(jiǎn)化了維護(hù)。

利用這些優(yōu)勢(shì)容器在軟件開發(fā)領(lǐng)域里迅速發(fā)展,我已經(jīng)很習(xí)慣用容器去安裝各種軟件應(yīng)用,因?yàn)樗_銷很小,而且隔離性很好,我可以很方便的使用同一個(gè)軟件的多個(gè)版本而不用擔(dān)心沖突問題。

Linux的容器技術(shù)是如何做到這些的呢?我們來看看構(gòu)建容器技術(shù)的兩個(gè)核心功能命名空間Namespace和控制組CGroup。

3.命名空間Namespace

命名空間是Linux內(nèi)核的一項(xiàng)功能,該功能對(duì)內(nèi)核資源進(jìn)行分區(qū)。控制進(jìn)程可以訪問的資源,以使一組進(jìn)程看到一組資源,而另一組進(jìn)程看到另一組資源。資源可能存在于多個(gè)空間中。Linux系統(tǒng)以每種類型的單個(gè)名稱空間開始,供所有進(jìn)程使用。進(jìn)程可以創(chuàng)建其他名稱空間,并加入不同的名稱空間。

Linux下常見的命名空間有:

  • 掛載Mount mnt
  • 進(jìn)程Id pid
  • 網(wǎng)絡(luò) net
  • 進(jìn)程間通信 ipc
  • 用戶Id user
  • UTS

簡(jiǎn)單的講,利用Namespace可以實(shí)現(xiàn)我們想要的資源隔離,控制哪些資源可以使用。

4.控制組CGroup

CGroup 是 Control Groups 的縮寫,是 Linux 內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組 (process groups) 所使用的物理資源 (如 cpu memory i/o 等等) 的機(jī)制。2007 年進(jìn)入 Linux 2.6.24 內(nèi)核,CGroups 不是全新創(chuàng)造的,它將進(jìn)程管理從 cpuset 中剝離出來,作者是 Google 的 Paul Menage。CGroups 也是 LXC 為實(shí)現(xiàn)虛擬化所使用的資源管理手段。

CGroup 是將任意進(jìn)程進(jìn)行分組化管理的 Linux 內(nèi)核功能。CGroup 本身是提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),I/O 或內(nèi)存的分配控制等具體的資源管理功能是通過這個(gè)功能來實(shí)現(xiàn)的。這些具體的資源管理功能稱為 CGroup 子系統(tǒng)或控制器。CGroup 子系統(tǒng)有控制內(nèi)存的 Memory 控制器、控制進(jìn)程調(diào)度的 CPU 控制器等。運(yùn)行中的內(nèi)核可以使用的 Cgroup 子系統(tǒng)由/proc/cgroup 來確認(rèn)。

CGroup的主要功能:

  • 資源限制,可以將組設(shè)置為不超過配置的內(nèi)存限制,其中還包括文件系統(tǒng)緩存[8] [9]
  • 優(yōu)先次序,一些組可能會(huì)在CPU利用率或磁盤I / O吞吐量中獲得更大份額。
  • 會(huì)計(jì),衡量組的資源使用情況,例如可用于計(jì)費(fèi)目的
  • 控制,凍結(jié)進(jìn)程組,記錄檢查點(diǎn)并重新啟動(dòng)

CGroup常見的子系統(tǒng)包括:

  • blkio 對(duì)塊設(shè)備(比如硬盤)的IO進(jìn)行訪問限制
  • cpu 設(shè)置進(jìn)程的CPU調(diào)度的策略,比如CPU時(shí)間片的分配
  • memory 用于控制cgroup中進(jìn)程的占用以及生成內(nèi)存占用報(bào)告
  • net_cls 使用等級(jí)識(shí)別符(classid)標(biāo)記網(wǎng)絡(luò)數(shù)據(jù)包,這讓 Linux 流量控制器 tc (traffic controller) 可以識(shí)別來自特定 cgroup 的包并做限流或監(jiān)控
  • net_prio 設(shè)置cgroup中進(jìn)程產(chǎn)生的網(wǎng)絡(luò)流量的優(yōu)先級(jí)
  • hugetlb 限制使用的內(nèi)存頁(yè)數(shù)量
  • pids 限制任務(wù)的數(shù)量
  • ns 可以使不同cgroups下面的進(jìn)程使用不同的namespace.

每個(gè)subsystem會(huì)關(guān)聯(lián)到定義的cgroup上,并對(duì)這個(gè)cgroup中的進(jìn)程做相應(yīng)的限制和控制.

簡(jiǎn)單的講,利用CGroup,可以控制能使用的資源的量。

有了Namespace和CGroup這兩個(gè)特性,容器做到了控制資源隔離和訪問的量。但是我們還是需要方便的管理功能和接口,Docker在容器的基本功能的基礎(chǔ)上提供了出色的管理功能和接口,成為了容器領(lǐng)域里的事實(shí)標(biāo)準(zhǔn),我們一般說容器,默認(rèn)的是用Docker的技術(shù)。

5.Docker

Docker 是一個(gè)開放源代碼軟件,是一個(gè)開放平臺(tái),用于開發(fā)應(yīng)用、交付應(yīng)用、運(yùn)行應(yīng)用。Docker允許用戶將基礎(chǔ)設(shè)施中的應(yīng)用單獨(dú)分割出來,形成更小的顆粒,從而提高交付軟件的速度。Docker容器與虛擬機(jī)類似,但原理上,容器是將操作系統(tǒng)層虛擬化,虛擬機(jī)則是虛擬化硬件,因此容器更具有便攜性、高效地利用服務(wù)器。

Docker的主要特性有:

  • 分層容器

Docker使用AUFS / devicemapper / btrfs使用文件系統(tǒng)的只讀層來構(gòu)建容器。容器由只讀層組成,這些只讀層在提交后將成為容器映像。鏡像是一個(gè)包含用于構(gòu)建應(yīng)用程序的圖層的容器。當(dāng)docker容器運(yùn)行時(shí),只有頂層是可讀寫的,下面的所有層都是只讀的,頂層是臨時(shí)數(shù)據(jù),直到將其提交到新層為止。使用只讀文件系統(tǒng)的覆蓋層會(huì)帶來固有的復(fù)雜性和性能損失。

  • 單一應(yīng)用容器

Docker將容器限制為僅一個(gè)進(jìn)程。默認(rèn)的docker baseimage OS模板并非旨在支持多個(gè)應(yīng)用程序,進(jìn)程或服務(wù),如init,cron,syslog,ssh等。您可以想象這會(huì)引入一定的復(fù)雜性,并且對(duì)日常使用場(chǎng)景具有巨大的影響。由于當(dāng)前的體系結(jié)構(gòu),應(yīng)用程序和服務(wù)旨在在正常的多進(jìn)程OS環(huán)境中運(yùn)行,因此您需要找到一種Docker方式來做事或使用支持Docker的工具。對(duì)于LAMP容器的應(yīng)用程序,需要構(gòu)建3個(gè)相互使用服務(wù)的容器,一個(gè)PHP容器,一個(gè)Apache容器和一個(gè)MySQL容器。能在一個(gè)容器中建造所有3個(gè)容器嗎?可以,但無法在同一容器中運(yùn)行php-fpm,apache和mysqld,也無法安裝單獨(dú)的進(jìn)程管理器(如runit或supervisor)。

  • 狀態(tài)分離

Docker將容器存儲(chǔ)與應(yīng)用程序分開,可以在數(shù)據(jù)卷容器中將持久性數(shù)據(jù)安裝在主機(jī)中的容器外部。除非用例只是具有非持久性數(shù)據(jù)的容器,否則有可能使Docker容器的可移植性降低。這也是容器編排更容易支持無狀態(tài)應(yīng)用的根本原因。

  • 鏡像注冊(cè)

Docker提供了一個(gè)公共和私有鏡像注冊(cè),用戶可以在其中推送和提取鏡像。鏡像用于組成應(yīng)用程序的只讀層。這使用戶可以輕松共享和分發(fā)應(yīng)用程序。

 

 

 

 

上圖是Docker的架構(gòu)圖,我們看到Docker是如何提供容器的管理功能的。

  • Docker 守護(hù)進(jìn)程負(fù)責(zé)容器聲明周期的管理
  • Registry 提供容器鏡像倉(cāng)庫(kù)的功能
  • Docker 守護(hù)進(jìn)程負(fù)責(zé)從鏡像倉(cāng)庫(kù)推/拉取容器的鏡像
  • 客戶端程序負(fù)責(zé)和守護(hù)進(jìn)程通信,發(fā)送相關(guān)的容器管理的命令

在Docker 1.11版之前,Docker Engine守護(hù)進(jìn)程下載容器映像,啟動(dòng)容器進(jìn)程,公開遠(yuǎn)程API并充當(dāng)日志收集守護(hù)進(jìn)程,所有這些都以集中化進(jìn)程的身份以root身份運(yùn)行。盡管這樣的集中式體系結(jié)構(gòu)便于部署,但是它沒有遵循Unix進(jìn)程和特權(quán)分離的優(yōu)秀實(shí)踐;此外,這使得Docker難以與Linux初始系統(tǒng)(如upstart和systemd)正確集成。

如下圖所示,從1.11版開始,Docker守護(hù)程序不再處理容器本身的執(zhí)行。而是現(xiàn)在由containerd處理。更準(zhǔn)確地說,Docker守護(hù)程序?qū)⒂诚駵?zhǔn)備為開放容器鏡像(OCI)捆綁包,并對(duì)容器進(jìn)行API調(diào)用以啟動(dòng)OCI捆綁包。然后使用runC啟動(dòng)容器化容器。

 

 

 

 

那么ContainerD和RunC又分別是神馬東東呢?我們繼續(xù)探索。

6.ContainerD

Containerd是行業(yè)標(biāo)準(zhǔn)的容器運(yùn)行時(shí),重點(diǎn)是簡(jiǎn)單性,健壯性和可移植性。containerd可用作Linux和Windows的守護(hù)程序。它管理著主機(jī)系統(tǒng)的容器的整個(gè)生命周期,從鏡像傳輸和存儲(chǔ)到容器執(zhí)行和監(jiān)督,再到低級(jí)存儲(chǔ)再到網(wǎng)絡(luò)附件等等。containerd旨在嵌入到更大的系統(tǒng)中,而不是由開發(fā)人員或最終用戶直接使用。

containerD是用Go語言構(gòu)建的,有興趣的可以去看它的代碼:

https://github.com/containerd/containerd

7.RunC

RunC是一個(gè)輕量級(jí)的工具,它是用來運(yùn)行容器的,只用來做這一件事,并且這一件事要做好。我們可以認(rèn)為它就是個(gè)命令行小工具,可以不用通過 docker 引擎,直接運(yùn)行容器。事實(shí)上,runC 是標(biāo)準(zhǔn)化的產(chǎn)物,它根據(jù) OCI 標(biāo)準(zhǔn)來創(chuàng)建和運(yùn)行容器。而 OCI(Open Container Initiative)組織,旨在圍繞容器格式和運(yùn)行時(shí)制定一個(gè)開放的工業(yè)化標(biāo)準(zhǔn)。

RunC支持一普通用戶的身份運(yùn)行容器。

RunC支持容器的熱遷移操作,所謂熱遷移就是將一個(gè)容器進(jìn)行 checkpoint 操作,并獲得一系列文件,使用這一系列文件可以在本機(jī)或者其他主機(jī)上進(jìn)行容器的 restore 工作。這也是 checkpoint 和 restore 兩個(gè)命令存在的原因。熱遷移屬于比較復(fù)雜的操作,目前 runC 使用了 CRIU 作為熱遷移的工具。RunC 主要是調(diào)用 CRIU(Checkpoint and Restore in Userspace)來完成熱遷移操作。CIRU 負(fù)責(zé)凍結(jié)進(jìn)程,并將作為一系列文件存儲(chǔ)在硬盤上。并負(fù)責(zé)使用這些文件還原這個(gè)被凍結(jié)的進(jìn)程。

 

 

 

 

上圖顯示了不同的容器技術(shù)是如何使用RunC的,可以看到,Docker/Podman/CRI-O都使用了RunC。那么我們看看除了Docker,現(xiàn)在還有哪些容器的運(yùn)行時(shí)呢?

8.CRI-O

CRI-O是Kubernetes的輕量級(jí)容器運(yùn)行時(shí),這就是CRI-O提供的。該名稱源于CRI(Container Runtime Interface)加開放容器倡議(OCI open container initiative ),因?yàn)镃RI-O嚴(yán)格關(guān)注符合OCI的運(yùn)行時(shí)和容器映像。CRI-O的范圍是與Kubernetes一起使用,以管理和運(yùn)行OCI容器。盡管該項(xiàng)目確實(shí)具有一些用于故障排除的面向用戶的工具,但它并不是面向開發(fā)人員的工具。

 

 

 

 

上圖是CRI-O的架構(gòu)。

簡(jiǎn)而言之,CRI-O是用于Kubernetes內(nèi)部的容器運(yùn)行時(shí)接口的標(biāo)準(zhǔn)。它的出現(xiàn)我的理解是K8s(google)為了擺脫docker的束縛,走向開放平臺(tái)的一步棋。可以看到,Docker作為一個(gè)成功的技術(shù)產(chǎn)品,它在商業(yè)上卻似乎不是那么成功,k8s如果完成對(duì)docker的解耦,docker的前景似乎不太妙。

9.Podman

守護(hù)進(jìn)程是人們對(duì)Docker架構(gòu)的主要詬病,它帶來了很多管理和安全上的問題。

Podman是一個(gè)無守護(hù)進(jìn)程的容器引擎,用于在Linux系統(tǒng)上開發(fā),管理和運(yùn)行OCI容器。容器可以以root用戶或普通用戶的模式運(yùn)行。

 

 

 

 

Podman管理容器使用傳統(tǒng)的fork / exec模型,因此容器進(jìn)程是Podman進(jìn)程的后代。Docker使用客戶端/服務(wù)器模型。執(zhí)行的docker命令是Docker客戶端工具,它通過客戶端/服務(wù)器操作與Docker守護(hù)進(jìn)程通信。然后,Docker守護(hù)程序創(chuàng)建容器并處理stdin / stdout與Docker客戶端工具的通信。Podman可以運(yùn)行于非root用戶模式下,而docker的守護(hù)進(jìn)程必須用root用戶啟動(dòng)。Podman的模型被認(rèn)為是更為安全的模型。同時(shí)因?yàn)槲ㄓ惺刈o(hù)進(jìn)程,你的系統(tǒng)看上去也更為干凈。

當(dāng)然Podman的問題是它還很新,管理工具和功能都很弱,你可能需要buildah來構(gòu)建鏡像,社區(qū)和生態(tài)都還很小。如果你想用Podman取代Docker,請(qǐng)謹(jǐn)慎操作。

10.LXC/LXD

LXC是Linux內(nèi)核容器功能的用戶空間接口。通過功能強(qiáng)大的API和簡(jiǎn)單的工具,它使Linux用戶可以輕松地創(chuàng)建和管理系統(tǒng)或應(yīng)用程序容器。

LXC是一個(gè)系統(tǒng)容器運(yùn)行時(shí),旨在執(zhí)行“完整的系統(tǒng)容器”,通常由完整的操作系統(tǒng)映像組成。在最常見的用例中,LXC進(jìn)程將引導(dǎo)完整的Linux發(fā)行版,如Debian,F(xiàn)edora,Arch等,并且用戶將與虛擬機(jī)映像進(jìn)行交互。LXC也可以用于運(yùn)行(但不下載)應(yīng)用程序容器,但是這種用法需要對(duì)底層操作系統(tǒng)的詳細(xì)信息有更多的了解,并且這種做法不太常見。LXC可以從各種公共鏡像下載“完整系統(tǒng)容器”映像,并以密碼方式對(duì)其進(jìn)行驗(yàn)證。LXC沒有中央守護(hù)程序,可以與instart系統(tǒng)(例如upstart和systemd)集成。

LXD與LXC相似,但它是liblxc之上的REST API,它派生了一個(gè)監(jiān)視器和容器進(jìn)程。這樣可以確保LXD守護(hù)程序不是故障的中心點(diǎn),并且在LXD守護(hù)程序發(fā)生故障的情況下容器可以繼續(xù)運(yùn)行。所有其他細(xì)節(jié)與LXC幾乎相同。簡(jiǎn)單的說LXD = LXC + RestAPI

LXC是一種容器技術(shù),可為您提供輕量級(jí)Linux容器,而Docker是基于容器的單個(gè)應(yīng)用程序虛擬化引擎。它們聽起來可能相似,但完全不同。與LXC容器不同,Docker容器的行為不像輕量級(jí)VM,因此不能被視為輕量級(jí)VM。Docker容器在設(shè)計(jì)上僅限于單個(gè)應(yīng)用程序。你可以登錄到LXC容器,將其像OS一樣對(duì)待,然后安裝您的應(yīng)用程序和服務(wù),它將按預(yù)期運(yùn)行。您無法在Docker容器中做到這一點(diǎn)。Docker基礎(chǔ)OS模板被簡(jiǎn)化為單個(gè)應(yīng)用程序環(huán)境,并且沒有適當(dāng)?shù)某跏蓟蛑С种T如服務(wù),守護(hù)程序,syslog,cron或運(yùn)行多個(gè)應(yīng)用程序之類的東西。

11.rkt

rkt是為現(xiàn)代生產(chǎn)云原生環(huán)境開發(fā)的應(yīng)用程序容器引擎。它具有pod-native方法,可插入執(zhí)行環(huán)境以及定義明確的表面積,使其非常適合與其他系統(tǒng)集成。

rkt的核心執(zhí)行單元是Pod,它是在共享上下文中執(zhí)行的一個(gè)或多個(gè)應(yīng)用程序的集合(rkt的Pod與Kubernetes編排系統(tǒng)中的概念同義)。rkt允許用戶在Pod級(jí)別和更細(xì)粒度的每個(gè)應(yīng)用程序級(jí)別應(yīng)用不同的配置(例如隔離參數(shù))。rkt的體系結(jié)構(gòu)意味著在一個(gè)獨(dú)立的,獨(dú)立的環(huán)境中,每個(gè)pod都可以直接在經(jīng)典的Unix流程模型(即沒有中央守護(hù)程序)中執(zhí)行。rkt實(shí)施了現(xiàn)代,開放,標(biāo)準(zhǔn)的容器格式,即App Container(appc)規(guī)范,但還可以執(zhí)行其他容器映像,例如使用Docker創(chuàng)建的那些。

自2014年12月由CoreOS引入以來,rkt項(xiàng)目已經(jīng)非常成熟并得到了廣泛使用。它可用于大多數(shù)主要的Linux發(fā)行版,并且每個(gè)rkt發(fā)行版都會(huì)構(gòu)建供用戶安裝的獨(dú)立rpm / deb軟件包。這些軟件包還可以作為Kubernetes存儲(chǔ)庫(kù)的一部分使用,以支持rkt + Kubernetes集成的測(cè)試。rkt在Google Container Image和CoreOS Container Linux如何運(yùn)行Kubernetes方面也起著核心作用。RKT以其快速,可組合和安全的提供功能而聞名。許多用戶已經(jīng)注意到docker的安全問題,因此CoreOS必須在2014年發(fā)布RKT作為docker的競(jìng)爭(zhēng)對(duì)手,并且由于其功能(如安全性,可互操作性等)而變得流行。

類似Podman,rkt沒有集中的守護(hù)進(jìn)程,而是直接從客戶端命令啟動(dòng)容器,從而使其與系統(tǒng)初始化功能(例如systemd,upstart等)兼容。

12.Kata Container

Kata Containers 是由 OpenStack 基金會(huì)管理,但獨(dú)立于 OpenStack 項(xiàng)目之外的容器項(xiàng)目。它是一個(gè)可以使用容器鏡像以超輕量級(jí)虛機(jī)的形式創(chuàng)建容器的運(yùn)行時(shí)工具,Kata Containers 創(chuàng)建的不同容器跑在一個(gè)個(gè)不同的虛擬機(jī)(kernel)上,比起傳統(tǒng)容器提供了更好的隔離性和安全性。同時(shí)繼承了容器快速啟動(dòng)和快速部署等優(yōu)點(diǎn)。

我們之前提到了虛擬機(jī)技術(shù)因?yàn)槠溟_銷的原因,受到了一定的使用限制。Kata Container可以說是虛擬機(jī)技術(shù)的逆襲,可以多快好省的建設(shè)容器社會(huì)。

 

 

 

 

如上圖的架構(gòu)所示,Kata Containers 其實(shí)跟 RunC 類似,也是一個(gè)符合 OCI 運(yùn)行時(shí)規(guī)范的一種實(shí)現(xiàn)。不同之處是它給每個(gè) Docker 容器或每個(gè) K8S Pod 增加了一個(gè)獨(dú)立的 Linux 內(nèi)核 (不共享宿主機(jī)的內(nèi)核),使容器具有更好的隔離性、安全性。

13.其他

除了我們之前提到的,還有其他一些容器技術(shù),我們簡(jiǎn)單的看看。

  • systemd-nspawn是一個(gè)容器運(yùn)行時(shí),旨在在Linux容器內(nèi)部執(zhí)行進(jìn)程。systemd-nspawn的名字來源從“從命名空間spawn”,這意味著它僅處理進(jìn)程隔離,而不執(zhí)行內(nèi)存,CPU等資源隔離。systemd-nspawn可以運(yùn)行應(yīng)用程序容器或系統(tǒng)容器,但不能單獨(dú)運(yùn)行,下載或驗(yàn)證鏡像。systemd-nspawn沒有集中的守護(hù)程序,可以與系統(tǒng)啟動(dòng)(例如upstart和systemd)集成。
  • OpenVZ OpenVZ是基于Linux內(nèi)核的操作系統(tǒng)級(jí)虛擬化技術(shù)。OpenVZ允許物理服務(wù)器運(yùn)行多個(gè)操作系統(tǒng),該技術(shù)常用于虛擬專用服務(wù)器(VPS,Virtual Private Server)。OpenVZ是一種系統(tǒng)容器運(yùn)行時(shí),旨在執(zhí)行通常是完整系統(tǒng)映像的“完整系統(tǒng)容器”。在最常見的用例中,OpenVZ進(jìn)程將引導(dǎo)完整的Linux 發(fā)行版,例如Debian,F(xiàn)edora,Arch等,并且用戶將與虛擬機(jī)映像類似地與其交互。OpenVZ可以從各種公共鏡像下載“完整系統(tǒng)容器”鏡像,并以密碼方式對(duì)其進(jìn)行驗(yàn)證。OpenVZ沒有中央守護(hù)程序,可以與inup系統(tǒng)(例如upstart和systemd)集成。
  • FreeBSD jail,一種操作系統(tǒng)層虛擬化技術(shù),在FreeBSD操作系統(tǒng)中運(yùn)作。利用這個(gè)技術(shù),F(xiàn)reeBSD的系統(tǒng)管理者,可以創(chuàng)造出幾個(gè)小型的軟件系統(tǒng),這些軟件系統(tǒng)被稱為jail。這個(gè)技術(shù)被Poul-Henning Kamp采納,加入FreeBSD系統(tǒng)中。
  • Solaris Containers,以及Solaris Zones,一個(gè)操作系統(tǒng)層虛擬化技術(shù)的實(shí)作,由Sun開發(fā)。2004年2月,伴隨著Solaris 10 build 51 beta首次對(duì)外發(fā)布,經(jīng)過完整測(cè)試后,在2005年,與Solaris 10一同完整發(fā)布。
  • Linux-VServer是通過向Linux內(nèi)核添加操作系統(tǒng)級(jí)虛擬化功能而創(chuàng)建的虛擬專用服務(wù)器實(shí)現(xiàn)。它是作為開源軟件開發(fā)和發(fā)布的。

14.總結(jié)

隨著微服務(wù)和云原生技術(shù)的大行其道,容器的生態(tài)系統(tǒng)的吸引了越來越多的玩家。Docker作為昔日王者,受到了諸多其它后起之秀的挑戰(zhàn),我們可以預(yù)期未來更多的組織會(huì)加入到下面的這張圖里。

 

 

 

 

希望本文能夠幫助你了解容器技術(shù)的基本知識(shí),在面對(duì)諸多容器技術(shù)的術(shù)語和各種容器運(yùn)行時(shí)的時(shí)候,不再手足無措。

 

責(zé)任編輯:華軒 來源: EAWorld
相關(guān)推薦

2024-03-20 10:46:00

云原生容器

2019-12-10 08:00:46

Kata容器Linux

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運(yùn)行鏡像開放

2023-08-29 08:20:35

Kubernete跨云容器

2023-01-03 09:10:21

2021-10-22 00:09:16

Kubernetes容器接口

2021-09-02 05:37:22

Containerd Kubernetes 容器

2021-07-27 10:52:27

iOS WKWebView容器

2021-12-23 07:58:06

Kubelet容器運(yùn)行

2020-06-05 10:36:30

云計(jì)算容器安全

2023-04-03 13:01:14

UbuntuCRI-O

2015-07-20 15:44:46

Swift框架MJExtension反射

2012-05-01 08:06:49

手機(jī)

2015-09-14 09:28:47

2009-02-19 10:21:00

路由多WAN口

2015-08-13 10:54:46

2021-03-18 16:05:20

SSD存儲(chǔ)故障

2012-07-13 00:03:08

WEB前端開發(fā)WEB開發(fā)

2018-12-26 13:22:05

NVMeNVMe-oF數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩欧美在线观看视频 | 欧美黄 片免费观看 | 日日日操| 伊人久久大香线 | 欧美一区二区三区在线播放 | 天堂成人国产精品一区 | 成人亚洲精品 | 国产精品视频一二三区 | 亚洲国产精品久久 | 色男人天堂av | 91国内在线观看 | 国产精品日产欧美久久久久 | 国产在线高清 | 国产精品久久久乱弄 | 国产区精品 | 91视频大全| 欧美亚洲综合久久 | 91中文字幕| 免费毛片网 | 欧美 日韩 国产 一区 | 国产高清免费视频 | 国产成人精品999在线观看 | 日p视频免费看 | 在线亚洲人成电影网站色www | 欧美aaaa视频 | 综合成人在线 | 国产清纯白嫩初高生在线播放视频 | 成人av资源在线 | 青青草亚洲 | 久久成人一区 | 日韩av在线一区二区 | 久久一区二区三区四区 | 成人精品毛片 | 一区二区在线免费播放 | 欧美日韩看片 | 成人精品一区二区三区 | 情侣黄网站免费看 | 亚洲综合首页 | 欧美亚洲视频 | 欧美日韩久久 | 中文字幕在线观看 |