在Kubernetes 1.20版本中不推荐使用Docker !
首页>>云原生>>正文

目录


    Kubernetes v1.20.0-rc.0已使用Golang1.15.5版本完成构建和推送。



    kubelet中的Docker支持现已弃用,并将在以后的版本中删除。Kubelet使用一个名为“ dockershim”的模块,该模块实现了对Docker的CRI支持。在此PR后续版本中将删除dockershim。PR还补充说明项目具有dockerless标签和CI作业,以确保在最终删除内置dockershim时不破坏任何内容。


    为了方便大家理解典型的K8S Runtime架构,以及了解为什么要删除docker,这里从最常见kubelet和Docker的集成方案说起,当kubelet要创建一个容器时,需要以下几步:



    • Kubelet 通过 CRI 接口(gRPC)调用 dockershim,请求创建一个容器。CRI 即容器运行时接口(Container Runtime Interface),这一步中,Kubelet 可以视作一个简单的 CRI Client,而 dockershim 就是接收请求的 Server。目前 dockershim 的代码其实是内嵌在 Kubelet 中的,所以接收调用的凑巧就是 Kubelet 进程;

    • dockershim 收到请求后,转化成 Docker Daemon 能听懂的请求,发到 Docker Daemon 上请求创建一个容器。

    • Docker Daemon 早在 1.12 版本中就已经将针对容器的操作移到另一个守护进程——containerd 中了,因此 Docker Daemon 仍然不能帮我们创建容器,而是要请求 containerd 创建一个容器;

    • containerd 收到请求后,并不会自己直接去操作容器,而是创建一个叫做 containerd-shim 的进程,让 containerd-shim 去操作容器。这是因为容器进程需要一个父进程来做诸如收集状态,维持 stdin 等 fd 打开等工作。而假如这个父进程就是 containerd,那每次 containerd 挂掉或升级,整个宿主机上所有的容器都得退出了。而引入了 containerd-shim 就规避了这个问题(containerd 和 shim 并不是父子进程关系);

    • 我们知道创建容器需要做一些设置 namespaces 和 cgroups,挂载 root filesystem 等等操作,而这些事该怎么做已经有了公开的规范了,那就是 OCI(Open Container Initiative,开放容器标准)。它的一个参考实现叫做 runC。于是,containerd-shim 在这一步需要调用 runC 这个命令行工具,来启动容器;

    • runC 启动完容器后本身会直接退出,containerd-shim 则会成为容器进程的父进程,负责收集容器进程的状态,上报给 containerd,并在容器中 pid 为 1 的进程退出后接管容器中的子进程进行清理,确保不会出现僵尸进程。


    这个过程乍一看像是在搞我们:Docker Daemon 和 dockershim 看上去就是两个不干活躺在中间划水的啊,Kubelet 为啥不直接调用 containerd 呢?


    从上图的过程我们会发现Runtime 实在是有点复杂了,而复杂是万恶之源(其实本质上就是想干掉 Docker),于是就有了直接拿 containerd 做 oci-runtime 的方案。


    正确的拆分/体系结构应遵循与容器化和cri-o相同的设计,即kubelet通过grpc与之交谈的单独过程,进而与运行时对话。


    值得一提的是尽管现在已经有 CRI-O,containerd-plugin 这样更精简轻量的 Runtime 架构,dockershim 这一套作为经受了最多生产环境考验的方案,迄今为止仍是 Kubernetes 默认的 Runtime 实现。


    将dockershim从kubelet外部移至社区维护的存储库似乎是正确的操作。SIG集群生命周期从KubeCon EU(今年)进行的调查显示首选的容器运行时(CRI)中Docker仍然占多数,但是Containerd正在逐渐获得关注。


    这是否意味着,除非Docker获得CRI支持,否则K8S 1.20集群将不支持它?官方PR指出在K8s 1.20版本中,您会在kubelet日志中发现警告,目前docker也是不支持CRI接口的。官方鼓励您评估正在可用的容器运行时,它是CRI的完整实现(兼容v1alpha1或v1)。


    Action Required: Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community. We encourage you to evaluate moving to a container runtime that is a full-fledged implementation of CRI (v1alpha1 or v1 compliant) as they become available.


    么指可以向用户解释如何将集群从docker迁移到例如containerd?不变的节点升级可能很好,但是在有限的裸机上如何就位呢?如何匹配cgroup驱动程序?状态如何清理?这些问题官方提供了一个指南,大家可以参考:https://github.com/kubernetes/kubernetes/pull/link




    参考链接:

    1. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md

    2. https://www.cnblogs.com/charlieroro/articles/10998203.html


    给TA打赏
    共{{data.count}}人
    人已打赏

    相关文章

    eBPF、sidecars 和服务网格的未来

    eBPF、sidecars 和服务网格的未来

    eBPF 最近很火热,因为可以为云原生世界提供很多东西。由于 Cilium 之类的项目,它一直是 Kubernetes 集群的 CNI 层的流行选择。Linkerd 等服务网格通常与 Cilium 等 CNI 层一起部署,将 Linkerd 强大的 L7 处理与 Cilium 超快的 L3/4 处理相结合。 但是,eBPF 的网络技术到底有多强大?例如,它能否让我们完全替换 Linkerd 的 sidecars 代理,而只在内核中做所有事情? 在本文中,我将尽我所能评估这种可能性——尤其是当它与对用户的影响有关时。

    Kalix:构建无服务器的云原生业务关键型应用程序,无需数据库

    Kalix:构建无服务器的云原生业务关键型应用程序,无需数据库

    Akka 背后的公司Lightbend最近推出了 Kalix,这是一种新的平台即服务产品,用于使用任何没有数据库的编程语言构建云原生、业务关键型应用程序。Kalix 是一个统一的应用层,它将编写软件所需的部分汇集在一起,并抽象出它们的实现细节。Lighbend 旨在为开发人员提供“创新的 NoOps 开发人员体验”。 Lightbend 的创始人兼首席执行官Jonas Bonér解释了 Kalix 的动机: 云生态系统的复杂性正在减缓工程和开发团队的速度。Kubernetes在管理、编排和确保容器的可用性和可扩展性

    英特尔进军比特币挖矿设备市场

    英特尔进军比特币挖矿设备市场

    本文由半导体产业纵横综合   英特尔总部位于加利福尼亚州圣克拉拉   英特尔公司的新比特币挖矿芯片可能会成为多年来主导市场的中国挖矿设备制造商的第一个主要挑战者。   这家总部位于加利福尼亚州圣克拉拉的芯片制造巨头本月早些时候公布了其加密挖矿计划,并于1月份推出了第一代Bonanza Mine芯片。Jack Dorsey 的数字支付公司Block Inc.以及两家矿业公司Griid Infrastructure 和Argo Blockchain将在今年晚些时候收到第一批芯片。 &nbs

    浅谈铁电存储器:如何实现下一代内存计算?

    浅谈铁电存储器:如何实现下一代内存计算?

    本文由半导体产业纵横编译自technews 因应人工智能、物联网、5G、车载等新兴科技所迎来的巨量资讯分析需求,近年来各国政府及国际知名大厂皆积极地投注大量资源,加速开发兼具提升运算速度以及降低耗能的下世代存储器。而新兴存储器技术选项中,当属铁电存储器最被看好,其原理、技术挑战与未来机会为何?(本文出自中国台湾清华大学工程与系统科学系巫勇贤教授,于闳康科技“科技新航道合作专栏”介绍《铁电存储器的原理、挑战与展望》文稿,经科技新报修编为上下两篇,此篇为上篇。)    Memory-Centric
    云原生后端开发

    多云时代使用Spinnaker实现CD连续交付

    2020-11-30 15:11:33

    云原生后端开发

    SIG 2020年集群生命周期调查

    2020-12-3 0:43:31

    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索