0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Containerd常見命令操作

馬哥Linux運(yùn)維 ? 來源:博客園 ? 作者:: 大數(shù)據(jù)老司機(jī) ? 2022-08-30 10:08 ? 次閱讀

一、概述

作為接替 Docker 運(yùn)行時的 Containerd 在早在 Kubernetes1.7 時就能直接與 Kubelet 集成使用,只是大部分時候我們因熟悉 Docker,在部署集群時采用了默認(rèn)的 dockershim。在V1.24起的版本的 kubelet 就徹底移除了dockershim,改為默認(rèn)使用Containerd了,當(dāng)然也使用 cri-dockerd 適配器來將 Docker Engine 與 Kubernetes 集成??梢詤⒖脊俜轿臋n:

https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#docker

8d9de8e4-27a0-11ed-ba43-dac502259ad0.png

二、Containerd 常見命令操作

更換 Containerd 后,以往我們常用的 docker 命令也不再使用,取而代之的分別是 crictlctr 兩個命令客戶端。

  • crictl 是遵循 CRI 接口規(guī)范的一個命令行工具,通常用它來檢查和管理kubelet節(jié)點(diǎn)上的容器運(yùn)行時和鏡像。
  • ctrcontainerd 的一個客戶端工具。
  • ctr -v 輸出的是 containerd 的版本,crictl -v 輸出的是當(dāng)前 k8s 的版本,從結(jié)果顯而易見你可以認(rèn)為 crictl 是用于 k8s 的。
  • 一般來說你某個主機(jī)安裝了 k8s 后,命令行才會有 crictl 命令。而 ctr 是跟 k8s 無關(guān)的,你主機(jī)安裝了 containerd 服務(wù)后就可以操作 ctr 命令。

使用crictl命令之前,需要先配置/etc/crictl.yaml如下:

runtime-endpoint:unix:///run/containerd/containerd.sock
image-endpoint:unix:///run/containerd/containerd.sock
timeout:10
debug:false

也可以通過命令進(jìn)行設(shè)置:

crictlconfigruntime-endpointunix:///run/containerd/containerd.sock
crictlconfigimage-endpointunix:///run/containerd/containerd.sock
命令 docker ctr(containerd) crictl(kubernetes)
查看運(yùn)行的容器 docker ps ctr task ls/ctr container ls crictl ps
查看鏡像 docker images ctr image ls crictl images
查看容器日志 docker logs crictl logs
查看容器數(shù)據(jù)信息 docker inspect ctr container info crictl inspect
查看容器資源 docker stats crictl stats
啟動/關(guān)閉已有的容器 docker start/stop ctr task start/kill crictl start/stop
運(yùn)行一個新的容器 docker run ctr run 無(最小單元為 pod)
標(biāo)簽 docker tag ctr image tag
創(chuàng)建一個新的容器 docker create ctr container create crictl create
導(dǎo)入鏡像 docker load ctr image import
導(dǎo)出鏡像 docker save ctr image export
刪除容器 docker rm ctr container rm crictl rm
刪除鏡像 docker rmi ctr image rm crictl rmi
拉取鏡像 docker pull ctr image pull ctictl pull
推送鏡像 docker push ctr image push
登錄或在容器內(nèi)部執(zhí)行命令 docker exec crictl exec
清空不用的容器 docker image prune crictl rmi --prune

更多命令操作,可以直接在命令行輸入命令查看幫助。

docker--help
ctr--help
crictl--help

由于 Containerd 也有 namespaces 的概念,對于上層編排系統(tǒng)的支持,ctr 客戶端 主要區(qū)分了 3 個命名空間分別是k8s.iomobydefault,以上我們用crictl操作的均在k8s.io命名空間,使用ctr 看鏡像列表就需要加上-n 參數(shù)。crictl 是只有一個k8s.io命名空間,但是沒有-n 參數(shù)。

【溫馨提示】ctr images pull 拉取的鏡像默認(rèn)放在default,而 crictl pull 和 kubelet 默認(rèn)拉取的鏡像都在 k8s.io 命名空間下。所以通過ctr導(dǎo)入鏡像的時候特別注意一點(diǎn),最好指定命名空間。

#注意-n不能放在命令最后面,下面幾行查看的鏡像是一樣的
ctr-n=k8s.ioimagels
ctr-nk8s.ioimagels

# crictl 沒有-n參數(shù),操作都在`k8s.io`命名空間下。
crictlimagels
crictlimages
#crictlimagelist=ctr-n=k8s.ioimagelist
#crictlimagels=ctr-n=k8s.ioimagels
#crictlimages=ctr-n=k8s.ioimagelist
#crictlimages=ctr-n=k8s.ioimagels

#使用ctr命令指定命名空間導(dǎo)入鏡像
ctr-n=k8s.ioimageimportdashboard.tar

#查看鏡像,可以看到可以查詢到了
crictlimages
8dbebd3a-27a0-11ed-ba43-dac502259ad0.png

三、containerd 客戶端工具 nerdctl

推薦使用 nerdctl,使用效果與 docker 命令的語法一致,github 下載鏈接:

https://github.com/containerd/nerdctl/releases

  • 精簡 (nerdctl--linux-amd64.tar.gz): 只包含 nerdctl
  • 完整 (nerdctl-full--linux-amd64.tar.gz):包含 containerd, runc, and CNI 等依賴

nerdctl 的目標(biāo)并不是單純地復(fù)制 docker 的功能,它還實(shí)現(xiàn)了很多 docker 不具備的功能,例如延遲拉取鏡像(lazy-pulling)、鏡像加密(imgcrypt)等。具體看 nerdctl。

8e0078e2-27a0-11ed-ba43-dac502259ad0.png
延遲拉取鏡像功能可以參考這篇文章:Containerd 使用 Stargz Snapshotter 延遲拉取鏡像

https://icloudnative.io/posts/startup-containers-in-lightning-speed-with-lazy-image-distribution-on-containerd/

1)安裝 nerdctl(精簡版)

wgethttps://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
#解壓
tar-xfnerdctl-0.22.2-linux-amd64.tar.gz

ln-s/opt/k8s/nerdctl/nerdctl/usr/local/bin/nerdctl

2)安裝 nerdctl(完整版,這里不裝)

wgethttps://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-full-0.22.2-linux-amd64.tar.gz
tar-xfnerdctl-full-0.16.0-linux-amd64.tar.gz-C/usr/local/

cp/usr/local/lib/systemd/system/*.service/etc/systemd/system/

啟動服務(wù) buildkit

systemctlenablebuildkitcontainerd--now
systemctlstatusbuildkitcontainerd

3)安裝 buildkit 支持構(gòu)建鏡像

buildkit GitHub 地址:

https://github.com/moby/buildkit

使用精簡版 nerdctl 無法直接通過 containerd 構(gòu)建鏡像,需要與 buildkit 組全使用以實(shí)現(xiàn)鏡像構(gòu)建。當(dāng)然你也可以安裝上面的完整 nerdctl;buildkit 項(xiàng)目是 Docker 公司開源出來的一個構(gòu)建工具包,支持 OCI 標(biāo)準(zhǔn)的鏡像構(gòu)建。它主要包含以下部分:

  • 服務(wù)端 buildkitd,當(dāng)前支持 runc 和 containerd 作為 worker,默認(rèn)是 runc;
  • 客戶端 buildctl,負(fù)責(zé)解析 Dockerfile,并向服務(wù)端 buildkitd 發(fā)出構(gòu)建請求。

buildkit 是典型的C/S 架構(gòu),client 和 server 可以不在一臺服務(wù)器上。而 nerdctl 在構(gòu)建鏡像方面也可以作為 buildkitd 的客戶端。

#https://github.com/moby/buildkit/releases
wgethttps://github.com/moby/buildkit/releases/download/v0.10.4/buildkit-v0.10.4.linux-amd64.tar.gz

tar-xfbuildkit-v0.10.4.linux-amd64.tar.gz-C/usr/local/

配置 buildkit 的啟動文件,可以從這里下載:

https://github.com/moby/buildkit/tree/master/examples/systemd

buildkit 需要配置兩個文件

  • /usr/lib/systemd/system/buildkit.socket
cat>/usr/lib/systemd/system/buildkit.socket<
  • /usr/lib/systemd/system/buildkit.service
cat>/usr/lib/systemd/system/buildkit.service<#Replaceruncbuildswithcontainerdbuilds
ExecStart=/usr/local/bin/buildkitd--addrfd://
[Install]
WantedBy=multi-user.target
EOF

啟動 buildkit

systemctldaemon-reload
systemctlenablebuildkit--now
8e1bef82-27a0-11ed-ba43-dac502259ad0.png

四、實(shí)戰(zhàn)操作

1)修改 containerd 配置文件

可以參考我之前的文章:

containerdconfigdefault>/etc/containerd/config.toml

配置如下:

[plugins."io.containerd.grpc.v1.cri".registry]
config_path=""

[plugins."io.containerd.grpc.v1.cri".registry.auths]

[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."myharbor-minio.com".tls]
insecure_skip_verify=true#跳過認(rèn)證
ca_file="/etc/containerd/myharbor-minio.com/ca.crt"
[plugins."io.containerd.grpc.v1.cri".registry.configs."myharbor-minio.com".auth]
username="admin"
password="Harbor12345"

[plugins."io.containerd.grpc.v1.cri".registry.headers]

[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."myharbor-minio.com"]
endpoint=["https://myharbor-minio.com"]

937667a0-27a0-11ed-ba43-dac502259ad0.png
重啟 containerd

#重新加載配置
systemctldaemon-reload
#重啟containerd
systemctlrestartcontainerd

注意:這個配置文件是給crictlkubelet使用,ctr是不可以用這個配置文件的,ctr 不使用 CRI,因此它不讀取 plugins."io.containerd.grpc.v1.cri"配置。

2)ctr 拉取推送鏡像

#推送鏡像到harbor
ctr--namespace=k8s.ioimagespushmyharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0--skip-verify--useradmin:Harbor12345

#--namespace=k8s.io指定命名空間,不是必須,根據(jù)環(huán)境而定
#--skip-verify跳過認(rèn)證
#--user指定harbor用戶名及密碼

ctrimagespull--useradmin:Harbor12345--tlscacert=/etc/containerd/myharbor-minio.com/ca.crtmyharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0

不想-u user:password 每次必須使用 ctr pull/ctr push, 可以使用nerdctl

3)鏡像構(gòu)建

cat>Dockerfile<echo'HelloNerdctlFromContainerd'>/usr/share/nginx/html/index.html
EOF

然后在文件所在目錄執(zhí)行鏡像構(gòu)建命令:

#不加-n指定命名空間,crictl看不到,kubelet也不能使用它,默認(rèn)在default命名空間下
nerdctl-nk8s.iobuild-tnginx:nerctl-f./Dockerfile.
###參數(shù)解釋
#-t:指定鏡像名稱
# . :當(dāng)前目錄Dockerfile
#-f:指定Dockerfile路徑
#--no-cache:不緩存
93885e24-27a0-11ed-ba43-dac502259ad0.png

4)打標(biāo)簽 tag

# crictl沒有tag命令,只能使用nerdctl和ctr,必須指定命名空間,要不然kubelet無法使用。
ctr-nk8s.ioitag
nerdctl-nk8s.iotagnginx:nerctlmyharbor-minio.com/bigdata/nginx:nerctl
#ctr-nk8s.iotagnginx:nerctlmyharbor-minio.com/bigdata/nginx:nerctl
#查看鏡像
nerdctl-nk8s.ioimagesmyharbor-minio.com/bigdata/nginx:nerctl

5)將鏡像推送到 Harbor

第一種情況:http方式,配置如下:

#以下兩個哪個都可以
#mkdir-p/etc/docker/certs.d/myharbor-minio.com:443
mkdir-p/etc/containerd/certs.d/myharbor-minio.com:443

cat>/etc/containerd/certs.d/myharbor-minio.com:443/hosts.toml<"https://docker.io"

[host."http://myharbor-minio.com:80"]
capabilities=["pull","resolve","push"]
#skip_verify=true
#ca="ca.crt"#相對路徑
#ca="/opt/auth/ca.crt"#絕對路徑
#ca=["/opt/auth/ca.crt"]
#ca=["ca.crt"]
#client=[["/opt/auth/nginx.cclinux.cn.crt","/opt/auth/nginx.cclinux.cn.key"]]

EOF

第一種情況:https方式,配置如下:

#以下兩個哪個都可以
#mkdir-p/etc/docker/certs.d/myharbor-minio.com:443
mkdir-p/etc/containerd/certs.d/myharbor-minio.com:443

cat>/etc/containerd/certs.d/myharbor-minio.com:443/hosts.toml<"https://docker.io"

[host."https://myharbor-minio.com:443"]
capabilities=["pull","resolve","push"]
skip_verify=true
#ca="ca.crt"#相對路徑
#ca="/opt/auth/ca.crt"#絕對路徑
#ca=["/opt/auth/ca.crt"]
ca=["/etc/containerd/myharbor-minio.com/ca.crt"]
#client=[["/opt/auth/nginx.cclinux.cn.crt","/opt/auth/nginx.cclinux.cn.key"]]
EOF

通過 nerdctl 登錄 harbor

echoHarbor12345|nerdctllogin--username"admin"--password-stdinmyharbor-minio.com:443

#nerdctllogin--username"admin"--passwordHarbor12345myharbor-minio.com:443

#登出
#nerdctllogout
93980298-27a0-11ed-ba43-dac502259ad0.png

開始將鏡像推送到 harbor

###推送到Harbor
#--insecure-registryskipsverifyingHTTPScerts,andallowsfallingbacktoplainHTTP
nerdctl--insecure-registry--namespace=k8s.iopushmyharbor-minio.com/bigdata/nginx:nerctl
#ctr--namespace=k8s.ioimagespushmyharbor-minio.com/bigdata/nginx:nerctl--skip-verify--useradmin:Harbor12345

#--namespace=k8s.io指定命名空間,跟-n一樣,不是必須,根據(jù)環(huán)境而定
#--skip-verify跳過認(rèn)證
#--user指定harbor用戶名及密碼
93aefb24-27a0-11ed-ba43-dac502259ad0.png

Containerd ctr,crictl,nerdctl 客戶端命令介紹與實(shí)戰(zhàn)操作就到這里了,有疑問的小伙伴歡迎給我留言哦!

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    21986
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    658

    瀏覽量

    21929
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11738

原文標(biāo)題:Containerd ctr、crictl、nerdctl 客戶端命令介紹與實(shí)戰(zhàn)操作

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    常見的shell命令之文件操作相關(guān)命令

    命令命令:cp英文全拼:copy功能:實(shí)現(xiàn)文件的復(fù)制操作參數(shù):cp [選項(xiàng)] 源文件/目錄目的文件/目錄示例:5、mv文件改名移動命令:mv英文全拼:move功能:可以將一個目錄移到另
    發(fā)表于 08-19 10:01

    常見的shell命令之其他命令

    用戶的信息用法:who示例:5、PS查詢進(jìn)程命令命令:ps功能:顯示當(dāng)前操作系統(tǒng)中由該用戶運(yùn)行的進(jìn)程列表常見參數(shù):用法:示例1:ps示例2:ps -el查看所有進(jìn)程的詳細(xì)信息示例3:使
    發(fā)表于 08-21 09:49

    嵌入式學(xué)習(xí)-常見的shell命令之其他命令

    用戶的信息用法:who示例:5、PS查詢進(jìn)程命令命令:ps功能:顯示當(dāng)前操作系統(tǒng)中由該用戶運(yùn)行的進(jìn)程列表常見參數(shù):用法:示例1:ps示例2:ps -el查看所有進(jìn)程的詳細(xì)信息示例3:使
    發(fā)表于 08-22 09:42

    Linux常見命令有哪些

    摘要:這是對周立功編著的《嵌入式Linux開發(fā)教程》的第7期連載。本期刊載內(nèi)容有關(guān)LinuxLinux常見命令中的導(dǎo)航命令、目錄命令和文件命令
    發(fā)表于 10-28 10:06

    學(xué)習(xí)常見的Linux命令

    一、學(xué)習(xí)常見的Linux命令(1)文件操作命令主要包括查看文件命令(ls)、顯示文件內(nèi)容命令(c
    發(fā)表于 11-05 08:43

    MongoDB常用操作命令大全

    本文主要是對MongoDB常用操作命令解析。如果你想創(chuàng)建一個“myTest”的數(shù)據(jù)庫,先運(yùn)行use myTest命令,之后就做一些操作(如:db.createCollection(‘u
    的頭像 發(fā)表于 02-07 10:15 ?1891次閱讀

    重磅!阿里巴巴工程師獲得 containerd 社區(qū)席位,與社區(qū)共建云時代容器標(biāo)準(zhǔn)

    重磅!阿里巴巴工程師獲得 containerd 社區(qū)席位,與社區(qū)共建云時代容器標(biāo)準(zhǔn)11 月 29 日,CNCF containerd 社區(qū)正式宣布:兩位阿里巴巴工程師正式獲得 containerd
    發(fā)表于 12-11 17:25 ?272次閱讀

    Git常見的誤區(qū)和命令行工具等綜述

    Git常見的誤區(qū)和命令行工具等綜述
    發(fā)表于 08-31 09:51 ?0次下載

    嵌入式Linux開發(fā)教程:Linux常見命令(上篇)

    摘要:這是對周立功編著的《嵌入式Linux開發(fā)教程》的第7期連載。本期刊載內(nèi)容有關(guān)LinuxLinux常見命令中的導(dǎo)航命令、目錄命令和文件命令
    發(fā)表于 10-21 13:36 ?11次下載
    嵌入式Linux開發(fā)教程:Linux<b class='flag-5'>常見</b><b class='flag-5'>命令</b>(上篇)

    基礎(chǔ)的Linux操作命令

    IC設(shè)計(jì)是在linux環(huán)境下,很多操作需要在Terminal中進(jìn)行,因此想要學(xué)習(xí)IC設(shè)計(jì),就必須先需要熟悉Linux環(huán)境、掌握基礎(chǔ)的Linux操作命令;網(wǎng)上也有很多系統(tǒng)的教程,可以系統(tǒng)去學(xué)一學(xué),當(dāng)然
    的頭像 發(fā)表于 03-15 13:42 ?1438次閱讀

    Containerd控制runC的守護(hù)進(jìn)程

    ./oschina_soft/containerd.zip
    發(fā)表于 05-11 10:05 ?0次下載
    <b class='flag-5'>Containerd</b>控制runC的守護(hù)進(jìn)程

    Containerd的Bug導(dǎo)致容器被重建!如何避免?

    該 issue 在 2022 年 12 月 20 日被提交,RKE2 團(tuán)隊(duì)在 2023 年 1 月 6 日緊急合并了 containerd 中修復(fù)該 issue 的 commit,發(fā)布了 k3s-containerd v1.6.14+k3s1 版本,并發(fā)布了新的 rke2
    的頭像 發(fā)表于 02-10 13:55 ?1348次閱讀

    Containerd基礎(chǔ)用法

    從 Docker 1.11 版本開始,Docker 容器運(yùn)行就不是簡單通過 Docker Daemon 來啟動了,而是通過集成containerd、runc等多個組件來完成的。 雖然Docker
    的頭像 發(fā)表于 04-11 10:50 ?667次閱讀

    solidworks基本操作命令的技巧

    在零件設(shè)計(jì)的過程中,可以隨意插入其他特征的零件與之進(jìn)行操作和修改,有別于裝配體中的裝配命令,還有當(dāng)一個實(shí)體又很多圓角過渡造型比較復(fù)雜的時候,可以用分割的命令將其分成兩個部分,然后分別對他們進(jìn)行造型上的設(shè)計(jì),例如,抽殼。
    的頭像 發(fā)表于 07-26 15:47 ?1327次閱讀

    結(jié)構(gòu)操作系統(tǒng)命令參考

    電子發(fā)燒友網(wǎng)站提供《結(jié)構(gòu)操作系統(tǒng)命令參考.pdf》資料免費(fèi)下載
    發(fā)表于 08-28 10:30 ?0次下載
    結(jié)構(gòu)<b class='flag-5'>操作</b>系統(tǒng)<b class='flag-5'>命令</b>參考