國美&華為,戰略合作簽約!
916
2025-03-31
Kubernetes 官方發布公告,宣布自 v1.20 起放棄對 Docker 的支持。目前,Kubelet 中的 Docker 支持功能現已棄用,并將在之后的版本中被刪除。
再來看下面這張圖(來源網絡)
從上圖中可以看出 docker 對容器的管理和操作基本都是通過 containerd 完成的。所以,如果大家想從 docker 遷移出來,那么 Containerd 是一個非常不錯的先擇。
今天,民工哥就和大家來聊一聊這個開源技術 Containerd。
Containerd 概述
很早之前的 Docker Engine 中就有了containerd,只不過現在是將 containerd 從 Docker Engine 里分離出來,作為一個獨立的開源項目,目標是提供一個更加開放、穩定的容器運行基礎設施。分離出來的 containerd 將具有更多的功能,涵蓋整個容器運行時管理的所有需求,提供更強大的支持。
簡單的來說,containerd 是一個工業級標準的容器運行時,它強調簡單性、健壯性和可移植性。containerd可以在宿主機中管理完整的容器生命周期,包括容器鏡像的傳輸和存儲、容器的執行和管理、存儲和網絡等。
地址:https://github.com/containerd/containerd/
containerd 架構
其中,grpc 模塊向上層提供服務接口,metrics 則提供監控數據(cgroup 相關數據),兩者均向上層提供服務。containerd 包含一個守護進程,該進程通過本地 UNIX 套接字暴露 grpc 接口。
storage 部分負責鏡像的存儲、管理、拉取等 metadata 管理容器及鏡像的元數據,通過bootio存儲在磁盤上 task -- 管理容器的邏輯結構,與 low-level 交互 event -- 對容器操作的事件,上層通過訂閱可以知道發生了什么事情 Runtimes -- low-level runtime(對接 runc)
Containerd 能做什么??
管理容器的生命周期(從創建容器到銷毀容器)
拉取/推送容器鏡像
存儲管理(管理鏡像及容器數據的存儲)
調用 runC 運行容器(與 runC 等容器運行時交互)
管理容器網絡接口及網絡
從 k8s 的角度看,選擇 containerd作為運行時的組件,它調用鏈更短,組件更少,更穩定,占用節點資源更少。
上圖來源 containerd官方網站,containerd可用作 Linux 和 Windows 的守護程序。它管理其主機系統的完整容器生命周期,從圖像傳輸和存儲到容器執行和監督,再到低級存儲到網絡附件等等。
安裝
-:https://containerd.io/downloads/
[root@centos7?~]#?wget?https://github.com/containerd/containerd/releases/download/v1.5.2/containerd-1.5.2-linux-amd64.tar.gz
[root@centos7?~]#?tar?zxf?containerd-1.5.2-linux-amd64.tar.gz?-C?/usr/local/
#通過上面的操作,將containerd?安裝至/usr/local/bin目錄下
[root@centos7?~]#?cd?/usr/local/bin/
[root@centos7?bin]#?ll
total?98068
-rwxr-xr-x?1?root?root???214432?Mar?29?05:20?bpytop
-rwxr-xr-x?1?1001??116?49049696?May?19?12:56?containerd
-rwxr-xr-x?1?1001??116??6434816?May?19?12:56?containerd-shim
-rwxr-xr-x?1?1001??116??8671232?May?19?12:57?containerd-shim-runc-v1
-rwxr-xr-x?1?1001??116??8683520?May?19?12:57?containerd-shim-runc-v2
-rwxr-xr-x?1?1001??116?27230976?May?19?12:56?ctr
lrwxrwxrwx?1?root?root????????6?Mar?28?00:13?nc?->?netcat
-rwxr-xr-x?1?root?root???126800?Mar?28?00:13?netcat
生成默認配置文件
[root@centos7?bin]#?containerd?config?default?>?/etc/containerd/config.toml
[root@centos7?bin]#?ll?/etc/containerd/config.toml
-rw-r--r--?1?root?root?6069?Jun??4?14:47?/etc/containerd/config.toml
配置 containerd 作為服務運行
[root@centos7?~]#?touch?/lib/systemd/system/containerd.service
[root@centos7?bin]#?vim?/lib/systemd/system/containerd.service
[Unit]
Description=containerd?container?runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=/sbin/modprobe?overlay
ExecStart=/usr/local/bin/containerd
Delegate=yes
KillMode=process
LimitNOFILE=1048576
#?Having?non-zero?Limit*s?causes?performance?problems?due?to?accounting?overhead
#?in?the?kernel.?We?recommend?using?cgroups?to?do?container-local?accounting.
LimitNPROC=infinity
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
啟動服務
[root@centos7?~]#?systemctl?daemon-reload
[root@centos7?~]#?systemctl?start?containerd.service
[root@centos7?~]#?systemctl?status?containerd.service
containerd 使用
其實,史上最輕量 Kubernetes 發行版 K3s 默認就包括了 containerd、Flannel、CoreDNS 組件。
ctr:是containerd本身的CLI
crictl :是Kubernetes社區定義的專門CLI工具
[root@centos7?~]#?ctr?version
Client:
Version:??v1.5.2
Revision:?36cc874494a56a253cd181a1a685b44b58a2e34a
Go?version:?go1.16.4
Server:
Version:??v1.5.2
Revision:?36cc874494a56a253cd181a1a685b44b58a2e34a
UUID:?ebe42dac-40ae-4af1-99b0-52e61728c918
幫助信息
[root@centos7?~]#?ctr?--help
NAME:
ctr?-
__
_____/?/______
/?___/?__/?___/
/?/__/?/_/?/
\___/\__/_/
containerd?CLI
USAGE:
ctr?[global?options]?command?[command?options]?[arguments...]
VERSION:
v1.5.2
DESCRIPTION:
ctr?is?an?unsupported?debug?and?administrative?client?for?interacting
with?the?containerd?daemon.?Because?it?is?unsupported,?the?commands,
options,?and?operations?are?not?guaranteed?to?be?backward?compatible?or
stable?from?release?to?release?of?the?containerd?project.
COMMANDS:
plugins,?plugin????????????provides?information?about?containerd?plugins
version????????????????????print?the?client?and?server?versions
containers,?c,?container???manage?containers
content????????????????????manage?content
events,?event??????????????display?containerd?events
images,?image,?i???????????manage?images
leases?????????????????????manage?leases
namespaces,?namespace,?ns??manage?namespaces
pprof??????????????????????provide?golang?pprof?outputs?for?containerd
run????????????????????????run?a?container
snapshots,?snapshot????????manage?snapshots
tasks,?t,?task?????????????manage?tasks
install????????????????????install?a?new?package
oci????????????????????????OCI?tools
shim???????????????????????interact?with?a?shim?directly
help,?h????????????????????Shows?a?list?of?commands?or?help?for?one?command
GLOBAL?OPTIONS:
--debug??????????????????????enable?debug?output?in?logs
--address?value,?-a?value????address?for?containerd's?GRPC?server?(default:?"/run/containerd/containerd.sock")?[$CONTAINERD_ADDRESS]
--timeout?value??????????????total?timeout?for?ctr?commands?(default:?0s)
--connect-timeout?value??????timeout?for?connecting?to?containerd?(default:?0s)
--namespace?value,?-n?value??namespace?to?use?with?commands?(default:?"default")?[$CONTAINERD_NAMESPACE]
--help,?-h???????????????????show?help
--version,?-v????????????????print?the?version
查看與刪除
[root@centos7?~]#?ctr?container?list
CONTAINER????IMAGE?????????????????????????????RUNTIME
nginx????????docker.io/library/nginx:alpine????io.containerd.runc.v2
[root@centos7?~]#?ctr?container?del?nginx
[root@centos7?~]#?ctr?container?list
CONTAINER????IMAGE????RUNTIME
pull鏡像文件
[root@centos7?~]#?ctr?images?pull?docker.io/library/nginx:alpine
查看鏡像文件列表
[root@centos7?~]#?ctr?images?list
REF????????????????????????????TYPE??????????????????????????????????????????????????????DIGEST??????????????????????????????????????????????????????????????????SIZE????PLATFORMS????????????????????????????????????????????????????????????????????????????????LABELS
docker.io/library/nginx:alpine?application/vnd.docker.distribution.manifest.list.v2+json?sha256:0f8595aa040ec107821e0409a1dd3f7a5e989501d5c8d5b5ca1f955f33ac81a0?9.4?MiB?linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x?-
運行容器
[root@centos7?~]#?ctr?run?-d?docker.io/library/nginx:alpine?nginx
[root@centos7?~]#?ctr?container?list
CONTAINER????IMAGE?????????????????????????????RUNTIME
nginx????????docker.io/library/nginx:alpine????io.containerd.runc.v2
一圈使用下來,基本上與docker的命令相差無幾,使用上沒有什么大的學習成本,所以,無論是 Kubernetes 是否支持 docker,對于我們使用者來講,問題不大。
更多相關的介紹與實際操作指南,大家可以參閱官方文檔,都有詳細的使用說明。
Docker 容器
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。