Containerd ctr、crictl、nerdctl客户端命令

1,325 阅读1分钟

Kubertenes 1.24 开始 kubelet 就彻底移除了dockershim,改为默认使用Containerd,当然也可以使用cri-dockerd 适配器来将 Docker Engine 与 Kubernetes 集成。(参考:kubernetes.io/zh-cn/docs/… 更换Containerd之后docker命令也不能再使用了,取而代之的是ctr命令。

ctr

ctr 是 containerd 的一个客户端工具,默认不需要安装,使用ctr命令时需要加上-n参数,通常在k8s.io这个命名空间。

$ ctr -v
ctr github.com/containerd/containerd 1.6.19
  • 查看容器
$ ctr -n k8s.io container ls 
CONTAINER                                                           IMAGE                                                                                                               RUNTIME                  
04c1358b090d8ebe204227df71e03990d9ab03732ea83d679ebdf464b277e104    602401143452.dkr.ecr.us-east-2.amazonaws.com/amazon-k8s-cni-init:v1.10.1-eksbuild.1                                 io.containerd.runc.v2    
10070bd70558b12818bbc690d2b340f6f5dd4d6a134a0178e43191a68b0307d4    602401143452.dkr.ecr-fips.us-east-1.amazonaws.com/eks/pause:3.5                                                     io.containerd.runc.v2  
  • 进入容器
$ ctr -n k8s.io  tasks ls
TASK                                                                PID      STATUS    
ca7b34057be393eaa79bf9aa179d4c739b894d601d076e547c914abd5b8f88f4    14859    RUNNING
dc886a714a94d6b25998c5aa7dba9f3bbe201be66b55b4eba212b0b0d63aba0b    15668    RUNNING

$ ctr -n k8s.io task exec -t --exec-id 14859 ca7b34057be393eaa79bf9aa179d4c739b894d601d076e547c914abd5b8f88f4 sh

crictl

crictl 是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器,crictl 是只有一个k8s.io命名空间,没有-n 参数。

  • 安装

注意选择与kubernetes对应的版本

$ VERSION="v1.26.0"
$ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
$ sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
$ rm -f crictl-$VERSION-linux-amd64.tar.gz
  • 查看容器
$  crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                                 ATTEMPT             POD ID              POD
df59cd330135f       b138b9264903f       2 hours ago         Running             http-bin                             0                   a15477db75706       http-bin-5d6fccf4f-c5ltl
30648e7ec2a2c       d03c6676c0bc3       2 hours ago         Running             velaux                               0                   10070bd70558b       velaux-545b596779-wwppx
3800836033830       d30a9fe3592fb       2 hours ago         Running             metrics-server                       0                   880a4f04475ff       metrics-server-84b4994f5f-95fcc
  • 进入容器
$ crictl exec -it df59cd330135f sh

nerdctl

nerdctl是 containerd 客户端工具,与docker命令的语法一致。

  • 安装
$ wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
$ tar xvf nerdctl-1.4.0-linux-amd64.tar.gz 
$ mv nerdctl /usr/local/bin
$ rm -f nerdctl-1.4.0-linux-amd64.tar.gz 
  • 查看容器
$ nerdctl namespace ls
$ nerdctl -n k8s.io ps
CONTAINER ID    IMAGE                                                                                                               COMMAND                   CREATED        STATUS    PORTS    NAMES
10070bd70558    602401143452.dkr.ecr-fips.us-east-1.amazonaws.com/eks/pause:3.5                                                     "/pause"                  3 hours ago    Up                 k8s://vela-system/velaux-545b596779-wwppx
15eaf8c39da0    602401143452.dkr.ecr-fips.us-east-1.amazonaws.com/eks/pause:3.5                                                     "/pause"                  3 hours ago    Up                 k8s://kube-system/aws-node-wzhs7
  • 进入容器
$ nerdctl -n k8s.io exec -it 1633bb02e1b6 sh