QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Docker 出局?你还有 iSula、Containerd 和 CRI-O

  • 2020-12-17
  • 本文字数:3376 字

    阅读完需:约 11 分钟

Docker出局?你还有iSula、Containerd和CRI-O

Docker 真的要被 Kubernetes 社区剔除了吗?


最近,Kubernetes 在 1.20 版本中 的 ChangeLog 提到将在未来的版本中废弃 Docker 作为容器运行时,这个事情在全球都闹得沸沸扬扬。


那么,Kubernetes 要在 v1.20 开始弃用 docker 了?其实是 Kubernetes 弃用 kubelet 中集成的 dockershim 模块,也就是说不再将 docker 作为默认的 Container Runtime,不过 Kubernetes 应该还是可以通过外接方式使用 Docker 的,感兴趣的同学可以通过以下链接了解个中缘由:


  • 「Dockershim Deprecation FAQ」: https://kubernetes.io/blog/2020/12/02/dockershim-faq

  • 「Don't Panic: Kubernetes and Docker」: https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker

对于使用 Docker 的 KubeSphere 用户有没有影响


该消息一出,社区里就有很多用户小伙伴问我们对 KubeSphere 的使用有没有影响,土耳其的合作伙伴也联系我们希望提供一个官方声明。



dockershim 一直都是 Kubernetes 社区为了能让 Docker 成为其支持的容器运行时,所维护的一个兼容程序。本次所谓的废弃,也仅仅是 Kubernetes 要放弃对现在 Kubernetes 代码仓库中的 dockershim 的维护支持。以便其可以像开始时计划的那样,仅负责维护其 CRI ,任何兼容 CRI 的运行时,皆可作为 Kubernetes 的 runtime,例如 Isula、CRI-O、Containerd 等。


目前,KubeSphere 容器平台默认使用 Docker 作为 Kubernetes 的容器运行时,同时也支持任何兼容 CRI 接口的具体实现。对于已经使用 Docker 的 KubeSphere 用户来说,这一事件对用户已有系统的运行不会有任何影响,也不会对将来的集群部署和业务产生影响,KubeSphere 用户可以根据需求选择继续使用已被大规模验证过的 Docker,或是选择目前比较流行的 Isula、Containerd、CRI-O 等新的容器运行时。在后续版本,KubeSphere 的 DevOps 等功能组件也将逐步支持这些容器运行时,并在未来将支持生产环境中使用这些 CRI。


下一代容器运行时 iSula、Containerd 和 CRI-O



iSula


iSula https://openeuler.org/zh/docs/20.09/docs/Container/iSula)是由 openEuler 社区开源的容器引擎,iSula 相比 Docker 是一种新的容器解决方案,提供统一的架构设计来满足 CT 和 IT 领域的不同需求。相比 Golang 编写的 Docker,轻量级容器使用 C/C++ 实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。


Containerd


Containerdhttps://containerd.io)是一个 CNCF 毕业项目,目前也是工业级标准的容器运行时,它极为简单、健壮并且具备可移植性。Containerd 可以在宿主机中管理完整的容器生命周期。


CRI-O


CRI-Ohttps://cri-o.io)是由红帽发起并开源的一款容器运行时,是面向 Kubernetes 的 OCI(Open Container Initiative)的容器运行时,CRI-O 能够让 Kubernetes 使用任意兼容 OCI 的运行时作为运行 Pod 的容器运行时,CRI-O 本身也是 CRI-runtime。

部署 iSula、Containerd 和 CRI-O


在文章开头提到 KubeSphere 是支持任何兼容 CRI 接口的具体实现,接下来我们动手实践验证一下 3 个不同容器运行时:Containerd、CRI-O、iSula 的安装,以及对接 KubeSphere 进行查看与验证。


首先部署容器运行时,可根据需要在 Containerd、CRI-O、iSula 中任选其一。若部署多节点集群,注意集群中所有节点的容器运行时应保持一致。


Containerd


  1. 安装 runc。


$ curl -OL https://github.com/opencontainers/runc/releases/download/v1.0.0-rc92/runc.amd64$ mv runc.amd64 /usr/local/bin/runc && chmod +x /usr/local/bin/runc
复制代码


    1. 下载 Containerd 安装包。

    $ curl -OL https://github.com/containerd/containerd/releases/download/v1.4.3/containerd-1.4.3-linux-amd64.tar.gz$ tar -zxvf containerd-1.4.3-linux-amd64.tar.gz -C /usr/local$ curl -o /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/cri/master/contrib/systemd-units/containerd.service
    复制代码


    1. 配置 Containerd。


    $ mkdir -p /etc/containerd
    $ cat > /etc/containerd/config.toml << EOF[plugins] [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "kubesphere/pause:3.2" [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"] ## 这里可替换成dockerhub的镜像加速器EOF
    $ systemctl enable containerd && systemctl restart containerd
    复制代码


    1. 安装 crictl。


    $ VERSION="v1.19.0"
    $ curl -OL https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
    $ sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
    $ rm -f crictl-$VERSION-linux-amd64.tar.gz
    复制代码


    1. 配置 crictl。


    $ cat > /etc/crictl.yaml << EOFruntime-endpoint: unix:///run/containerd/containerd.sockimage-endpoint: unix:///run/containerd/containerd.socktimeout: 2debug: falsepull-image-on-create: falseEOF
    复制代码


    CRI-O


    1. 下载安装 CRI-O。


    $ yum install git make
    $ curl -OL https://github.com/cri-o/cri-o/releases/download/v1.18.4/crio-v1.18.4.tar.gztar -zxf crio-v1.18.4.tar.gz
    $ cd crio-v1.18.4
    $ mkdir -p /etc/crio /opt/cni/bin /usr/local/share/oci-umount/oci-umount.d /usr/local/lib/systemd/system
    $ make install
    $ echo "fs.may_detach_mounts=1" >> /etc/sysctl.conf
    $ sysctl -p
    复制代码


    1. 配置 CRI-O。



    $ vi /etc/crio/crio.conf
    复制代码


    找到如下参数进行修改


    pause_image = "kubesphere/pause:3.2"registries = [  "docker.io"       ## 这里可替换成dockerhub的镜像加速器]
    复制代码


    1. 启动 CRI-O。


    systemctl enable crio && systemctl restart crio
    复制代码


    安装 iSula(操作系统使用 openEuler 20.09)


    1. 在 openEuler 20.09 系统安装 iSula。


    $ yum install iSulad -y
    复制代码


    2. 配置 iSula。


    $ vim /etc/isulad/daemon.json
    复制代码


    3. 对如下参数进行修改。


    "registry-mirrors": [    "docker.io"           ## 这里可替换成dockerhub的镜像加速器 ]"pod-sandbox-image": "kubesphere/pause:3.2""network-plugin": "cni""cni-bin-dir": "/opt/cni/bin""cni-conf-dir": "/etc/cni/net.d"
    复制代码


    1. 启动 iSula。


    $ systemctl enable isulad && systemctl restart isulad
    复制代码


    KubeKey 部署 K8s + KubeSphere


    我们使用 KubeSphere 开源的集群安装工具 KubeKey 来快速部署 KubeSphere + Kubernetes 集群。


    1. 下载 KubeKey。


    这里暂时使用 kubekey v1.1.0-alpha.1 部署 Kubernetes 集群,该版本为预览版,支持多 container-runtime 也会包含在后续的正式版本中。


    $ curl -OL https://github.com/kubesphere/kubekey/releases/download/v1.1.0-alpha.1/kubekey-v1.1.0-alpha.1-linux-amd64.tar.gz
    $ tar -zxvf kubekey-v1.1.0-alpha.1-linux-amd64.tar.gz
    复制代码


    1. 创建配置文件。


    ./kk create config # 默认在同级目录下生成 config-sample.yaml
    复制代码


    3. 根据具体的机器环境信息修改配置文件,本文仅对配置 Docker 以外的 CRI 进行说明,其它配置项请参考 KubeSphere 官方文档(https://kubesphere.io/docs)。



    1. 一键部署集群。


    ./kk create cluster -f config-sample.yaml  --with-kubesphere v3.0.0
    复制代码


    访问 KubeSphere 验证不同的 CRI


    当以上 3 个集群部署完成后,可分别登录该集群的 KubeSphere 控制台,进入「集群节点页面」,查看集群节点所使用的容器运行时。



    iSula on openEuler 20.09



    Containerd



    CRI-O



    参考


    • KubeSphere GitHub: https://github.com/kubesphere/kubesphere

    • KubeSphere 中文论坛:https://kubesphere.com.cn/forum/d/3054-dockerkubernetes

    • Kubernetes 官方博客: https://kubernetes.io/blog/2020/12/02/dockershim-faq

    • K8S 弃用 Docker 了?Docker 不能用了?别逗了:https://mp.weixin.qq.com/s/z6s4QliBHs08pVj0GQ03dw



    头图:Unsplash

    作者:KubeSphere

    原文基于 KubeSphere 部署 TiDB 云原生分布式数据库

    来源:KubeSphere - 微信公众号 [ID:gh_4660e44db839]

    转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


    2020-12-17 22:495715

    评论

    发布
    暂无评论
    发现更多内容

    【DBA100人】李建明:一名普通DBA的14年技术之路与成长智慧

    OceanBase 数据库

    从 “搞不清楚” 到 “都明白了” 的费曼

    图灵社区

    量子力学 物理学家

    CI 可观测性使变更管理发挥作用|Foresight

    观测云

    Python条件语句怎么用

    和牛

    Python 8月月更

    长安链源码分析启动(3)

    长安链

    低代码适用于哪些应用开发场景

    力软低代码开发平台

    APICloud AVM 封装验证码输入框组件

    YonBuilder低代码开发平台

    程序员 前端开发 低代码开发 多端开发

    最新出炉!深度解读《中国DevOps现状调查报告(2022)》

    嘉为蓝鲸

    DevOps

    测试右移之logstash完整配置实例

    霍格沃兹测试开发学社

    详解 OpenDAL |Data Infra 研究社第三期

    Databend

    线上直播 大数据 开源 databend OpenDAL Datafuse Labs

    从 “搞不清楚” 到 “都明白了” 的费曼

    图灵教育

    量子力学 物理学家

    APICloud 可视化编程 - 拖拉拽实现专业级源码

    YonBuilder低代码开发平台

    低代码开发 多端开发 可视化开发

    测试左移之Sonarqube maven项目分析

    霍格沃兹测试开发学社

    干货 | 实战演练基于加密接口测试测试用例设计

    霍格沃兹测试开发学社

    长安链源码分析启动(2)

    长安链

    区块链商用案例:网间结算联盟链建设实战

    鲸品堂

    区块链 运营商 企业号九月金秋榜

    Nft数字藏品app开发,开发数字藏品系统

    开源直播系统源码

    数字藏品 数字藏品软件开发 数字藏品开发 数字藏品系统

    2022年Q2银行APP活跃用户规模盘点:头部银行增长稳定

    易观分析

    金融 银行 用户规模

    Dubbo 3.1.0 正式发布,数据面原生接入 Service Mesh

    阿里巴巴云原生

    阿里云 云原生 dubbo

    他只是试图运用自己的能力,给这个领域带来改变

    图灵社区

    通信 科学史

    即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术

    JackJiang

    网络安全 网络编程 即时通讯 IM openssl

    长安链源码分析启动(1)

    长安链

    99 大促来袭,利用 MSE 服务自治体系为业务保驾护航

    阿里巴巴云原生

    阿里云 微服务 云原生

    测试左移之Sonarqube scanner使用

    霍格沃兹测试开发学社

    干货 | 通用 api 封装实战,带你深入理解 PO

    霍格沃兹测试开发学社

    分布式数据中心网络互联技术实现

    C++后台开发

    数据库 分布式 后端开发 Linux服务器开发 C++开发

    干货 | Pytest 结合 Allure 生成测试报告

    霍格沃兹测试开发学社

    实战演示 H5 性能分析

    霍格沃兹测试开发学社

    对话彩生活:“互联网+物业”数智化转型的BI应用实践

    观远数据

    企业号九月金秋榜

    「海格通信」化繁为简!云管升级助力海格通信创新之路提速

    嘉为蓝鲸

    云管理

    这些并发容器的坑,你要谨记

    华为云开发者联盟

    后端 开发

    Docker出局?你还有iSula、Containerd和CRI-O_架构_KubeSphere_InfoQ精选文章