偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Containerd ctr、crictl、nerdctl 客戶端命令介紹與實(shí)戰(zhàn)操作

系統(tǒng) Linux
作為接替 Docker 運(yùn)行時(shí)的 Containerd 在早在 Kubernetes1.7 時(shí)就能直接與 Kubelet 集成使用,只是大部分時(shí)候我們因熟悉 Docker,在部署集群時(shí)采用了默認(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

二、Containerd 常見命令操作

  • 更換 Containerd 后,以往我們常用的 docker 命令也不再使用,取而代之的分別是 crictl 和 ctr 兩個(gè)命令客戶端。
  • crictl 是遵循 CRI 接口規(guī)范的一個(gè)命令行工具,通常用它來檢查和管理kubelet節(jié)點(diǎn)上的容器運(yùn)行時(shí)和鏡像。
  • ctr 是 containerd 的一個(gè)客戶端工具。
  • ctr -v 輸出的是 containerd 的版本,crictl -v 輸出的是當(dāng)前 k8s 的版本,從結(jié)果顯而易見你可以認(rèn)為 crictl 是用于 k8s 的。
  • 一般來說你某個(gè)主機(jī)安裝了 k8s 后,命令行才會(huì)有 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è)置:

crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///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

啟動(dòng)/關(guān)閉已有的容器

docker start/stop

ctr task start/kill

crictl start/stop

運(yùn)行一個(gè)新的容器

docker run

ctr run

無(最小單元為 pod)

打標(biāo)簽

docker tag

ctr image tag

創(chuàng)建一個(gè)新的容器

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 的概念,對(duì)于上層編排系統(tǒng)的支持,ctr 客戶端 主要區(qū)分了 3 個(gè)命名空間分別是k8s.io、moby和default,以上我們用crictl操作的均在k8s.io命名空間,使用ctr 看鏡像列表就需要加上-n 參數(shù)。crictl 是只有一個(gè)k8s.io命名空間,但是沒有-n 參數(shù)。

  • 【溫馨提示】ctr images pull 拉取的鏡像默認(rèn)放在default,而 crictl pull 和 kubelet 默認(rèn)拉取的鏡像都在 k8s.io 命名空間下。所以通過ctr導(dǎo)入鏡像的時(shí)候特別注意一點(diǎn),最好指定命名空間。
# 注意-n不能放在命令最后面,下面幾行查看的鏡像是一樣的
ctr -n=k8s.io image ls
ctr -n k8s.io image ls
# crictl 沒有-n參數(shù),操作都在`k8s.io`命名空間下。
crictl image ls
crictl images
# crictl image list = ctr -n=k8s.io image list
# crictl image ls = ctr -n=k8s.io image ls
# crictl images = ctr -n=k8s.io image list
# crictl images = ctr -n=k8s.io image ls
# 使用ctr命令指定命名空間導(dǎo)入鏡像
ctr -n=k8s.io image import dashboard.tar
#查看鏡像,可以看到可以查詢到了
crictl images

三、containerd 客戶端工具 nerdctl

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

  • https://github.com/containerd/nerdctl/releases
  • 精簡(jiǎn) (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。

延遲拉取鏡像功能可以參考這篇文章:Containerd 使用 Stargz Snapshotter 延遲拉取鏡像

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

1)安裝 nerdctl(精簡(jiǎn)版)

wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
# 解壓
tar -xf nerdctl-0.22.2-linux-amd64.tar.gz
ln -s /opt/k8s/nerdctl/nerdctl /usr/local/bin/nerdctl

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

wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-full-0.22.2-linux-amd64.tar.gz
tar -xf nerdctl-full-0.16.0-linux-amd64.tar.gz -C /usr/local/
cp /usr/local/lib/systemd/system/*.service /etc/systemd/system/

啟動(dòng)服務(wù) buildkit

systemctl enable  buildkit containerd --now
systemctl status buildkit containerd

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

buildkit GitHub 地址:

  • https://github.com/moby/buildkit
  • 使用精簡(jiǎn)版 nerdctl 無法直接通過 containerd 構(gòu)建鏡像,需要與 buildkit 組全使用以實(shí)現(xiàn)鏡像構(gòu)建。當(dāng)然你也可以安裝上面的完整 nerdctl;buildkit 項(xiàng)目是 Docker 公司開源出來的一個(gè)構(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)建請(qǐng)求。

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

# https://github.com/moby/buildkit/releases
wget https://github.com/moby/buildkit/releases/download/v0.10.4/buildkit-v0.10.4.linux-amd64.tar.gz
tar -xf buildkit-v0.10.4.linux-amd64.tar.gz -C /usr/local/

配置 buildkit 的啟動(dòng)文件,可以從這里下載:

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

buildkit 需要配置兩個(gè)文件

  • /usr/lib/systemd/system/buildkit.socket
cat > /usr/lib/systemd/system/buildkit.socket <<EOF
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660
[Install]
WantedBy=sockets.target
EOF
  • /usr/lib/systemd/system/buildkit.service
cat > /usr/lib/systemd/system/buildkit.service << EOF
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit
[Service]
# Replace runc builds with containerd builds
ExecStart=/usr/local/bin/buildkitd --addr fd://
[Install]
WantedBy=multi-user.target
EOF

啟動(dòng) buildkit

systemctl daemon-reload
systemctl enable buildkit --now

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

1)修改 containerd 配置文件

可以參考我之前的文章:

containerd config default > /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"]

重啟 containerd

#重新加載配置
systemctl daemon-reload
#重啟containerd
systemctl restart containerd
  • 注意:這個(gè)配置文件是給crictl和kubelet使用,ctr是不可以用這個(gè)配置文件的,ctr 不使用 CRI,因此它不讀取 plugins."io.containerd.grpc.v1.cri"配置。

2)ctr 拉取推送鏡像

# 推送鏡像到harbor
ctr --namespace=k8s.io images push myharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0 --skip-verify --user admin:Harbor12345
# --namespace=k8s.io 指定命名空間,不是必須,根據(jù)環(huán)境而定
# --skip-verify 跳過認(rèn)證
# --user 指定harbor用戶名及密碼
ctr images pull --user admin:Harbor12345 --tlscacert=/etc/containerd/myharbor-minio.com/ca.crt myharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0

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

3)鏡像構(gòu)建

cat > Dockerfile <<EOF
FROM nginx:alpine
RUN echo 'Hello Nerdctl From Containerd' > /usr/share/nginx/html/index.html
EOF

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

# 不加-n指定命名空間,crictl看不到,kubelet也不能使用它,默認(rèn)在default命名空間下
nerdctl -n k8s.io build -t nginx:nerctl -f ./Dockerfile .
### 參數(shù)解釋
# -t:指定鏡像名稱
# . :當(dāng)前目錄Dockerfile
# -f:指定Dockerfile路徑
# --no-cache:不緩存

4)打標(biāo)簽 tag

# crictl沒有tag命令,只能使用nerdctl和ctr,必須指定命名空間,要不然kubelet無法使用。
ctr -n k8s.io i tag
nerdctl -n k8s.io tag nginx:nerctl myharbor-minio.com/bigdata/nginx:nerctl
# ctr -n k8s.io tag nginx:nerctl myharbor-minio.com/bigdata/nginx:nerctl
# 查看鏡像
nerdctl -n k8s.io images myharbor-minio.com/bigdata/nginx:nerctl

5)將鏡像推送到 Harbor

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

# 以下兩個(gè)哪個(gè)都可以
# 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 <<EOF
server = "https://docker.io"
[host."http://myharbor-minio.com:80"]
capabilities = ["pull", "resolve","push"]
#skip_verify = true
#ca = "ca.crt" #相對(duì)路徑
#ca = "/opt/auth/ca.crt" #絕對(duì)路徑
#ca = ["/opt/auth/ca.crt"]
#ca = ["ca.crt"]
#client = [["/opt/auth/nginx.cclinux.cn.crt", "/opt/auth/nginx.cclinux.cn.key"]]
EOF

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

# 以下兩個(gè)哪個(gè)都可以
# 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 <<EOF
server = "https://docker.io"
[host."https://myharbor-minio.com:443"]
capabilities = ["pull", "resolve","push"]
skip_verify = true
#ca = "ca.crt" #相對(duì)路徑
#ca = "/opt/auth/ca.crt" #絕對(duì)路徑
#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

echo Harbor12345 | nerdctl login --username "admin" --password-stdin  myharbor-minio.com:443
# nerdctl login --username "admin" --password Harbor12345 myharbor-minio.com:443
# 登出
# nerdctl logout

開始將鏡像推送到 harbor

### 推送到Harbor
# --insecure-registry skips verifying HTTPS certs, and allows falling back to plain HTTP
nerdctl --insecure-registry --namespace=k8s.io push myharbor-minio.com/bigdata/nginx:nerctl
# ctr --namespace=k8s.io images push myharbor-minio.com/bigdata/nginx:nerctl --skip-verify --user admin:Harbor12345
# --namespace=k8s.io 指定命名空間,跟-n一樣,不是必須,根據(jù)環(huán)境而定
# --skip-verify 跳過認(rèn)證
# --user 指定harbor用戶名及密碼

Containerd ctr,crictl,nerdctl 客戶端命令介紹與實(shí)戰(zhàn)操作就到這里了。

責(zé)任編輯:龐桂玉 來源: 馬哥Linux運(yùn)維
相關(guān)推薦

2023-02-03 08:18:01

2023-12-21 17:11:21

Containerd管理工具命令行

2010-07-19 16:30:19

Telnet客戶端

2019-05-22 09:03:44

PC客戶端Windows

2021-08-27 06:41:34

Docker ContainerdRun&Exec

2010-05-31 10:11:32

瘦客戶端

2010-07-01 14:52:42

Linux grep命

2010-07-27 15:59:04

NFS Server

2010-03-18 17:47:07

Java 多客戶端通信

2010-08-31 16:29:40

DHCP客戶端

2010-12-17 10:16:33

OpenVAS

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2011-08-17 10:10:59

2023-03-02 07:37:53

2015-03-09 10:58:01

MongodbMySQL

2024-09-06 11:11:20

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2011-09-09 09:44:23

WCF

2009-08-21 15:59:22

服務(wù)端與客戶端通信

2011-03-24 13:00:31

配置nagios客戶端
點(diǎn)贊
收藏

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