国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析

這篇具有很好參考價值的文章主要介紹了DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee


容器技術方案)

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

功能介紹以及代碼架構解析

iSulad是啥

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

每天逛這openEuler的社區(qū)和社群,總是看到iSulad,今天啃已啃這個項目的入門玩法:
DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

iSulad怎么用:先看大佬咋說——maintainer李峰

iSulad 輕量級容器引擎功能介紹以及代碼架構解析

lifeng2221dd1 2020-09-14

作者簡介:李峰, 具有多年容器、操作系統(tǒng)軟件開發(fā)經(jīng)驗,對容器引擎、runtime 等領域有比較深入的研究與理解。深度參與 lxc、containers 等開源容器社區(qū)。現(xiàn)在擔任 openEuler 輕量級容器引擎 iSulad 社區(qū) maintainer。
DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

iSulad 是一種由 C/C++編程語言編寫的容器引擎,當前已經(jīng)在 openEuler 社區(qū)開源(https://gitee.com/openeuler/iSulad)。 當前主流的容器引擎 docker、containerd、cri-o 等均是由 GO 語言編寫。隨著邊緣計算、物聯(lián)網(wǎng)等嵌入式設備場景的不斷興起,在資源受限環(huán)境下,業(yè)務容器化的需求越來越強烈。由高級語言編寫的容器引擎在底噪占用上的劣勢越來越凸顯。另外由于容器引擎對外接口的標準化,因此用 C/C++重寫一個容器引擎成為了可能。iSulad 整體架構如下圖所示。

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

iSulad
iSulad 對外提供命令行以及基于 gRPC 的 CRI 兩種對外接口,其中核心功能根據(jù)業(yè)務分為鏡像管理和容器管理。

通過下圖可以理解 iSulad 在生態(tài)中的定位。

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

本文介紹 iSulad 的功能特性以及對整體架構進行介紹。

iSulad 功能特性介紹
提供客戶端命令行進行容器、鏡像操作
iSulad 是典型的 CS 架構模式。iSulad 作為 daemon 服務端,同時也提供了單獨的客戶端命令 isula,供用戶使用。

iSula 提供的命令參數(shù)覆蓋了常用的大部分的應用場景。包含容器的操作接口,如運行、停止、刪除、pause 等操作,也包含了鏡像相關的操作,如下載、導入、刪除等。

$ sudo isula --help
USAGE:
	isula <command> [args...]

COMMANDS:

attach 	Attach to a running container
	cp     	Copy files/folders between a container and the local filesystem
	create 	Create a new container
	events 	Get real time events from the server
	exec   	Run a command in a running container
	export 	export container
	images 	List images
	import 	Import the contents from a tarball to create a filesystem image
	info   	Display system-wide information
	inspect	Return low-level information on a container or image
	kill   	Kill one or more  running containers
	load   	load an image from a tar archive
	login  	Log in to a Docker registry
	logout 	Log out from a Docker registry
	logs   	Fetch the logs of a container
	pause  	Pause all processes within one or more containers
	ps     	List containers
	pull   	Pull an image or a repository from a registry
	rename 	Rename a container
	restart	Restart one or more containers
	rm     	Remove one or more containers
	rmi    	Remove one or more images
	run    	Run a command in a new container
	start  	Start one or more stopped containers
	stats  	Display a live stream of container(s) resource usage statistics
	stop   	Stop one or more containers
	tag    	Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
	top    	Display the running processes of a container
	unpause	Unpause all processes within one or more containers
	update 	Update configuration of one or more containers
	version	Display information about isula
	wait   	Block until one or more containers stop, then print their exit codes

使用舉例
假設您使用的為openeuler發(fā)行版本,可以采用以下方式使用iSulad。

使用yum命令安裝isulad

[root@openeuler ~]# yum install -y iSulad

安裝完成后,查看服務運行狀態(tài)

[root@openeuler ~]# systemctl status isulad
● isulad.service - iSulad Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/isulad.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-09-14 15:53:43 CST; 4h 35min ago
 Main PID: 1248 (isulad)
    Tasks: 25
   Memory: 88.3M
   CGroup: /system.slice/isulad.service
           ├─1248 /usr/bin/isulad

修改isulad的配置文件,添加鏡像倉庫地址

[root@openeuler iSula]# vi /etc/isulad/daemon.json   
{
    .......
    "registry-mirrors": [
        "hub.oepkgs.net"
    ],
    .......

重啟isulad服務

[root@openeuler iSula]# systemctl restart isulad

基于openeuler:20.09鏡像運行容器
創(chuàng)建容器:

[root@openeuler iSula]# isula create -it openeuler/openeuler:20.09
Unable to find image 'openeuler/openeuler:20.09' locally
Image "openeuler/openeuler:20.09" pulling
Image "8c788f4bfb7290e434b2384340a5f9811db6ed302f9247c5fc095d6ec4fc8f32" pulled
e91e5359be653f534312bc2b4703dcc6c4ca0436ac7819e09e1ff0e75ee1d733

由于沒有運行容器,所以利用isula ps命令無法找到剛剛創(chuàng)建的容器:

[root@openeuler iSula]# isula ps
CONTAINER ID	IMAGE				COMMAND	CREATED		STATUS	PORTS	NAMES

可以使用isula pa –a命令可以找到剛剛創(chuàng)建的容器:

[root@ecs-cdf3 ~]# isula ps -a
CONTAINER ID	IMAGE				COMMAND	CREATED		STATUS	PORTS	NAMES
e91e5359be65		openeuler/openeuler:20.09	"/bin/bash"		8 seconds ago	Created	 e91e5359be653f534312bc2b4703dcc6c4ca0436ac7819e09e1ff0e75ee1d733

啟動容器:

[root@openeuler iSula]# isula start e91e5359be65

由于已經(jīng)運行容器,可以利用isula ps命令查找運行中的容器

[root@openeuler iSula]# isula ps
CONTAINER ID	IMAGE				COMMAND	CREATED		STATUS	PORTS	NAMES
e91e5359be65		openeuler/openeuler:20.09	"/bin/bash"		30 seconds ago	Up 4 seconds	     e91e5359be653f534312bc2b4703dcc6c4ca0436ac7819e09e1ff0e75ee1d733

執(zhí)行命令輸出容器系統(tǒng)版本信息:

[root@ecs-cdf3 ~]# isula exec e91e5359be65 cat /etc/os-release
NAME="openEuler"
VERSION="20.09"
ID="openEuler"
VERSION_ID="20.09"
PRETTY_NAME="openEuler 20.09"
ANSI_COLOR="0;31"

可以看到我們在openeuler 20.03系統(tǒng)上成功運行openeuler 20.09容器。

暫停/恢復一個容器

[root@openeuler iSula]# isula pause e91e5359be65
e91e5359be65
[root@openeuler iSula]# isula unpause e91e5359be65
e91e5359be65

強制刪除運行中的容器

[root@openeuler iSula]# isula rm -f 6c1d81467d33
6c1d81467d3367a90dd6e388a16c80411d4ba76316d86b6f56463699306e1394

刪除鏡像

[root@openeuler iSula]# isula rmi openeuler/openeuler:20.09
Image " openeuler/openeuler:20.09" removed

支持 CRI 標準協(xié)議
CRI(Container Runtime Interface)是由 K8S 定義的容器引擎需要向 k8S 對外提供的容器和鏡像的服務的接口,供容器引擎接入 K8S。

CRI 接口基于 gRPC 實現(xiàn)。iSulad 遵循 CRI 接口規(guī)范,實現(xiàn) CRI gRPC Server,包括 Runtime Service 和 Image Service 分別用來提供容器運行時接口和鏡像操作接口。iSulad 的 gRPC Server 需要監(jiān)聽本地的 Unix socket,而 K8S 的組件 kubelet 則作為 gRPC Client 運行。

iSulad
支持 CNI 網(wǎng)絡標準協(xié)議
CNI(Container Network Interface) 是 google 和 CoreOS 主導制定的容器網(wǎng)絡標準協(xié)議。通過 CNI 協(xié)議,iSulad 通過 JSON 格式的文件與具體網(wǎng)絡插件進行通信,進而實現(xiàn)容器的網(wǎng)絡功能。容器網(wǎng)絡具體的功能均由網(wǎng)絡插件來實現(xiàn)。iSulad 中使用 C 語言實現(xiàn)了 clibcni 接口模塊,用來實現(xiàn)對應功能。

iSulad
遵循 OCI 標準
OCI 包含兩個標準規(guī)范 容器運行時標準 (runtime spec)和 容器鏡像標準(image spec)。

支持 OCI 標準鏡像格式
首先介紹下,什么是容器鏡像。容器運行所需的 rootfs 以及一些資源配置等信息被打包成特定的數(shù)據(jù)結構,稱為容器鏡像?;谌萜麋R像可以方便地運行容器。由于運行環(huán)境和應用被一起打包到了容器鏡像中,這樣就解決了應用部署時的環(huán)境依賴問題。每個容器鏡像由一個或多個層數(shù)據(jù)、以及一個 config.json 配置文件組成。多個層之間有依賴關系,這種依賴關系稱為父子關系(被依賴的層為父層)。運行容器之前,所有層的數(shù)據(jù)會合并掛載成一個 rootfs 供容器使用,稱為容器層。合并后的數(shù)據(jù)如果有沖突,則子層的數(shù)據(jù)會覆蓋父層中路徑名稱都相同的數(shù)據(jù),鏡像組織結構如下圖所示:

iSulad-img-single
鏡像的分層是為了解決空間占用問題。如果本層及其所有遞歸依賴的父層具有相同的數(shù)據(jù),這些數(shù)據(jù)就可以復用,以減少空間占用。下圖描述的是具有相同 layer0 層和 layer1 層的兩個容器鏡像的數(shù)據(jù)復用結構:

iSulad-img-dual
iSulad 支持 OCI 標準鏡像格式以及與 docker 兼容的鏡像格式。能夠 支持從 docker hub 等鏡像倉庫下載容器鏡像,或者導入由 docker 導出的鏡像文件來啟動容器使用。

支持 OCI 標準 runtime
iSulad 支持標準 OCI runtime 操作接口,可以進行容器生命周期管理。iSulad 不僅支持當前主流的容器 runtime 如 runc、kata,而且針對低底噪的需求,將 C 語言編寫的 lxc 進行了適配修改,使其能夠作為支持 OCI 標準協(xié)議的 C 語言 runtime,進一步降低了容器引擎基礎設施底噪開銷。 ? 下面使用 iSulad 來運行一個新的容器,通過查看運行過程中產(chǎn)生的進程以及持久化的配置,理解運行新容器的過程。

運行容器,首先需要下載鏡像,我們使用 前文中提到的 openeuler/openeuler:20.09 來作為容器鏡像。

調(diào)用 isula 客戶端命令下載鏡像。

$ sudo isula pull openeuler/openeuler:20.09
Image "openeuler/openeuler:20.09" pulling
Image "c7c37e472d31c1685b48f7004fd6a64361c95965587a951692c5f298c6685998" pulled

運行容器指創(chuàng)建一個新的容器,并啟動它。

$ sudo isula run -itd openeuler/openeuler:20.09
42fc2595f876b5a18f7729dfb10d0def29789fb73fe0f1327e0277e6d85189a1

運行容器后,可以通過本地文件查看持久化的容器配置文件。

# cd /var/lib/isulad/engines/lcr/42fc2595f876b5a18f7729dfb10d0def29789fb73fe0f1327e0277e6d85189a1
# ls -al
total 92
drwxr-x--- 3 root root  4096 727 16:25 .
drwxr-x--- 3 root root  4096 727 16:25 ..
-rw-r----- 1 root root  4045 727 16:25 config
-rw-r----- 1 root root 23878 727 16:25 config.json
-rw-r----- 1 root root  2314 727 16:25 config.v2.json
-rw-r----- 1 root root     0 727 16:25 console.log
-rw-r----- 1 root root   101 727 16:25 hostconfig.json
-rw-r--r-- 1 root root    10 727 16:25 hostname
-rw-r--r-- 1 root root   183 727 16:25 hosts
drwx------ 3 root root  4096 727 16:25 mounts
-rw-r----- 1 root root     5 727 16:25 ocihooks.json
-rw-r--r-- 1 root root   707 727 16:25 resolv.conf
-rw-r----- 1 root root 26140 727 16:25 seccomp

其中 config.json 文件為符合 OCI 標準協(xié)議的容器配置文件,內(nèi)容包括啟動容器所需的配置信息。

# cat config.json
{
    "ociVersion": "1.0.1",
    "hooks": {

    },
    "hostname": "localhost",
    "mounts": [
        {
            "source": "tmpfs",
            "destination": "/dev",
            "options": [
                "nosuid",
                "strictatime",
                "mode=755",
                "size=65536k"
            ],
            "type": "tmpfs"
        },
        {
            "source": "mqueue",
            "destination": "/dev/mqueue",
            "options": [
                "nosuid",
                "noexec",
                "nodev"
            ],
            "type": "mqueue"
        },
        ...

config.v2.json 為 iSulad 維護管理容器持久化的一些信息,包括容器的基礎配置,以及創(chuàng)建時間,啟動時間,容器的 PID、運行啟動時間等信息。

# cat config.v2.json


{
    "CommonConfig": {
        "Path": "sh",
        "Config": {
            "Hostname": "localhost",
            "User": "",
            "Tty": true,
            "OpenStdin": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "sh"
            ],
            "WorkingDir": "",
            "LogDriver": "json-file"
        },
        "Created": "2020-07-27T16:25:16.170149428+08:00",
        "Image": "openeuler/openeuler:20.09",
        "ImageType": "oci",
        "Name": "42fc2595f876b5a18f7729dfb10d0def29789fb73fe0f1327e0277e6d85189a1",
        "id": "42fc2595f876b5a18f7729dfb10d0def29789fb73fe0f1327e0277e6d85189a1"
    },
    "Image": "sha256:c7c37e472d31c1685b48f7004fd6a64361c95965587a951692c5f298c6685998",
    "State": {
        "FinishedAt": "0001-01-01T00:00:00Z",
        "Pid": 19232,
        "PPid": 19229,
        "StartTime": 2731408,
        "PStartTime": 2731402,
        "Running": true,
        "StartedAt": "2020-07-27T16:25:16.286812971+08:00"
    }
}
  • 性能表現(xiàn)
    DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

iSulad 代碼架構介紹
前面介紹了 iSulad 的主要的功能特性,現(xiàn)在讓我們深入到 iSulad 的代碼中,了解下 iSulad 的代碼組織架構。

DDD 分層架構設計
iSulad 采用 DDD(Domain Driven Design,領域驅動設計)的思想進行架構分層組織,層次劃分如下:

ddd
各邏輯分層劃分以及對應的職責如下:

層次 職責劃分
用戶界面 負責向用戶展現(xiàn)信息以及解釋用戶命令
接口層 客戶端服務端通信接口、CRI 接口的定義與實現(xiàn)
應用層 調(diào)用領域層的接口,實現(xiàn)對應的業(yè)務應用
領域層 本層包含關于領域的信息,這是 iSulad 軟件的核心所在。包含多種模塊,業(yè)務邏輯實際的執(zhí)行層
基礎設施層 本層作為其他層的支撐庫。它提供各種工具函數(shù)供其他層次調(diào)用使用
根據(jù)上述邏輯分層的設計思想,iSulad 對應源碼目錄架構設計為:

iSulad-img-single
其中 api 目錄中定義了 iSulad 對外提供的 gRPC 服務的 proto 文件,在編譯時會使用 grpc 生成對應客戶端、服務端代碼。

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee

各層代碼組織結構
用戶界面層
用戶界面層的代碼位于 src/cmd 目錄下,在該目錄下,提供了 iSulad 對外的命令行接口。在 cmd 目錄下,提供了 isula 客戶端、isulad 服務端、isulad-shim 三個命令行相關的命令行解析、參數(shù)顯示。代碼組織結構如下:

├── CMakeLists.txt
├── command_parser.c
├── command_parser.h
├── isula # 客戶端命令行以及子命令的定義
│   ├── base # 容器操作基礎命令,如創(chuàng)建、啟動、刪除等命令
│   ├── client_arguments.c
│   ├── client_arguments.h
│   ├── CMakeLists.txt
│   ├── extend  # 容器操作擴展命令,如update更新容器資源、events查看容器事件日志
│   ├── images # 鏡像相關操作命令,如下載、導入、刪除等操作
│   ├── information # 查詢?nèi)萜餍畔⒉僮髅睿鏸nspect、info等操作
│   ├── isula_commands.c
│   ├── isula_commands.h
│   ├── main.c
│   └── stream  # 長連接命令,如cp、attach、exec等需要與服務端進行長連接操作的命令
├── isulad # 服務端命令行以及參數(shù)的定義
│   ├── CMakeLists.txt
│   ├── isulad_commands.c
│   ├── isulad_commands.h
│   └── main.c
└── isulad-shim # isulad-shim命令行以及參數(shù)的定義
│   ├── CMakeLists.txt
│   ├── common.c
│   ├── common.h
│   ├── main.c
│   ├── process.c
│   ├── process.h
│   ├── terminal.c
│   └── terminal.h
└── options # 通用的參數(shù)解析方法
│   ├── CMakeLists.txt
│   ├── opt_log.c
│   ├── opt_log.h
│   ├── opt_ulimit.c
│   └── opt_ulimit.h

接口層
iSulad 的接口層代碼位于 src/daemon/entry 目錄,其中提供了客戶端服務端通信接口、CRI 接口的定義。

用以處理客戶端接口的請求以及 CRI 接口請求。

其中 CRI 接口處理中,可以從文件名中看到,iSulad 分別實現(xiàn)了 image 和 runtime 的兩種 service。

├── CMakeLists.txt
├── connect # 處理客戶端請求
│   ├── CMakeLists.txt
│   ├── grpc # grpc 請求接口處理
│   ├── rest # restful 請求接口處理
│   ├── service_common.c
│   └── service_common.h
└── cri  # 處理CRI接口請求
    ├── checkpoint_handler.cc
    ├── checkpoint_handler.h
    ├── CMakeLists.txt
    ├── cni_network_plugin.cc
    ├── cni_network_plugin.h
    ├── cri_container.cc # cri接口中容器相關操作請求接口處理
    ├── cri_container.h
    ├── cri_image_service.cc # cri接口中image相關操作請求接口處理
    ├── cri_image_service.h
    ├── cri_runtime_service.cc  # cri接口中runtime相關操作請求接口處理
    ├── cri_runtime_service.h
    ├── cri_sandbox.cc # cri接口中pod相關操作請求接口處理
    ├── cri_sandbox.h
    ├── cri_security_context.cc # cri接口中安全配置處理
    ├── cri_security_context.h
    └── websocket  # 使用websocket服務處理CRI 流式服務請求

應用層
iSulad 的應用層代碼位于 src/daemon/executor 目錄,其作用為調(diào)用領域層的接口,實現(xiàn)對應的業(yè)務應用,屬于業(yè)務調(diào)度層??梢詮奈募A的命名中看到,應用層分別實現(xiàn)了 image 和 runtime 的兩種業(yè)務模塊。

├── callback.c
├── callback.h
├── CMakeLists.txt
├── container_cb # 容器業(yè)務模塊
│   ├── CMakeLists.txt
│   ├── execution.c
│   ├── execution_create.c
│   ├── execution_create.h
│   ├── execution_extend.c
│   ├── execution_extend.h
│   ├── execution.h
│   ├── execution_information.c
│   ├── execution_information.h
│   ├── execution_network.c
│   ├── execution_network.h
│   ├── execution_stream.c
│   ├── execution_stream.h
│   ├── list.c
│   └── list.h
└── image_cb # 鏡像業(yè)務模塊
    ├── CMakeLists.txt
    ├── image_cb.c
    └── image_cb.h

領域層
領域層包含領域的信息,這是 iSulad 軟件的核心所在。其中包含各個業(yè)務模塊,是業(yè)務邏輯實際的執(zhí)行層。領域層代碼位于 src/daemon/modules。

├── api # 領域層統(tǒng)一對外提供的頭文件,供應用層調(diào)用
│   ├── CMakeLists.txt
│   ├── container_api.h
│   ├── events_collector_api.h
│   ├── events_sender_api.h
│   ├── event_type.h
│   ├── image_api.h
│   ├── io_handler.h
│   ├── log_gather_api.h
│   ├── plugin_api.h
│   ├── runtime_api.h
│   ├── service_container_api.h
│   ├── service_image_api.h
│   └── specs_api.h
├── CMakeLists.txt
├── container # 容器模塊,維護容器全生命周期,維護容器狀態(tài)
│   ├── CMakeLists.txt
│   ├── container_events_handler.c
│   ├── container_events_handler.h
│   ├── container_gc
│   ├── containers_store.c
│   ├── containers_store.h
│   ├── container_state.c
│   ├── container_state.h
│   ├── container_unix.c
│   ├── container_unix.h
│   ├── health_check
│   ├── restart_manager
│   ├── restore
│   └── supervisor
├── events # 事件收集模塊,負責收集iSulad運行過程中產(chǎn)生的容器、鏡像事件
│   ├── CMakeLists.txt
│   ├── collector.c
│   ├── monitord.c
│   └── monitord.h
├── events_sender  # 事件發(fā)送模塊,該接口提供向事件收集模塊發(fā)送事件的接口
│   ├── CMakeLists.txt
│   └── event_sender.c
├── image # 鏡像管理模塊
│   ├── CMakeLists.txt
│   ├── embedded # embedded格式鏡像管理
│   ├── external # external格式鏡像管理
│   ├── image.c
│   ├── image_rootfs_handler.c
│   ├── image_rootfs_handler.h
│   └── oci	# oci格式鏡像管理
├── log # 日志收集模塊
│   ├── CMakeLists.txt
│   └── log_gather.c
├── plugin # 插件機制模塊
│   ├── CMakeLists.txt
│   ├── plugin.c
│   ├── pspec.c
│   └── pspec.h
├── runtime # 容器運行時模塊
│   ├── CMakeLists.txt
│   ├── engines # 基于lxc的輕量級runtime對接接口
│   ├── isula # oci 標準runtime對接接口
│   └── runtime.c
├── service # 服務模塊,包含多個模塊協(xié)同調(diào)用的實現(xiàn)
│   ├── CMakeLists.txt
│   ├── io_handler.c
│   ├── service_container.c # 容器服務操作接口
│   └── service_image.c  # 鏡像服務操作接口
└── spec  # oci規(guī)范配置模塊,對外提供OCI spec合并、校驗等功能接口
    ├── CMakeLists.txt
    ├── specs.c
    ├── specs_extend.c
    ├── specs_extend.h
    ├── specs_mount.c
    ├── specs_mount.h
    ├── specs_namespace.c
    ├── specs_namespace.h
    ├── specs_security.c
    ├── specs_security.h
    ├── verify.c  # 配置校驗功能接口
    └── verify.h

基礎設施層
基礎設施層位于 src/utils 目錄下,本層作為其他層的支撐庫。它提供各種工具函數(shù)供其他層次調(diào)用使用:

├── buffer # buffer 工具函數(shù)
│   ├── buffer.c
│   ├── buffer.h
│   └── CMakeLists.txt
├── CMakeLists.txt
├── console # IO 終端處理工具函數(shù)
│   ├── CMakeLists.txt
│   ├── console.c
│   └── console.h
├── cpputils # C++ 使用到的工具函數(shù),包含基礎字符串處理、url、線程工具
│   ├── CMakeLists.txt
│   ├── cxxutils.cc
│   ├── cxxutils.h
│   ├── stoppable_thread.cc
│   ├── stoppable_thread.h
│   ├── url.cc
│   └── url.h
├── cutils # C使用到的工具函數(shù),包含基礎字符串處理、數(shù)據(jù)類型轉換、文件處理、正則表達式等工具函數(shù)
│   ├── CMakeLists.txt
│   ├── util_atomic.c
│   ├── util_atomic.h
│   ├── utils_aes.c
│   ├── utils_aes.h
│   ├── utils_array.c
│   ├── utils_array.h
│   ├── utils_base64.c
│   ├── utils_base64.h
│   ├── utils.c
│	....
├── http # http 處理工具函數(shù),包含http請求、解析、認證等工具
│   ├── certificate.c
│   ├── certificate.h
│   ├── CMakeLists.txt
│   ├── http.c
│   ├── http.h
│   ├── mediatype.h
│   ├── parser.c
│   ├── parser.h
│   ├── rest_common.c
│   └── rest_common.h
├── sha256 # sha256 工具函數(shù),用來計算sha256
│   ├── CMakeLists.txt
│   ├── sha256.c
│   └── sha256.h
└── tar # 壓縮、解壓工具函數(shù),用來壓縮、解壓文件
    ├── CMakeLists.txt
    ├── isulad_tar.c
    ├── isulad_tar.h
    ├── util_archive.c
    ├── util_archive.h
    ├── util_gzip.c
    └── util_gzip.h

調(diào)用流程
可以借助Structure101 代碼分析工具,梳理出 iSulad 各個代碼目錄之前的調(diào)用依賴關系。

iSulad
首先,用戶界面層(cmd)作為上層,僅會調(diào)用其他模塊的接口,不會被其他模塊所依賴。cmd 會調(diào)用 client 目錄中的函數(shù),與 daemon 端進行通信。由于 cmd 目錄中存在 iSulad daemon 的命令行接口,因此會依賴 daemon 目錄下的函數(shù)定義。

daemon 目錄作為服務端代碼的頂層目錄,其中包含接口層(entry)、應用層(executor)、領域層(modules)的代碼。接口層作為調(diào)用 daemon 服務的入口,需要調(diào)用其他層中的函數(shù)進行業(yè)務調(diào)度處理,而不會被其他層次所依賴。應用層需要調(diào)用領域層(modules)中各個模塊的接口來實現(xiàn)具體的業(yè)務。

modules 目錄作為 iSulad 的核心領域層代碼,包含各個子功能模塊的具體實現(xiàn)。以 image 模塊為例,首先在 src/daemon/modules/api 中提供了 image_api.h,屏蔽了各種不同鏡像格式的差異,對外提供統(tǒng)一的 image 操作函數(shù)接口。

int image_module_init(const isulad_daemon_configs *args);

void image_module_exit();

int im_list_images(const im_list_request *request, im_list_response **response);

int im_rm_image(const im_rmi_request *request, im_remove_response **response);

int im_tag_image(const im_tag_request *request, im_tag_response **response);

int im_inspect_image(const im_inspect_request *request, im_inspect_response **response);

int im_import_image(const im_import_request *request, char **id);

int im_load_image(const im_load_request *request, im_load_response **response);

int im_pull_image(const im_pull_request *request, im_pull_response **response);

char *im_get_image_type(const char *image, const char *external_rootfs);

bool im_config_image_exist(const char *image_name);

int im_login(const im_login_request *request, im_login_response **response);

int im_logout(const im_logout_request *request, im_logout_response **response);

int im_container_export(const im_export_request *request);

void free_im_export_request(im_export_request *ptr);

在鏡像管理模塊內(nèi)部,對不同格式的鏡像操作進行區(qū)分。

static const struct bim_type g_bims[] = {
#ifdef ENABLE_OCI_IMAGE
{
.image_type = IMAGE_TYPE_OCI,
.ops = &g_oci_ops,
},
#endif
{ .image_type = IMAGE_TYPE_EXTERNAL, .ops = &g_ext_ops },
#ifdef ENABLE_EMBEDDED_IMAGE
{ .image_type = IMAGE_TYPE_EMBEDDED, .ops = &g_embedded_ops },
#endif
};
其他模塊也都是類似的設計,具體深入到不同模塊的詳細解析,在后續(xù)的博客中會一一進行分析。

【版權聲明】Copyright ? 2024 openEuler Community。本文由openEuler社區(qū)首發(fā),歡迎遵照 CC-BY-SA 4.0 協(xié)議規(guī)定轉載。轉載時敬請在正文注明并保留原文鏈接和作者信息。

原文鏈接:https://www.openeuler.org/zh/blog/lifeng2221dd1/2020-09-14-isulad-architecture.html


P.S.

iSulad提問

問他們:在倉庫里提issue

iSulad_SIG

DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee
iSulad是一個有趣的SIG(興趣小組)
DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee
有18個倉:
DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析,# openEuler操作系統(tǒng),DP讀書,架構,開放原子,服務器,嵌入式實時數(shù)據(jù)庫,容器,iSula,gitee文章來源地址http://www.zghlxwxcb.cn/news/detail-832653.html

iSulad的倉庫:

倉庫鏈接:https://gitee.com/openeuler/iSulad 官網(wǎng)鏈接:https://www.openeuler.org/zh/other/projects/isula/

到了這里,關于DP讀書:社區(qū)文檔(小白向)解讀——iSulad 輕量級容器引擎功能介紹以及代碼架構解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于lighthouse+長安鏈的輕量級云服務器產(chǎn)品,實現(xiàn)部署合約、區(qū)塊鏈服務一系列操作文檔

    基于lighthouse+長安鏈的輕量級云服務器產(chǎn)品,實現(xiàn)部署合約、區(qū)塊鏈服務一系列操作文檔

    長安鏈已上架一款lighthouse+長安鏈的輕量級云服務器產(chǎn)品 體驗入口:輕量應用服務器Lighthouse_香港輕量服務器_海外輕量服務器-騰訊云 區(qū)塊鏈概覽 獲取區(qū)塊鏈ID(DApp需要配置) 合約管理 智能合約git地址:https://git.chainmaker.org.cn/fish/fish1208-chainmaker-lighthouse/-/tree/master/contract EV

    2023年04月08日
    瀏覽(26)
  • 輕量靈動: 革新輕量級服務開發(fā)

    輕量靈動: 革新輕量級服務開發(fā)

    從 JDK 8 升級到 JDK 17 可以讓你的應用程序受益于新的功能、性能改進和安全增強。下面是一些 JDK 8 升級到 JDK 17 的最佳實戰(zhàn): 1.1、確定升級的必要性:首先,你需要評估你的應用程序是否需要升級到 JDK 17。查看 JDK 17 的新特性、改進和修復的 bug,以確定它們對你的應用程序

    2024年02月07日
    瀏覽(99)
  • git輕量級服務器gogs、gitea,非輕量級gitbucket

    git輕量級服務器gogs、gitea,非輕量級gitbucket

    本文來源:git輕量級服務器gogs、gitea,非輕量級gitbucket, 或 gitcode/gogs,gitea.md 結論: gogs、gitea很相似 確實輕, gitbucket基于java 不輕, 這三者都不支持組織樹(嵌套組織 nested group) 只能一層組織。 個人用,基于gogs、gitea,兩層結構樹 簡易辦法: 把用戶當成第一層節(jié)點、該用戶的

    2024年02月07日
    瀏覽(140)
  • 輕量級 HTTP 請求組件

    Apache HttpClient 是著名的 HTTP 客戶端請求工具——現(xiàn)在我們模擬它打造一套簡單小巧的請求工具庫, 封裝 Java 類庫里面的 HttpURLConnection 對象來完成日常的 HTTP 請求,諸如 GET、HEAD、POST 等等,并嘗試應用 Java 8 函數(shù)式風格來制定 API。 組件源碼在:https://gitee.com/sp42_admin/ajaxjs/tr

    2024年02月01日
    瀏覽(101)
  • Kotlin 輕量級Android開發(fā)

    Kotlin 輕量級Android開發(fā)

    Kotlin 是一門運行在 JVM 之上的語言。 它由 Jetbrains 創(chuàng)建,而 Jetbrains 則是諸多強大的工具(如知名的 Java IDE IntelliJ IDEA )背后的公司。 Kotlin 是一門非常簡單的語言,其主要目標之一就是提供強大語言的同時又保持簡單且精簡的語法。 其主要特性如下所示: 輕量級:這一點對

    2024年02月07日
    瀏覽(904)
  • Tomcat輕量級服務器

    Tomcat輕量級服務器

    目錄 1.常見系統(tǒng)架構? C-S架構 B-S架構 2.B-S架構系統(tǒng)的通信步驟 3.常見WEB服服務器軟件 4.Tomcat服務器的配置 下載安裝 環(huán)境變量配置 測試環(huán)境變量是否配置成功 測試Tomcat服務器是否配置成功? Tomcat窗口一閃而過的解決步驟 Tomcat解決亂碼 介紹: C-S架構即Client/Server(客戶端/服務

    2023年04月14日
    瀏覽(103)
  • 一種輕量級定時任務實現(xiàn)

    現(xiàn)在市面上有各式各樣的分布式定時任務,每個都有其獨特的特點,我們這邊的項目因為一開始使用的是分布式開源調(diào)度框架TBSchedule,但是這個框架依賴ZK, 由于ZK的不穩(wěn)定性和項目老舊無人維護 ,導致我們的定時任務會偶發(fā)出現(xiàn)異常,比如:任務停止、任務項丟失、任務不

    2024年02月14日
    瀏覽(96)
  • 108中超輕量級的加載動畫!

    大家好,我是【程序視點】小二哥! 今天要上的菜不是 Animate.js,也不是 Move.js,而是能提供108種加載動畫的庫: Whirl . 話不多說,直接來看例子。 以上只是冰山一角。whirl的CSS加載動畫集合中有108種選項供你挑選。選中喜歡的動畫后,點擊“Grab the CSS on Github!”。 將跳轉到

    2024年02月03日
    瀏覽(94)
  • C++輕量級單元測試框架

    單元測試是構建穩(wěn)定、高質(zhì)量的程序、服務或系統(tǒng)的必不可少的一環(huán)。通過單元測試,我們可以在開發(fā)過程中及時發(fā)現(xiàn)和修復代碼中的問題,提高代碼的質(zhì)量和可維護性。同時,單元測試也可以幫助我們更好地理解代碼的功能和實現(xiàn)細節(jié),從而更好地進行代碼重構和優(yōu)化。

    2023年04月25日
    瀏覽(89)
  • 輕量級Web框架Flask(二)

    MySQL是免費開源軟件,大家可以自行搜索其官網(wǎng)(https://www.MySQL.com/downloads/) 測試MySQL是否安裝成功 在所有程序中,找到MySQL→MySQL Server 5.6下面的命令行工具,然后單擊輸入密碼后回車,就可以知道MySQL數(shù)據(jù)庫是否鏈接成功。 右擊桌面上的“計算機”,在彈出的快捷鍵菜單中

    2023年04月15日
    瀏覽(183)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包