Docker 作为非常流行的容器技术,之前经常有文章说它被 K8S 弃用了,取而代之的是另一种容器技术 containerd!其实 containerd 只是从 Docker 中分离出来的底层容器运行时,使用起来和 Docker 并没有啥区别,本文主要介绍下 containerd 的使用,希望对大家有所帮助!
containerd 简介
- containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。
- containerd 可以在宿主机中管理完整的容器生命周期,包括容器镜像的传输和存储、容器的执行和管理、存储和网络等。
Docker vs containerd
containerd 是从 Docker 中分离出来的一个项目,可以作为一个底层容器运行时,现在它成了Kubernete 容器运行时更好的选择。
不仅仅是 Docker,还有很多云平台也支持 containerd 作为底层容器运行时,具体参考下图。
K8s CRI
K8s 发布CRI(Container Runtime Interface),统一了容器运行时接口,凡是支持 CRI 的容器运行时,皆可作为 K8s 的底层容器运行时。
K8s 为什么要放弃使用 Docker 作为容器运行时,而使用 containerd 呢?
如果你使用 Docker 作为 K8s 容器运行时的话,kubelet 需要先要通过 dockershim 去调用Docker,再通过Docker去调用 containerd 。
如果你使用 containerd 作为 K8s 容器运行时的话,由于containerd 内置了 CRI 插件,kubelet 可以直接调用 containerd 。
使用 containerd 不仅性能提高了(调用链变短了),而且资源占用也会变小(Docker 不是一个纯粹的容器运行时,具有大量其他功能)。
containerd 使用
如果你之前用过Docker,你只要稍微花5分钟就可以学会 containerd 了,接下来我们学习下containerd 的使用。
- 在之前的文章《据说只有高端机器才配运行K8S,网友:1G内存的渣渣跑起来了!》中我们安装了 K3s,由于 K3s 中默认使用 containerd 作为容器运行时,我们只要安装好 K3s 就可以使用它了;
- 其实只要把我们之前使用的 docker 命令改为 crictl 命令即可操作 containerd,比如查看所有运行中的容器;
crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
4ca73ded41bb6 3b0b04aa3473f Less than a second ago Running helm 20 21103f0058872
3bb5767a81954 296a6d5035e2d About a minute ago Running coredns 1 af887263bd869
a5e34c24be371 0346349a1a640 About a minute ago Running nginx 1 89defc6008501
- 查看所有镜像;
crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/library/nginx 1.10 0346349a1a640 71.4MB
docker.io/rancher/coredns-coredns 1.8.0 296a6d5035e2d 12.9MB
docker.io/rancher/klipper-helm v0.4.3 3b0b04aa3473f 50.7MB
docker.io/rancher/local-path-provisioner v0.0.14 e422121c9c5f9 13.4MB
docker.io/rancher/metrics-server v0.3.6 9dd718864ce61 10.5MB
docker.io/rancher/pause 3.1 da86e6ba6ca19 327kB
- 进入容器内部执行bash命令,这里需要注意的是只能使用容器ID,不支持使用容器名称;
crictl exec -it a5e34c24be371 /bin/bash
- 查看容器中应用资源占用情况,可以发现占用非常低。
crictl stats
CONTAINER CPU % MEM DISK INODES
3bb5767a81954 0.54 14.27MB 254B 14
a5e34c24be371 0.00 2.441MB 339B 16
总结
从 Docker 转型 containerd 非常简单,基本没有什么门槛。只要把之前 Docker 命令中的 docker改为 crictl 基本就可以了,果然是同一个公司出品的东西,用法都一样。所以不管 K8s 到底弃用不弃用 Docker,对我们开发者使用来说,基本没啥影响!
来源:https://mp.weixin.qq.com/s/jBP7E7DL5vJ0zp5UnSFNBg