Docker Shim 被移除, K8s v1.24 升级该怎么办 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
macrokefeng
V2EX    推广

Docker Shim 被移除, K8s v1.24 升级该怎么办

  •  
  •   macrokefeng 2022-03-04 16:53:12 +08:00 2339 次点击
    这是一个创建于 1318 天前的主题,其中的信息可能已经有所发展或是发生变。

    Docker Shim 被移除,K8s v1.24 升级该怎么办

    Kubernetes v1.24 将于今年 4 月正式发布,Docker Shim 被移除了,CRI Dockerd 登场。


    如果您现在的 Kubernetes 节点,还是用 Docker ,那您将无法升级到 1.24 版本,因为 Docker Shim 已经被移除了。有一个办法是,您可以选择从 Docker 切换到 Containerd ,再升级 1.24 版本,不过所有 Pod 都需要重建一次。

    重建工作量大怎么办?这里给您提供另外的选择,从 Docker Shim 切换到 CRI-Dockerd ,让您无需重建直接升级。

    01 CRI-Dockerd 是什么

    CRI-Dockerd 其实就是从被移除的 Docker Shim 中,独立出来的一个项目,用于解决历史遗留的节点升级 Kubernetes 的问题。

    我们发布了一个 CRI Docker 的安装卸载脚本,方便您维护您的集群。

    只要您的节点提前切换到 CRI Dockerd ,就可以直接把使用 Docker 的 Kubernetes 旧版本,升级到 1.24 版本。

    从 Docker Shim 切换到 CRI Docker

    wget -O install.sh https://raw.githubusercontent.com/klts-io/setup-cri-dockerd/main/install.sh ./install.sh 

    回退

    wget -O uninstall.sh https://raw.githubusercontent.com/klts-io/setup-cri-dockerd/main/uninstall.sh ./uninstall.sh 

    CRI-Dockerd 项目地址:

    https://github.com/Mirantis/cri-dockerd

    安装脚本项目地址:

    https://github.com/klts-io/setup-cri-dockerd

    02 Docker Shim 移除常见问题

    2.1 为什么要移除 Docker shim

    Kubernetes 的早期版本仅适用于特定的容器运行时:Docker 引擎。后来,Kubernetes 增加了对使用其他容器运行时的支持。创建 CRI 标准是为了实现编排器 (如 Kubernetes) 和许多不同的容器运行时之间的互操作性。Docker Engine 没有实现该接口 (CRI),因此,Kubernetes 项目创建了兼容代码来帮助过渡,并使 dockershim 代码成为 Kubernetes 本身的一部分。

    dockershim 代码一直是一个临时解决方案(因此得名:shim)。您可以在Dockershim Removal Kubernetes Enhancement Proposal 中阅读有关社区讨论和规划的更多信息。事实上,维护 dockershim 已经成为 Kubernetes 维护者的沉重负担,但是带来的作用却越来越少

    DockershimRemoval Kubernetes Enhancement Proposal:

    https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim

    此外,在这些较新的 CRI 运行时中,实现了与 dockershim 基本不兼容的功能,例如 cgroups v2 和用户命名空间。取消对 dockershim 的支持,将促进这些领域的进一步发展。

    2.2 我还能在 Kubernetes 1.23 中使用 Docker Engine 吗?

    可以,如果使用 Docker Engine 作为运行时,1.20 在 kubelet 启动时,会打印一个警告日志。您在 1.23 之前的所有版本中都会看到此警告。dockershim 将在 Kubernetes 1.24 移除。

    2.3 我仍然可以使用 Docker Engine 作为我的容器运行时吗?

    如果您在自己的 PC 上使用 Docker 来开发或测试容器:没有任何变化。无论您为 Kubernetes 集群使用什么容器运行时,您仍然可以在本地使用 Docker 。容器使这种操作性成为可能。

    如果是 Kubernetes 中还是要继续使用 Docker 可以尝试该适配器 cri-dockerd 和我们为您提供的维护脚本 setup-cri-dockerd 。

    cri-dockerd:

    https://github.com/Mirantis/cri-dockerd

    setup-cri-dockerd:

    https://github.com/klts-io/setup-cri-dockerd

    2.4 我现有的容器镜像是否仍然有效?

    是的,从 docker build 生成的图像将适用于所有 CRI 实现。您现有的所有镜像,仍将完全相同不需要做任何改动。

    2.5 私人镜像是否仍然有效?

    是的。所有 CRI 运行时都支持在 Kubernetes 中使用的相同的 pull secrets 配置,无论是通过 PodSpec 还是 ServiceAccount 。

    2.6 Docker 和容器是一回事吗?

    Docker 普及了 Linux 容器模式,并在开发底层技术方面发挥了重要作用,但是 Linux 中的容器已经存在了很长时间,容器生态系统已经发展的比 Docker 广泛得多。OCI 和 CRI 等标准,帮助许多工具在容器的生态系统中发展壮大,其中一些替代了 Docker 的某些方面,而另一些则增强了现有功能。

    2.7 今天有没有人在生产中使用其他运行时的例子?

    在 Kubernetes 每个版本的测试中,都经过了其他运行时的验证。

    此外,kind 使用 containerd 已经有一段时间了,并且已经看到其用例的稳定性有所提高。每天都会多次使用 Kind 和 containerd 来验证对 Kubernetes 代码库的任何更改。其他相关项目也遵循类似的模式,展示了其他容器运行时的稳定性和可用性。


    本文作者

    张世明

    现任 「 DaoCloud 道客」云原生研发工程师

    Kubernetes 社区 Reviewer

    4 条回复    2022-03-08 14:33:23 +08:00
    12101111
        1
    12101111  
       2022-03-04 17:10:33 +08:00
    直接跑 containerd 就行了, 管理用 nerdctl
    Reficul
        2
    Reficul  
       2022-03-04 23:11:33 +08:00
    前段时间试了一下,把 docker 的数据补全了写回到 containerd cri 里,其实是可以做热升级的。
    julyclyde
        3
    julyclyde nbsp;
       2022-03-08 11:41:19 +08:00
    @Reficul 求介绍经验
    Reficul
        4
    Reficul  
       2022-03-08 14:33:23 +08:00   1
    @julyclyde 看下 containerd 里 cri 的实现,dockershim 的实现区别你就知道了。

    把 dockerd 那边的信息转换到 containerd 里就行了。写 containerd 有两个办法,一个是 containerd cri 有一个重启后 recovery 逻辑,可以利用;或者是写 containerd 的 DB 。 我当时利用的是前面的办法通过的 POC 。

    结果是 Containerd 那边的容器可以和之前 Docker 那边创建的容器在一个 Pod 里共存,没有发现问题。目前自动化没做,没在生产落地。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86