containerd命令行使用

一、基础使用

1、crictl、ctr用法

# 备注:k8s_1.25.0.tar.gz这个文件如何来的?
这个文件把安装k8s需要的镜像都集成好了,这个是我第一次安装1.25.0这个版本,获取到对应的镜像,通过ctr images export 这个命令把镜像输出到k8s_1.25.0.tar.gz文件,如果大家安装其他版本,那就不需要实现解压镜像,可以默认从网络拉取镜像即可。
ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io

# 使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io images import k8s_1.25.0.tar.gz

# 查看镜像,可以看到可以查询到了
crictl images

# 注意-n不能放在命令最后面,下面几行查看的镜像是一样的  
ctr -n=k8s.io image ls  
ctr -n k8s.io image ls  
  
# crictl 没有-n参数,操作都在`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命令指定命名空间导入镜像  
ctr -n=k8s.io image import dashboard.tar  
  
#查看镜像,可以看到可以查询到了  
crictl images  
命令 docker ctr(containerd) crictl(kubernetes)
查看运行的容器 docker ps ctr task ls/ctr container ls crictl ps
查看镜像 docker images ctr image ls crictl images
查看容器日志 docker logs 无 crictl logs
查看容器数据信息 docker inspect ctr container info crictl inspect
查看容器资源 docker stats 无 crictl stats
启动/关闭已有的容器 docker start/stop ctr task start/kill crictl start/stop
运行一个新的容器 docker run ctr run 无(最小单元为pod)
打标签 docker tag ctr image tag 无
创建一个新的容器 docker create ctr container create crictl create
导入镜像 docker load ctr image import 无
导出镜像 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 无
登录或在容器内部执行命令 docker exec 无 crictl exec
清空不用的容器 docker image prune 无 crictl rmi --prune

2、nerdctl安装及使用

  • 安装
# 安装nerdctl
wget https://github.com/containerd/nerdctl/releases/download/v1.6.2/nerdctl-full-1.6.2-linux-amd64.tar.gz
mv nerdctl-full-1.6.2-linux-amd64.tar.gz /usr/local/
cd /usr/local/
tar zxvf nerdctl-full-1.6.2-linux-amd64.tar.gz 

# 安装 buildkit 工具(配置这个之后才能使用 `nerdctl build`)
# 配置 systemd 管理
cat > /etc/systemd/system/buildkit.socket <<'EOF'
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
 
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
 
[Install]
WantedBy=sockets.target
EOF
 
cat > /etc/systemd/system/buildkit.service <<'EOF'
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socketDocumentation=https://github.com/moby/buildkit
 
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
 
[Install]
WantedBy=multi-user.target
EOF

# 启动并设置开启自启并检查
systemctl daemon-reload && systemctl enable --now buildkit && systemctl status buildkit
  • 配置
# 设置默认名称空间
[root@master1 ~]# mkdir /etc/nerdctl
[root@master1 ~]# cat > /etc/nerdctl/nerdctl.toml << EOF
namespace = "k8s.io"
EOF
  • 使用
# 登入
nerdctl --insecure-registry login --username "admin" --password Harbor12345 harbor.lab.home:443  
  
# 登出  
nerdctl logout 

# 推送到Harbor   
nerdctl --insecure-registry --namespace=k8s.io push myharbor-minio.com/bigdata/nginx:nerctl  
     --insecure-registry  跳过https证书检查

ctr --namespace=k8s.io images push myharbor-minio.com/bigdata/nginx:nerctl --skip-verify --user admin:Harbor12345