Kubernetes官宣宣布从v1.20开始放弃对Docker的支持。目前,Kubelet中的Docker支持已弃用,并将在未来的版本中删除。我们看下图(来源网络)。从上图我们可以看出docker对容器的管理和运行基本都是通过containerd来完成的。所以,如果你想从docker迁移过来,那么Containerd是一个非常好的首选。今天米工哥就和大家聊一聊这个开源技术Containerd。Containerd概览Containerd很早以前就存在于DockerEngine中,现在containerd作为一个独立的开源项目从DockerEngine中分离出来,目的是提供一个更加开放和稳定的容器运行基础设施。分离出来的containerd将会有更多的功能,覆盖整个容器运行时管理的所有需求,提供更强的支持。简单来说,containerd是一个强调简单性、健壮性和可移植性的行业标准容器运行时。containerd可以管理宿主机中完整的容器生命周期,包括容器镜像的传输和存储,容器、存储和网络的执行和管理等。地址:https://github.com/containerd...containerdarchitecture其中,grpc模块向上层提供服务接口,metrics提供监控数据(cgroup相关数据),两者都向上层提供服务。containerd包含一个通过本地UNIX套接字公开grpc接口的守护进程。存储部分负责镜像存储、管理、拉取等元数据管理容器和镜像元数据,通过bootio任务存储在磁盘上——管理容器的逻辑结构,与底层事件交互——事件对于容器操作,上层可以通过订阅Runtimes知道发生了什么——底层运行时(对接runc)Containerd能做什么??管理容器的生命周期(从创建容器到销毁容器)pull/push容器镜像存储管理(管理镜像和容器数据存储)调用runC运行容器(与runC和其他容器运行时交互)管理容器网络接口和网络从属从k8s的角度来看,选择containerd作为运行时组件,调用链更短,组件更少,更稳定,占用节点资源更少。上图来自containerd官网,containerd可以作为Linux和Windows的守护进程。它管理其主机系统的完整容器生命周期,从图像传输和存储到容器执行和监督,再到低级存储到网络附件等等。安装下载地址:https://containerd.io/downloads/[root@centos7~]#wgethttps://github.com/containerd/containerd/releases/download/v1.5.2/containerd-1.5.2-linux-amd64.tar.gz[root@centos7~]#tarzxfcontainerd-1.5.2-linux-amd64.tar.gz-C/usr/local/#通过以上操作,将containerd安装到/usr/local/bin下目录[root@centos7~]#cd/usr/local/bin/[root@centos7bin]#lltotal98068-rwxr-xr-x1rootroot214432Mar2905:20bpytop-rwxr-xr-x11001116490496965月19日12:56containerd-rwxr-xr-x1100111664348165月19日12:56containerd-shim-rwxr-xr-x1100111686712325月19日12:57containerd-vw1shim-r-xr-x1100111686835205月19日12:57containerd-shim-runc-v2-rwxr-xr-x11001116272309765月19日12:56ctrlrwxrwxrwx1rootroot6Mar2800:13-nc->netcatrwxr-xr-x1rootroot126800Mar2800:13netcat生成默认配置文件[root@centos7bin]#containerdconfigdefault>/etc/containerd/config.toml[root@centos7bin]#ll/etc/containerd/config.toml-rw-r--r--1rootroot6069Jun414:47/etc/containerd/config.toml配置containerd作为服务运行[root@centos7~]#touch/lib/systemd/system/containerd.service[root@centos7bin]#vim/lib/systemd/system/containerd.service[Unit]Description=containerdcontainerruntimeDocumentation=https://containerd.ioAfter=network.target[Service]ExecStartPre=/sbin/modprobeoverlayExecStart=/usr/local/bin/containerdDelegate=yesKillMode=processLimitNOFILE=1048576#具有非零的Limit*s会导致由于核算开销导致的性能问题#在内核中。我们建议使用cgroups来做容器本地记账。LimitNPROC=infinityLimitCORE=infinity[Install]WantedBy=multi-user.targetstartservice[root@centos7~]#systemctldaemon-reload[root@centos7~]#systemctlstartcontainerd。service[root@centos7~]#systemctlstatuscontainerd.servicecontainerd其实K3s这个史上最轻量级的Kubernetes发行版,默认包含了containerd、Flannel、CoreDNS组件ctr:是containerd本身的CLIcrictl:是Kubernetes社区定义的专门CLI工具[root@centos7~]#ctrversionClient:Version:v1.5.2Revision:36cc874494a56a253cd181a1a685b44b58a2e34aGoversion:go1.16.4Server:Version:v1.5.2Revision:36cc874494a56a253cd181a1a685b44b58a2e34aUUID:ebe42dac-40ae-4af1-99b0-52e61728c918帮助信息[root@centos7~]#ctr--helpNAME:ctr-_______//______/___/__/___//__//_//\___/\__/_/containerdCLIUSAGE:ctr[globaloptions]command[commandoptions][arguments...]VERSION:v1.5.2DESCRIPTION:ctr是一个不受支持的调试和管理客户端,用于与containerd守护进程交互。因为它不受支持,所以不能保证命令、选项和操作在containerd项目的发布之间是向后兼容或稳定的。COMMANDS:插件,插件提供有关containerd插件版本的信息打印客户端和服务器版本容器,c,containermanagecontentcontentmanagecontentevents,eventdisplaycontainerdeventsimages,image,imanageimagesleasesmanageleasesnamespaces,namespace,nsmanagenamespacespprofprovidegolangpprofoutputsforcontainerdrunrunacontainersnapshots,snapshot管理快照tasks,t,taskmanagetasksinstallinstallanewpackageociOCItoolsshim与shim直接交互help,h显示命令列表或一个命令的帮助全局选项:--debug在日志中启用调试输出--addressvalue,-avalueaddressforcontainerd'sGRPCserver(default:"/run/containerd/containerd.sock")[$CONTAINERD_ADDRESS]--timeoutvaluetotaltimeoutforctrco命令(默认值:0s)--connect-timeoutvalue连接到containerd的超时时间(默认值:0s)--namespacevalue,-nvaluenamespacetousewithcommands(默认值:“default”)[$CONTAINERD_NAMESPACE]--help,-hshowhelp--version,-vprinttheversion查看与删除[root@centos7~]#ctrcontainerlistCONTAINERIMAGERUNTIMEnginxdocker.io/library/nginx:alpineio.containerd.runc.v2[root@centos7~]#ctrcontainerdelnginx[root@centos7~]#ctrcontainerlistCONTAINERIMAGERUNTIMEpull镜像文件[root@centos7~]#ctrimagespulldocker.io/library/nginx:alpine查看镜像文件列表[root@centos7~]#ctr图像列表参考类型摘要大小平台标签docker.io/library/nginx:alpineapplication/vnd.docker.distribution.manifest.list.v2+jsonsha256:0f8595aa040ec107821e0409a1dd3f7a5e989501d5c8d5b5ca1f955f33ac81a09.4MiBlinux/386,linux/linux/amd64,linux/linux/amd64linux/arm64/v8,linux/ppc64le,linux/s390x-运行容器[root@centos7~]#ctrrun-ddocker.io/library/nginx:alpinenginx[root@centos7~]#ctrcontainerlistCONTAINERIMAGERUNTIMEnginxdocker.io/library/nginx:alpineio.containerd.runc.v2经过一轮使用,基本和docker命令一样,在使用上也没有太大的学习成本。因此,Kubernetes是否支持docker,对于我们用户来说,并不是什么大问题。更多相关介绍和实际操作指南,可以参考官方文档,里面有详细的使用说明。
