再见 Docker !分分钟转型 Containerd

举报
民工哥 发表于 2022/03/31 22:45:51 2022/03/31
【摘要】   Kubernetes 官方发布公告,宣布自 v1.20 起放弃对 Docker 的支持。目前,Kubelet 中的 Docker 支持功能现已弃用,并将在之后的版本中被删除。 再来看下面这张图(来源网络) 从上图中可以看出 docker 对容器的管理和操作基本都是通过 containerd 完成...

 

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/

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/


   
  1. [root@centos7 ~]# wget https://github.com/containerd/containerd/releases/download/v1.5.2/containerd-1.5.2-linux-amd64.tar.gz
  2. [root@centos7 ~]# tar zxf containerd-1.5.2-linux-amd64.tar.gz -C /usr/local/
  3. #通过上面的操作,将containerd 安装至/usr/local/bin目录下
  4. [root@centos7 ~]# cd /usr/local/bin/
  5. [root@centos7 bin]# ll
  6. total 98068
  7. -rwxr-xr-x 1 root root   214432 Mar 29 05:20 bpytop
  8. -rwxr-xr-x 1 1001  116 49049696 May 19 12:56 containerd
  9. -rwxr-xr-x 1 1001  116  6434816 May 19 12:56 containerd-shim
  10. -rwxr-xr-x 1 1001  116  8671232 May 19 12:57 containerd-shim-runc-v1
  11. -rwxr-xr-x 1 1001  116  8683520 May 19 12:57 containerd-shim-runc-v2
  12. -rwxr-xr-x 1 1001  116 27230976 May 19 12:56 ctr
  13. lrwxrwxrwx 1 root root        6 Mar 28 00:13 nc -> netcat
  14. -rwxr-xr-x 1 root root   126800 Mar 28 00:13 netcat

生成默认配置文件


   
  1. [root@centos7 bin]# containerd config default > /etc/containerd/config.toml
  2. [root@centos7 bin]# ll /etc/containerd/config.toml 
  3. -rw-r--r-- 1 root root 6069 Jun  4 14:47 /etc/containerd/config.toml

配置 containerd 作为服务运行


   
  1. [root@centos7 ~]# touch /lib/systemd/system/containerd.service
  2. [root@centos7 bin]# vim /lib/systemd/system/containerd.service
  3. [Unit]
  4. Description=containerd container runtime
  5. Documentation=https://containerd.io
  6. After=network.target
  7. [Service]
  8. ExecStartPre=/sbin/modprobe overlay
  9. ExecStart=/usr/local/bin/containerd
  10. Delegate=yes
  11. KillMode=process
  12. LimitNOFILE=1048576
  13. # Having non-zero Limit*s causes performance problems due to accounting overhead
  14. # in the kernel. We recommend using cgroups to do container-local accounting.
  15. LimitNPROC=infinity
  16. LimitCORE=infinity
  17. [Install]
  18. WantedBy=multi-user.target

启动服务


   
  1. [root@centos7 ~]# systemctl daemon-reload
  2. [root@centos7 ~]# systemctl start containerd.service
  3. [root@centos7 ~]# systemctl status containerd.service

containerd 使用

其实,史上最轻量 Kubernetes 发行版 K3s 默认就包括了 containerd、Flannel、CoreDNS 组件。

  • ctr:是containerd本身的CLI

  • crictl :是Kubernetes社区定义的专门CLI工具


   
  1. [root@centos7 ~]# ctr version
  2. Client:
  3.   Version:  v1.5.2
  4.   Revision: 36cc874494a56a253cd181a1a685b44b58a2e34a
  5.   Go version: go1.16.4
  6. Server:
  7.   Version:  v1.5.2
  8.   Revision: 36cc874494a56a253cd181a1a685b44b58a2e34a
  9.   UUID: ebe42dac-40ae-4af1-99b0-52e61728c918

帮助信息


   
  1. [root@centos7 ~]# ctr --help
  2. NAME:
  3.    ctr - 
  4.         __
  5.   _____/ /______
  6.  / ___/ __/ ___/
  7. / /__/ /_/ /
  8. \___/\__/_/
  9. containerd CLI
  10. USAGE:
  11.    ctr [global options] command [command options] [arguments...]
  12. VERSION:
  13.    v1.5.2
  14. DESCRIPTION:
  15.    
  16. ctr is an unsupported debug and administrative client for interacting
  17. with the containerd daemon. Because it is unsupported, the commands,
  18. options, and operations are not guaranteed to be backward compatible or
  19. stable from release to release of the containerd project.
  20. COMMANDS:
  21.    plugins, plugin            provides information about containerd plugins
  22.    version                    print the client and server versions
  23.    containers, c, container   manage containers
  24.    content                    manage content
  25.    events, event              display containerd events
  26.    images, image, i           manage images
  27.    leases                     manage leases
  28.    namespaces, namespace, ns  manage namespaces
  29.    pprof                      provide golang pprof outputs for containerd
  30.    run                        run a container
  31.    snapshots, snapshot        manage snapshots
  32.    tasks, t, task             manage tasks
  33.    install                    install a new package
  34.    oci                        OCI tools
  35.    shim                       interact with a shim directly
  36.    help, h                    Shows a list of commands or help for one command
  37. GLOBAL OPTIONS:
  38.    --debug                      enable debug output in logs
  39.    --address value, -a value    address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
  40.    --timeout value              total timeout for ctr commands (default: 0s)
  41.    --connect-timeout value      timeout for connecting to containerd (default: 0s)
  42.    --namespace value, -n value  namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
  43.    --help, -h                   show help
  44.    --version, -v                print the version

查看与删除


   
  1. [root@centos7 ~]# ctr container list
  2. CONTAINER    IMAGE                             RUNTIME                  
  3. nginx        docker.io/library/nginx:alpine    io.containerd.runc.v2    
  4. [root@centos7 ~]# ctr container del nginx
  5. [root@centos7 ~]# ctr container list
  6. CONTAINER    IMAGE    RUNTIME   

pull镜像文件

[root@centos7 ~]# ctr images pull docker.io/library/nginx:alpine

  

查看镜像文件列表


   
  1. [root@centos7 ~]# ctr images list
  2. REF                            TYPE                                                      DIGEST                                                                  SIZE    PLATFORMS                                                                                LABELS 
  3. 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 - 

运行容器


   
  1. [root@centos7 ~]# ctr run -d docker.io/library/nginx:alpine nginx
  2. [root@centos7 ~]# ctr container list
  3. CONTAINER    IMAGE                             RUNTIME                  
  4. nginx        docker.io/library/nginx:alpine    io.containerd.runc.v2 

一圈使用下来,基本上与docker的命令相差无几,使用上没有什么大的学习成本,所以,无论是 Kubernetes 是否支持 docker,对于我们使用者来讲,问题不大。

更多相关的介绍与实际操作指南,大家可以参阅官方文档,都有详细的使用说明。

文章来源: mingongge.blog.csdn.net,作者:民工哥,版权归原作者所有,如需转载,请联系作者。

原文链接:mingongge.blog.csdn.net/article/details/117935935

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。