当前位置: 首页 > news >正文

Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O

在本系列的上一篇文章中,我们讨论了什么是 CRI 和 OCI,Docker、containerd、CRI-O 之间的区别以及它们的架构等。最近,我们得知 Docker 即将从 kubernetes 中弃用!(查看 kubernetes 官方的这篇文章)那么让我们更深入地谈谈为什么会这样?

为什么从 K8s 1.24 开始 dokershim 被弃用了?

在 1.24 版中,Kubernetes 将不再支持 Docker 作为容器运行时。Docker 正在逐步淘汰,取而代之的是使用为 Kubernetes 构建的容器运行时接口 (CRI) 的运行时。如果您是 Kubernetes 最终用户,您不会注意到太大的差异。这并不意味着 Docker 已死,也不意味着您不能或不应该将其用作开发工具。Docker 仍然是创建容器的有用工具,并且由其生成的映像可docker build用于您的 Kubernetes 集群。如果您希望创建集群,则必须进行某些调整以避免集群故障。由于 Docker 将从 K8s 1.24 开始弃用,因此您必须过渡到其他兼容的容器运行时之一,例如 containerd 或 CRI-O。只需确保您选择的运行时支持 Docker 守护程序的当前设置(例如日志记录)。

人们听到这个消息时为什么会惊慌失措?

正在考虑两种环境,这会引起一些混乱。Kubernetes 集群中有一个称为容器运行时的组件,负责获取和运行容器映像。尽管 Docker 是该运行时的流行选择,但它并不打算集成到 Kubernetes 中,这会带来问题。

将来还会使用 Dockerfiles 吗?

此修改适用于在不同环境中使用 Docker 的开发人员。Kubernetes 集群内的 Docker 运行时独立于开发 Docker 安装。Docker 在修改之前的所有方面对开发人员仍然很有价值。Docker 生成 OCI(开放容器计划)镜像,它并不是真正特定于 Docker 的镜像。无论使用何种工具创建,Kubernetes 都会以相同的方式对待任何符合 OCI 标准的镜像。containerd 和 CRI-O 都能够提取和运行此类镜像。

如何从 Docker 切换到 containerd 和 CRI-O?

步骤 1:Cordon 和 Drain 节点

$ kubectl cordon <Node name>
$ kubectl drain <Node Name> --ignore-daemonsets

第 2 步:停止服务

$ systemctl stop kubelet
$ systemctl stop docker

步骤 3:删除 Docker(可选):

apt purge docker-ce docker-ce-cli

或者

yum remove docker-ce docker-ce-cli

一、从 Docker 迁移到 containerd

步骤 4:配置 containerd

禁用 /etc/containerd/config.toml 中的 disabled_plugins 行以启用 CRI 接口。

#disabled_plugins = ["cri"]

注意:如果还没有默认的 containerd 配置文件,您可以创建一个新的:

containerd config default > /etc/containerd/config.toml

然后重新启动containerd:

systemctl restart containerd

步骤 5:更改运行时 在 /var/lib/kubelet/kubeadm-flags.env 中添加这 2 个 containerd 运行时标志:

--container-runtime=remote 
--container-runtimeendpoint=unix:///run/containerd/containerd.sock"

步骤 6:现在可以启动 kubelet

systemctl start kubelet

步骤 7:测试您的 containerd 运行时

kubectl get nodes -o wide

现在你可以解除你的节点的封锁:

kubectl uncordon <Node>

您已经完成了!

二、从 Docker 迁移到 CRI-O

接着上面第三步开始

步骤 4:CRI-O 存储库和安装

$ add-apt-repository ppa:projectatomic/ppa
$ apt update
$ apt install -y cri-o-1.15

步骤 5:配置 CRI-O 和内核 创建文件99-kubernetes-crio.conf

vi /etc/sysctl.d/99-kubernetes-crio.conf

并添加以下几行:

net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1

将更改应用到内核:

sysctl -a

验证crio.conf并编辑cri-o以使用 Docker 注册表

打开文件crio.conf

vim /etc/crio/crio.conf

检查配置中 conmon 的路径是否准确;如果不准确,请运行以下命令:

which conmon

将输出添加到crio.conf文件

# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon"

还要确保“注册表”选项被注释掉

registries = ["quay.io","docker.io",
]

步骤 6:现在您可以启动 CRI-O

$ systemctl enable crio
$ systemctl start crio

步骤 7:配置并启动 kubelet 编辑vi /etc/default/kubelet,它看​​起来应该像这样:

KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m

然后启动 kubelet:

systemctl start kubelet

步骤 8:现在您可以取消封锁您的节点:

kubectl uncordon <Node>

您已经完成了!

概括

最后,我想补充一点,Docker 从 Kubernetes 中被弃用并不意味着您不能使用 Docker。这只是意味着 Docker 将不再被用作 Kubernetes 中的默认引擎,这完全取决于您在选择特定容器运行时时的需求,因为它们每个都有自己的优点。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在 ArkTS 中集成 C 语言模块来管理文件描述符
  • (四)js前端开发中设计模式之工厂方法模式
  • 基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-发送信息服务处理
  • 记录安装android studio踩的坑 win7系统
  • 某数据泄露防护(DLP)系统NoticeAjax接口SQL注入漏洞复现 [附POC]
  • 集合的流式API与数据库查询:深入比较与实践
  • 【21】两数交换
  • 脚本运行:在 IPython 中执行 Python 脚本的步骤
  • UE4-字体导入
  • Java之数组应用-选择排序-插入排序
  • Hyperledger顶级项目特点和介绍
  • java8函数式编程学习(一):lambada表达式和stream流的使用
  • Vue学习---vue 防抖处理函数,是处理什么场景
  • leetcode刷题日记-岛屿数量
  • OpenTeleVision复现及机器人迁移
  • 4. 路由到控制器 - Laravel从零开始教程
  • flask接收请求并推入栈
  • JavaScript 基础知识 - 入门篇(一)
  • Java应用性能调优
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux后台研发超实用命令总结
  • Markdown 语法简单说明
  • Mysql数据库的条件查询语句
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Spring Boot快速入门(一):Hello Spring Boot
  • WePY 在小程序性能调优上做出的探究
  • 从输入URL到页面加载发生了什么
  • 关于 Cirru Editor 存储格式
  • 利用jquery编写加法运算验证码
  • 聊聊sentinel的DegradeSlot
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我看到的前端
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 如何用纯 CSS 创作一个货车 loader
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​linux启动进程的方式
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (面试必看!)锁策略
  • (十六)一篇文章学会Java的常用API
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .net core 控制台应用程序读取配置文件app.config
  • .net framework4与其client profile版本的区别
  • .Net MVC4 上传大文件,并保存表单
  • .Net 路由处理厉害了
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net和jar包windows服务部署
  • .考试倒计时43天!来提分啦!
  • /boot 内存空间不够
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题