王海龙, SUSE Rancher 中国社区技术经理,负责 Rancher 中国技术社区的维护和运营。拥有 8 年的云计算领域经验,经历了 OpenStack 到 Kubernetes 的技术变革,无论底层操作系统 Linux,还是虚拟化 KVM 或是 Docker 容器技术都有丰富的运维和实践经验。

前言

早在 2020 年 12 月,Kubernetes 就宣布将要弃用 Dockershim。在 Kubernetes 中,Dockershim 是一个适配器组件,Dockershim 适配器允许 Kubelet 与 Docker 交互,就好像 Docker 是一个与 CRI 兼容的运行时一样。

近日,Kubernetes v1.24 版本正式发布,最主要的变化就是删除了 Dockershim。也就是说,Kubernetes v1.24 无法再通过 in-tree 的形式来支持 Docker 作为它的 CRI 运行时。

随着 Kubernetes 的发展, 虽然 Docker 日渐式微,但还是有大量用户群体离不开 Docker,或者说暂时无法切换到 containerd 或 CRI-O 作为它的 CRI 运行时。 Rancher 为了满足继续使用 Docker 作为 CRI 运行时的需求,通过 RKE 集群支持外部 Dockershim 继续使用 Docker 作为 CRI 运行时。

虽然 Rancher 最新的 v2.6.4 目前还不支持 Kubernetes v1.24,但早在 Kubernetes v1.21 中就采用了 Mirantis 和 Docker 宣布的上游开源社区外部 Dockershim (该项目称为 cri-dockerd)来确保 RKE 集群可以继续使用 Docker。换句话说,你可以像之前一样继续基于 Docker Engine 构建 Kubernetes,唯一的区别就是 Dockershim 由内置方案变成了外部方案。

要启用外部 Dockershim,只需要在 RKE 配置中设置以下选项:

enable_cri_dockerd: true

由于外部 Dockershim 的支持是从 RKE 创建的 Kubernetes 1.21 及以上的版本中开始支持,所以我们需要通过 RKE 创建一个 Kubernetes 1.21 及以上的 Kubernetes 版本才能支持这种方案。

下面将演示如何在 RKE 创建的 Kubernetes 集群中启用外部 Dockershim。

通过 RKECLI 创建集群

说明:

  • RKE 的安装及使用,请参考官方文档http://docs.rancher.cn/rke, 这里不再详细说明。
  • 本次 demo 使用的 RKE 版本为 v1.3.9

配置RKE cluster.yml 文件

在 RKE 的集群配置文件 cluster.yml 中通过增加 enable_cri_dockerd: true 选项来启用外部 Dockershim 支持。本例使用最精简文件示例,如需个性化设置,请根据需求调整选项:

~$ cat cluster.yml
nodes:- address: 192.168.205.19user: ubunturole:- controlplane- etcd- worker
enable_cri_dockerd: true

通过 RKE 创建 Kubernetes 集群

~$ rke up
INFO[0000] Running RKE version: v1.3.9
INFO[0000] Initiating Kubernetes cluster
INFO[0000] cri-dockerd is enabled for cluster version [v1.22.7-rancher1-2]
INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused Kubelet certificates
INFO[0000] [certificates] Generating admin certificates and kubeconfig
...
...
...
INFO[1130] [ingress] ingress controller nginx deployed successfully
INFO[1130] [addons] Setting up user addons
INFO[1130] [addons] no user addons defined
INFO[1130] Finished building Kubernetes cluster successfully

确认启用cri-dockerd

集群创建成功后,连接到下游集群的主机查看进程,可以发现增加了一个 cri-dockerd 的进程:

root@dev-1:~# ps -ef | grep cri-dockerd
root     26211 25813  3 11:26 ?        00:04:13 /opt/rke-tools/bin/cri-dockerd --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --pod-infra-container-image=rancher/mirrored-pause:3.6

Cri-dockerd 其实就是从被移除的 Dockershim 中,独立出来的一个项目。为 Docker Engine 提供了一个垫片(shim),可以通过 Kubernetes CRI 控制 Docker。这意味着你可以像以前一样继续基于 Docker Engine 构建 Kubernetes,只需从内置的 Dockershim 切换到外部的 Dockershim 即可。

接下来,我们再观察 Kubelet 的参数变化:

root@dev-1:~# docker inspect kubelet"Entrypoint": [..."**--container-runtime=remote**","-**-container-runtime-endpoint=/var/run/Dockershim.sock**",...],

可以看到,增加 enable_cri_dockerd: true参数启动的 Kubernetes 集群增加了 --container-runtime=remote和 --container-runtime-endpoint=/var/run/Dockershim.sock 两个 Kubelet 参数。通过这两个 Kubelet 参数可以设置 Kubernetes 集群利用外部 Dockershim 继续使用 Docker 作为 CRI 运行时。

通过Rancher 创建 RKE 集群

如果你是 Rancher 的长期用户,你肯定会知道从 Rancher UI上创建的自定义集群就是通过 RKE 来去实现的。只不过通过 Rancher UI 创建的RKE 集群可以省去配置 RKE cluster.yml 的烦恼,只需要从 UI 上做一些简单的配置即可。

本节,将给大家介绍如何通过 Rancher 创建 RKE 集群并启用外部 Dockershim 支持。

安装 Rancher

Rancher 的安装及使用,请参考官方文档,这里不再详细说明。因为RKE 创建的Kubernetes 1.21 及以上的版本中才开始支持外部 Dockershim,并且只有 Rancher v2.6.x 才支持Kubernetes 1.21 或以上版本。所以,我们本次示例选择 Rancher2.6.4 作为 demo 环境。

创建自定义集群

通过 Edit as YAML 来设置 enable_cri_dockerd 参数值为 true

将 enable_cri_dockerd 的值修改为 true,保存并创建集群

确认启用cri-dockerd

可以参考上面“通过 RKE CLI 创建集群”章节的步骤去检查下游集群是否成功启用了 cri-docker,为了节省篇幅,这里就不重复说明。

常见问题

问:如果要获得 Rancher 对上游 Dockershim 的支持,我需要升级 Rancher 吗?

答:对于 RKE,Dockershim 的上游支持从 Kubernetes 1.21 开始。你需要使用支持 RKE 1.21 的 Rancher 版本。详情请参见我们的支持矩阵。

问:我目前的 RKE 使用 Kubernetes 1.20。为了避免出现不再支持 Dockershim 的情况,我是否需要尽早将 RKE 升级到 Kubernetes 1.21?

答:在使用 Kubernetes 1.20 的 RKE 中,Dockershim 版本依然可用,而且在下一个发行版发行之前不会被弃用。有关时间线的更多信息,请参见 Kubernetes Dockershim 弃用相关的常见问题。Kubernetes 会发出将会弃用 Dockershim 的警告,而 Rancher 在 RKE 中已经用 Kubernetes 1.21 缓解了这个问题。你可以按照计划正常升级到 1.21。

问:如果我不想再依赖 Dockershim,我还有什么选择?

答:你可以为 Kubernetes 使用不需要 Dockershim 支持的运行时,如 Containerd。RKE2 和 K3s 就是其中的两个选项。

问:如果我目前使用 RKE1,但想切换到 RKE2,我可以怎样进行迁移?

答:你可以构建一个新集群,然后将工作负载迁移到使用 Containerd 的新 RKE2 集群。Rancher 也在探索就地升级路径的可能性。

问:如果我已经通过 RKE 创建了 Kubernetes v1.21 以上的集群,当我切换到外部 Dockershim 是否会对集群有影响?

答:无影响,因为容器运行时没有变化,Dockershim 只是由内置方案变成了外部方案。

打破 Dockershim 移除焦虑,且看Rancher 如何应对相关推荐

  1. 焦虑,不知所措,努力应对,坦然,双非本硕求职算法的故事

    作者 | 似朝朝 来自 | 技术交流社区④ 出品 | AI蜗牛车 来自技术交流社区④@小伙伴的分享. 大概在去年暑期的时候,这位小伙伴时常伴随着焦虑在群里和大家交流感想,我也刚好看到和群友们一起聊了许 ...

  2. 阿里为啥值4万亿?看它如何应对亿级高并发大流量?如何保障高可用和稳定性,就知道了!...

    作者:丁浪,目前在创业公司担任高级技术架构师.曾就职于阿里巴巴大文娱和蚂蚁金服.具有丰富的稳定性保障,全链路性能优化的经验.架构师社区特邀嘉宾! 阅读本文,你将会收获: 高并发.大流量场景的常见问题和 ...

  3. 看用友网络如何应对“后地产时代”的去化与创新

    今年年初房地产市场虽然呈现出企稳回升的态势,但近几年供需的不平衡早已让地产行业走入"后地产时代",房企盈利能力的降低也意味着需要转型和创新.在应对后地产时代的变化上,用友网络可以在 ...

  4. 职场新人必看:如何应对职场难题?

    作为一名曾经的职场新人,在这些年的职场生涯里,经常面临各种各样的职场难题.所以,如何应对这些难题是我们需要学习和掌握的很重要的技能之一.今天,我将结合个人经历,分享一些职场经验,希望能够给所有职场新人 ...

  5. 开放银行潜在风险不可忽视,看F5如何应对?

    当前,开放银行已经成为金融科技领域的热点话题,并在全球呈现快速发展趋势.对传统银行来说,需要主动转变经营思维适应时代发展,并以强大的技术能力作为支撑,积极搭建平台生态圈.值得关注的是,作为新行业发展的 ...

  6. 峰会报名|从金融行业技术选型,看 RocketMQ 如何应对严苛挑战

    作者:RocketMQ 作为解决海量消息堆积以及电商场景下精准顺序消息分发的消息队列项目,Apache RocketMQ 伴随多年发展,已成为电商.金融.科技等领域技术中台的最核心底座.据不完整统计, ...

  7. 三舰护航,看懂球帝如何应对日增百万用户

    世界杯期间,阿里云为懂球帝祭出三艘护航舰,为其提供全面的护航方案.现场值守的同时,还提供了专业的安全管理方案,帮助懂球帝抵挡住网络攻击,让全球亿万球迷可以更加尽情地享受足球盛宴. 一号舰队 PTS:性 ...

  8. 面试官:线上服务器CPU占用率高如何排查定位问题?

    开发十年,就只剩下这套架构体系了!! 国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下:  ...

  9. 天猫年货节“种果树、收水果”破除你的“水果焦虑”

    文|曾响铃 来源|科技向令说(xiangling0815) 元旦已过,眼看农历新年马上来临,又到了一年一度"囤货"的季节.有一类产品的"热度"从2019年春节期 ...

最新文章

  1. Spring MVC 3.2.2 +easyui 返回JSON数据格式
  2. 向mysql 插入中文数值报错
  3. Cloud一分钟 | 一脚踏入云计算2.0时代,京东云这回拼的是“朋友 圈”;8400万元私有云招标...
  4. sql 注入防护与xss攻击防护
  5. Android与IOS异同点对照(1)------ 显示
  6. 逻辑操作符的备选表示
  7. 王牌英雄怎么服务器维护了,王牌英雄steam版无法运行问题解决方法_3DM单机
  8. lighttpd支持AJAX吗,lighttpd配置https
  9. Android Studio如何导出apk文件
  10. c语言:(指针)有n个整数,使前面各数顺序向后移动m个位置
  11. CrossOver 22Mac和Linux免费中文版系统兼容工具
  12. USTCOJ 1240 黑屋 非位运算版
  13. 手机异步发送短信验证码解决方案-Celery+redis
  14. pattern类和matcher类,math类,Random类,Date类,SimpleDateFormat类,calender类
  15. Android BLE 蓝牙实践
  16. 每日学术速递2.15
  17. PSTN与VOIP基础
  18. 超大屏4G双卡双待 酷派S6双色对比图赏
  19. 【深度学习】V-Net 3D医学图像分割 Dice loss 损失
  20. SSRS从入门到放弃?? 零基础:教你5分钟内轻松制作一张报表(Intouch、IFix、WinCC、组态王等均适用)

热门文章

  1. EBS INV:客户料号
  2. 推荐系统召回之itemCF
  3. 微信小程序保留小数点
  4. cf 834 E. Ever-Hungry Krakozyabra
  5. 【职业】致迷茫的大学生们
  6. 在Windows下正确地编译最新的pytorch和tensorflow
  7. Ant Design Pro
  8. 订单管理系统 订货系统平台建设三阶段分享
  9. 任正非蜕变,华为新生
  10. 电压电流双闭环PFC单相PWM整流