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