• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

为什么 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)。

NERDCTL.png

下面列出了一些与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
0
下一篇:systemd 中的 Drop-In文件 覆盖或新增服务选项

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。