Kubernetes 官网发布公告,发表自 v1.20 起放弃对 Docker 的反对。目前,Kubelet 中的 Docker 反对性能现已弃用,并将在之后的版本中被删除。
再来看上面这张图(起源网络)
从上图中能够看出 docker 对容器的治理和操作根本都是通过 containerd 实现的。所以,如果大家想从 docker 迁徙进去,那么 Containerd 是一个十分不错的先择。
明天,民工哥就和大家来聊一聊这个开源技术 Containerd。
Containerd 概述
很早之前的 Docker Engine 中就有了 containerd,只不过当初是将 containerd 从 Docker Engine 里分离出来,作为一个独立的开源我的项目,指标是提供一个更加凋谢、稳固的容器运行基础设施。分离出来的 containerd 将具备更多的性能,涵盖整个容器运行时治理的所有需要,提供更弱小的反对。
简略的来说,containerd 是一个工业级规范的容器运行时,它强调简略性、健壮性和可移植性。containerd 能够在宿主机中治理残缺的容器生命周期,包含容器镜像的传输和存储、容器的执行和治理、存储和网络等 。
地址:https://github.com/containerd…
containerd 架构
其中,grpc 模块向下层提供服务接口,metrics 则提供监控数据 (cgroup 相干数据),两者均向下层提供服务。containerd 蕴含一个守护过程,该过程通过本地 UNIX 套接字裸露 grpc 接口。
storage 局部负责镜像的存储、治理、拉取等 metadata 治理容器及镜像的元数据,通过 bootio 存储在磁盘上 task — 治理容器的逻辑构造,与 low-level 交互 event — 对容器操作的事件,下层通过订阅能够晓得产生了什么事件 Runtimes — low-level runtime(对接 runc)
Containerd 能做什么??
- 治理容器的生命周期 (从创立容器到销毁容器)
- 拉取 / 推送容器镜像
- 存储管理 (治理镜像及容器数据的存储)
- 调用 runC 运行容器 (与 runC 等容器运行时交互)
- 治理容器网络接口及网络
从 k8s 的角度看,抉择 containerd 作为运行时的组件,它调用链更短,组件更少,更稳固,占用节点资源更少。
上图起源 containerd 官方网站,containerd 可用作 Linux 和 Windows 的守护程序。它治理其主机零碎的残缺容器生命周期,从图像传输和存储到容器执行和监督,再到低级存储到网络附件等等。
装置
下载地址:https://containerd.io/downloads/
[root@centos7 ~]# wget https://github.com/containerd/containerd/releases/download/v1.5.2/containerd-1.5.2-linux-amd64.tar.gz
[root@centos7 ~]# tar zxf containerd-1.5.2-linux-amd64.tar.gz -C /usr/local/
#通过下面的操作,将 containerd 装置至 /usr/local/bin 目录下
[root@centos7 ~]# cd /usr/local/bin/
[root@centos7 bin]# ll
total 98068
-rwxr-xr-x 1 root root 214432 Mar 29 05:20 bpytop
-rwxr-xr-x 1 1001 116 49049696 May 19 12:56 containerd
-rwxr-xr-x 1 1001 116 6434816 May 19 12:56 containerd-shim
-rwxr-xr-x 1 1001 116 8671232 May 19 12:57 containerd-shim-runc-v1
-rwxr-xr-x 1 1001 116 8683520 May 19 12:57 containerd-shim-runc-v2
-rwxr-xr-x 1 1001 116 27230976 May 19 12:56 ctr
lrwxrwxrwx 1 root root 6 Mar 28 00:13 nc -> netcat
-rwxr-xr-x 1 root root 126800 Mar 28 00:13 netcat
生成默认配置文件
[root@centos7 bin]# containerd config default > /etc/containerd/config.toml
[root@centos7 bin]# ll /etc/containerd/config.toml
-rw-r--r-- 1 root root 6069 Jun 4 14:47 /etc/containerd/config.toml
配置 containerd 作为服务运行
[root@centos7 ~]# touch /lib/systemd/system/containerd.service
[root@centos7 bin]# vim /lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Delegate=yes
KillMode=process
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
启动服务
[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl start containerd.service
[root@centos7 ~]# systemctl status containerd.service
containerd 应用
其实,史上最轻量 Kubernetes 发行版 K3s 默认就包含了 containerd、Flannel、CoreDNS 组件。
- ctr:是 containerd 自身的 CLI
- crictl:是 Kubernetes 社区定义的专门 CLI 工具
[root@centos7 ~]# ctr version
Client:
Version: v1.5.2
Revision: 36cc874494a56a253cd181a1a685b44b58a2e34a
Go version: go1.16.4
Server:
Version: v1.5.2
Revision: 36cc874494a56a253cd181a1a685b44b58a2e34a
UUID: ebe42dac-40ae-4af1-99b0-52e61728c918
帮忙信息
[root@centos7 ~]# ctr --help
NAME:
ctr -
__
_____/ /______
/ ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/
containerd CLI
USAGE:
ctr [global options] command [command options] [arguments...]
VERSION:
v1.5.2
DESCRIPTION:
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.
COMMANDS:
plugins, plugin provides information about containerd plugins
version print the client and server versions
containers, c, container manage containers
content manage content
events, event display containerd events
images, image, i manage images
leases manage leases
namespaces, namespace, ns manage namespaces
pprof provide golang pprof outputs for containerd
run run a container
snapshots, snapshot manage snapshots
tasks, t, task manage tasks
install install a new package
oci OCI tools
shim interact with a shim directly
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug enable debug output in logs
--address value, -a value address for containerd's GRPC server (default:"/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
--timeout value total timeout for ctr commands (default: 0s)
--connect-timeout value timeout for connecting to containerd (default: 0s)
--namespace value, -n value namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
--help, -h show help
--version, -v print the version
查看与删除
[root@centos7 ~]# ctr container list
CONTAINER IMAGE RUNTIME
nginx docker.io/library/nginx:alpine io.containerd.runc.v2
[root@centos7 ~]# ctr container del nginx
[root@centos7 ~]# ctr container list
CONTAINER IMAGE RUNTIME
pull 镜像文件
[root@centos7 ~]# ctr images pull docker.io/library/nginx:alpine
查看镜像文件列表
[root@centos7 ~]# ctr images list
REF TYPE DIGEST SIZE PLATFORMS LABELS
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:0f8595aa040ec107821e0409a1dd3f7a5e989501d5c8d5b5ca1f955f33ac81a0 9.4 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -
运行容器
[root@centos7 ~]# ctr run -d docker.io/library/nginx:alpine nginx
[root@centos7 ~]# ctr container list
CONTAINER IMAGE RUNTIME
nginx docker.io/library/nginx:alpine io.containerd.runc.v2
一圈应用下来,基本上与 docker 的命令相差无几,应用上没有什么大的学习老本,所以,无论是 Kubernetes 是否反对 docker,对于咱们使用者来讲,问题不大。
更多相干的介绍与实际操作指南,大家能够参阅官网文档,都有具体的应用阐明。