首页 - 新闻 - K8s 都开始放弃 Docker了,Containerd 命令走起

K8s 都开始放弃 Docker了,Containerd 命令走起

2023-09-27 01:38

当前 containerd 已经取代docker 成为默认的容器运行时了,我们在日常排查问题的时候,经常会使用containerd 的客户端去排查问题。所以日常的命令还是需要掌握的。

containerd 目前有三个客户端,分别是 ctr、nerdctl、crictl 下面我们逐一讲解一下。

nerdctl 的命令,我就不说了,因为 nerdctl 目的就是为了做一个兼容 docker 命令的客户端,所以使用的命令和 docker 完全保持一致。

我们就可以直接抛弃 docker + dockerd了,直接通过 nerdctl + containerd 了。

crictl

crictl 在k8s里面非常常用,严格来说,它并不是 containerd 的客户端,只是因为containerd 实现了crictl 的接口,所以可以使用 crictl 。crictl 是k8s CRI 客户端,所以,所有实现CRI 接口的服务,都可以使用 crictl

我们可以先通过

crictl pull xxx

拉镜像,然后启动 Pod(sandbox)

crictl runp pod.json

其中pod.json 内容如下:

{
"metadata": {
"name": "nginx-sandbox",
"namespace": "default",
"attempt": 1,
"uid": "hdishd83djaidwnduwk28bcsb"
},
"log_directory": "/tmp",
"linux": {
"security_context": {
"namespace_options":{
"network": 2
}
}
}
}

然后为这个pod 添加一个容器

 crictl create podID  container.json pod.json

其中,container.json 内容如下:

{
"metadata": {
"name": "busybox"
},
"image":{
"image": "busybox"
},
"command": [
"top"
],
"log_path":"busybox.log",
"linux": {
}
}

创建成功后,我们再通过 ctr 命令检查一下。

# ctr -n k8s.io c ls
CONTAINER IMAGE RUNTIME
56ae054eed20d0e4dbaf2bf300406baaedaa63646a3b0dc39911daaaff4cd569 docker.io/library/busybox:latest io.containerd.runc.v2
e23205e980b40ebeef875f9489321fe67906cbe62b6b6232912aa69b58842b95 k8s.gcr.io/pause:3.2 io.containerd.runc.v2

可以看到成功的启动了两个容器。