为什么 containerd 使用 nerdctl 管理容器
k8s 中 为什么 Docker CLI 不再有效
containerd 在容器运行时级别支持命名空间。这些命名空间与 K8s 命名空间完全不同。containerd 的命名空间用于为使用containerd的不同应用程序提供隔离,如: docker、kubelet 等。下面是两个众所周知的命名空间。
K8s.io:包含 kubelet 通过 CRI 插件启动的所有容器,与 Kubernetes 中的命名空间无关
moby:包含由 docker 启动的所有容器
由于 containerd 允许不同的应用程序使用不同的命名空间,因此您必须在直接与 containerd 交互时使用 k8s.io 作为命名空间。。所有启动的容器都被添加到 k8s.io 命名空间中。Docker 无法再看到这些容器。
为什么不用 CTR
containerd 有它自带的 CLI,称为 ctr,但是,ctr 仅用于测试目的,用于测试 containerd 的低级功能。ctr的设计不是很人性化,缺少很多 dockerCLI 的特性,比如:docker run, docker pull,docker logs 等等。如果你看一下ctr参数,你会发现它非常有限:
containerd CLI USAGE: ctr [global options] command [command options] [arguments...] VERSION: v1.6.8 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
甚至的他的文档都说,ctr 是一个不受支持的,用于与 containerd 守护进程交互的调试和管理客户端。
为什么不用 CRICTL
crictl 是一个符合 CRI 接口规范的命令行工具,通常用于检查和管理 kubelet 节点上的容器运行时和镜像。
一般来说,你在一台主机上安装好k8s后,命令行就会有 crictl 命令。并且 ctr 与 k8s 无关,在你的宿主机上安装 containerd 服务后, ctr 即可运行。
crictl 与 ctr 相比,crictl 肯定更好,但其功能和 UI/UX 与 ctr 类似,不兼容Docker CLI,对用户不友好,不支持非CRI特性。
critcl的帮助手册如下:
NAME: crictl - client for CRI USAGE: crictl [global options] command [command options] [arguments...] VERSION: v1.25.0 COMMANDS: attach Attach to a running container create Create a new container exec Run a command in a running container version Display runtime version information images, image, img List images inspect Display the status of one or more containers inspecti Return the status of one or more images imagefsinfo Return image filesystem info inspectp Display the status of one or more pods logs Fetch the logs of a container port-forward Forward local port to a pod ps List containers pull Pull an image from a registry run Run a new container inside a sandbox runp Run a new pod rm Remove one or more containers rmi Remove one or more images rmp Remove one or more pods pods List pods start Start one or more created containers info Display information of the container runtime stop Stop one or more running containers stopp Stop one or more running pods update Update one or more running containers config Get and set crictl client configuration options stats List container(s) resource usage statistics statsp List pod resource usage statistics completion Output shell completion code checkpoint Checkpoint one or more running containers help, h Shows a list of commands or help for one command
为什么使用 NERDCTL
nerdctl 是用于 containerd 的 与 Docker CLI 兼容的 CLI。nerdctl 的目标是促进试验Docker 中不存在的尖端功能。这些功能包括但不限于:延迟拉取 (stargz) 和图像加密 (ocicrypt)。
下面列出了一些与docker类似的命令参考,如需完整列表,请访问 https://github.com/containerd/nerdctl
nerdctl run:在新容器中运行命令
nerdctl exec:在正在运行的容器中运行命令
nerdctl create : 创建一个新容器
nerdctl logs : 获取容器日志
nerdctl start:启动一个或多个正在运行的容器。
nerdctl stop:停止一个或多个正在运行的容器。
nerdctl restart:重启一个或多个正在运行的容器。
nerdctl rm/rmi:删除一个或多个容器/图像。
nerdctl container prune:删除所有停止的容器。
nerdctl build:从 Dockerfile 构建图像。
nerdctl pull/push:从注册表中拉取/推送图像。
摘自:
K8s — 为什么对 containerd 使用 nerdctl
共 0 条评论