Kubernetes 升级不弃 Docker:KubeKey 的丝滑之道

作者:尹珉,KubeSphere Ambaasador&Contributor,KubeSphere 社区用户委员会杭州站站长。

引言

随着 Kubernetes 社区的不断发展,即将迎来 Kubernetes 1.30 版本的迭代。在早先的 1.24 版本中,社区作出一个重要决策:不再默认集成 Docker 作为容器运行时,即取消了对 Docker 的默认支持。这就像咱们家厨房换了个新灶头,虽然厨艺的本质没变,但用起来感觉肯定不一样。这篇文章就带你摸透这个变化,直击 Kubernetes 1.24+ 版本抛弃 Docker 后的影响,同时手把手教你如何借助 KubeKey 这个神器,让你在给 Kubernetes “装修升级”的过程中既稳又顺,还能把 Docker 那些贴心好用的功能保留下来。

file

Docker 移除带来的潜在风险分析

工具链与生态兼容性

  1. 对于大量使用 Jenkins 等 CI/CD 工具的企业而言,原先基于 Docker 的镜像构建、推送和拉取流程可能需要重构。Jenkinsfile 中的 Docker 构建步骤需调整为兼容 containerd 的方式进行,否则可能造成流水线中断。
  2. 监控系统和其他依赖于 Docker API 的周边工具需要进行改造或更换,以适应新的容器运行时环境,这涉及到了大量的验证工作和可能的二次开发成本。

开发环境一致性

开发者们习惯了在本地使用 Docker 进行快速迭代和测试,移除 Docker 后,需要重新适应 containerd 或寻找兼容 Docker API 的替代方案,以保持开发环境与生产环境的一致性。

现有运维脚本失效

许多自动化脚本、运维命令和 Helm Chart 等资源文件可能直接引用了 Docker 命令或依赖于 Docker 的特定行为,这些都需要逐步审查和适配。

升集群时手动保留 Docker 特性的成本分析

运维复杂度增加

  1. 需要在 Kubernetes 集群中手动集成第三方插件或其他兼容方案以模拟 Docker 的运行时环境,这要求运维团队具备更高的技术水平和对 Kubernetes 内部机制的深入了解。
  2. 需要密切关注 Kubernetes 更新与 Docker 兼容性之间的差异,每次升级 Kubernetes 都可能导致与 Docker 集成的部分出现问题,需要额外的时间和精力进行维护和调试。

集群规模操作成本剧增

  1. 假设面临如 100 个节点的集群时,每个节点上的容器运行时切换都需要单独进行,这意味着至少需要分别在 100 个节点上执行启停容器运行时的操作,耗费巨大的人力和时间成本。
  2. 对于大型集群,这种逐一操作的管理模式极其低效且容易出错,可能需要编写复杂的脚本或者使用批量管理工具,进一步增加实施难度。

测试验证与恢复预案

若操作过程中遇到问题,需要有完备的回滚策略和恢复预案,准备应对可能发生的各类异常状况,以防业务长时间受到影响。

总结: 因此,在 Kubernetes 1.24 之后,手动保留 Docker 特性并进行大规模节点运行时切换是一项极具挑战的任务,不仅会导致高昂的操作成本,还可能带来较大的业务风险。相比之下,寻求平滑过渡和兼容方案(如 KubeKey)成为更具性价比的选择。

什么是 Kubekey

KubeKey 是一个开源的轻量级工具,用于部署 Kubernetes 集群。它提供了一种灵活、快速、方便的方式来安装 Kubernetes/K3s、Kubernetes/K3s 和 KubeSphere,以及相关的云原生附加组件。它也是扩展和升级集群的有效工具。此外,KubeKey 还支持定制离线包(artifact),方便用户在离线环境下快速部署集群。

为什么选择 Kubekey?

KubeKey 由 Go 语言开发,使用便捷、轻量,支持多种主流 Linux 发行版。KubeKey 支持多种集群部署模式,例如 All-in-One、多节点、高可用以及离线集群部署。KubeKey 也支持支持快速构建离线安装包,加速离线交付场景下的集群交付效率。KubeKey 实现多节点并行安装,且利用 Kubeadm 对集群和节点进行初始化,极大地节省了集群部署时间,同时也遵循了 Kubernetes 社区主流集群部署方法。KubeKey 提供内置高可用模式,支持一键部署高可用 Kubernetes 集群。

升级实操

etcd 数据备份

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \snapshot save <backup-file-location>

下载 Kubekey 工具

版本:v3.1.0-rc.2 (这个版本当前是稳定已测,即将发布 v3.1.0)。

export KKZONE=cn

支持手动下载:https://github.com/kubesphere/kubekey/releases。

curl -sfL https://get-kk.kubesphere.io | sh -

检查当前集群状态

kubectl get node -o wide

file

准备集群配置文件

如果创建集群时的配置文件存在,本步骤可跳过。

  1. 创建当前集群配置
./kk create config [--with-kubernetes version] [(-f | --filename) path]
  1. 填入真实集群信息

file

修改 configmap

  1. 修改 kubeadm-config

注意:确保配置中的 featuregate 在新版本中没有被移除。

kubectl -n kube-system edit cm kubeadm-config

file

  1. 修改 kubelet-config-1.23

注意:确保配置中的 featuregate 在新版本中没有被移除。

kubectl -n kube-system edit cm kubelet-config-1.23

file

开始升级

./kk upgrade -f sample.yaml --with-kubernetes v1.24.17 --skip-dependency-check

验证集群版本

kubectl get node -A -o wide

file

验证容器运行时

kubectl get nodes -o json | jq '.items[].status.nodeInfo.containerRuntimeVersion'

file

结尾彩蛋

正如我们在这篇文章中所揭示的,Kubernetes 1.24 版本及其后续迭代虽逐步摒弃了对 Docker 的直接依赖,但这并不意味着我们必须舍弃熟悉的 Docker 工作流。通过 KubeKey 这样的强大工具,我们可以享受到 Kubernetes 最新版本的种种改进,同时还能优雅地保留 Docker 的某些关键特性,让升级之路变得更为顺畅。勇敢拥抱变化,善用工具的力量,每一次的技术升级都将成为我们打造高效、稳定、可扩展基础设施的宝贵经验。

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/310383.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SysTick滴答定时器 - 延时函数

SysTick定时器 Systick定时器&#xff0c;是一个简单的定时器&#xff0c;对于CM3,CM4内核芯片&#xff0c;都有Systick定时器。Systick定时器常用来做延时&#xff0c;或者实时系统的心跳时钟。这样可以节省MCU资源&#xff0c;不用浪费一个定时器。比如UCOS中&#xff0c;分…

Windows10为Git Bash添加文件传输命令rsync(详细图文配置)

文章目录 1. 安装git bash2. 下载所需要的4个包3. 下载解压包的软件4. 复制每个包下面的usr到git安装目录下4.1 所遇问题4.2 解决 5. 安装完成6. 需要注意 Windows上要使用 rsync命令上传或下载文件&#xff0c;需要使用git bash&#xff0c;git bash没有rsync&#xff0c;需要…

MAC(M1芯片)编译Java项目慢且发热严重问题解决方案

目录 一、背景二、排查三、解决四、效果以及结果展示五、总结 一、背景 使用idea编译项目等操作&#xff0c;经常性发热严重&#xff0c;并且时间慢。直到昨天编译一个项目用时30分钟&#xff0c;电脑温度很高&#xff0c;并且有烧灼的味道&#xff0c;于是有了此篇文章。 二、…

Python的国际化和本地化【第162篇—国际化和本地化】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展&#xff0c;多语言支持在软件开发中变得越来越重要。Python作为一种流行的…

VRRP——虚拟路由冗余协议

什么是VRRP 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于提高网络可靠性的容错协议。 通过VRRP&#xff0c;可以在主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保障网络通信的连续性和可…

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…

06-vscode+espidf开发调试方法(内置JTAG调试)

使用VS Code和ESP-IDF进行ESP32开发和调试 在我们搭建 IDF 框架后&#xff0c;OpenOCD 已经自动下载好了&#xff0c; 我们通过 JTAG 接口连接使用 OpenOCD 进行调试。而ESP32芯片中内置 了JTAG 电路&#xff0c;无需额外芯片即可调试&#xff0c;更加方便&#xff0c;所以这里…

MySQL表结构的操作

文章目录 1. 创建表2. 查看表3. 修改表4. 删除表 1. 创建表 create table table_name (field1 datatype,field2 datatype,field3 datatype )character set 字符集 collate 校验集 engine 存储引擎;field&#xff1a;列名datatype&#xff1a;列的类型character set&#xff1a…

使用深度学习集成模型进行乳腺癌组织病理学图像分类

基于预训练的VGG16和VGG19架构训练了四种不同的模型&#xff08;即完全训练的 VGG16、微调的 VGG16、完全训练的 VGG19 和微调的 VGG19 模型&#xff09;。最初&#xff0c;我们对所有单独的模型进行了5倍交叉验证操作。然后&#xff0c;我们采用集成策略&#xff0c;取预测概率…

【华为OD机试】围棋的气【C卷|100分】

题目描述 围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点, 对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中, 有几个交叉点没有棋子,由此可…

【EM算法】算法及注解

EM算法又称期望极大算法&#xff0c;是一种迭代算法&#xff0c;每次迭代由两步组成&#xff1a;E步&#xff0c;求期望&#xff08;expectation&#xff09;&#xff1b;M步&#xff0c;求极大&#xff08;maximization&#xff09;。 算法背景 如果概率模型的变量都是观测变…

【报错】TypeError: Cannot read property ‘meta‘ of undefined

&#x1f608;解决思路 首先这里很明显我们能看到是缺少该参数&#xff1a;meta。 但是经过查找后发现和该参数无关。 &#x1f608;解决方法 后来我上网搜了下&#xff0c;网上的回答大部分偏向于是package.json这个文件中的tabBar.list数组对象只有一条的问题。 网上的大…

【Linux】引导与服务

一、系统引导过程 系统引导过程&#xff1a; 开机自检(BIOS) ----> MBR ----> GRUB ----> 加载内核 ----> 启动程序 1.1 开机自检 (1)开机自检&#xff1a;硬件启动POST(BIOS的一个主要功能)来加电检测硬件 (2)指引硬件&#xff1a;主板…

结构体的内存对齐

目录 对齐规则&#xff1a; 为什么存在内存对齐&#xff1f; 对齐规则&#xff1a; 1、结构体的第一个成员对齐到和结构体起始位置偏移量为0的地址处 2、其他成员变量要对齐到某个数字&#xff08;对齐数&#xff09;的整数倍的地址处。 对齐数 编译器默认的一个对齐数 与 …

openstack安装dashboard后登录网页显示404错误

1. 2.进入该目录vim /etc/httpd/conf.d/openstack-dashboard.conf 增加这一行 WSGIApplicationGroup %{GLOBAL} 重启httpd后就可以访问了

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址&#xff1a;1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇&#xff1a;古月ROS2入门21讲——学习笔记&#xff08;二&#xff09;常用工具部分15-21讲-CSDN博客 目录 第一讲&#xff1a;ROS/ROS2是什么 1. ROS的诞生…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Radio Button的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Radio Button的使用及说明 文章编号&#xff…

数据结构---线性表

1&#xff0c;顺序表实现---动态分配 #include<stdlib.h> #define InitSize 10 typedef struct {int *data;//静态分配int length;int MaxSize; }SqList; void InitList(SqList& L) {L.data (int*)malloc(InitSize * sizeof(int));//分配空间L.length 0;L.MaxSize…

React 集成三方登录按钮样式的插件库

按钮不提供任何社交逻辑。 效果如下&#xff1a; 原地址&#xff1a;https://www.npmjs.com/package/react-social-login-buttons 时小记&#xff0c;终有成。

沐风老师3DMAX物品摆放插件ObjectPlacer安装和使用方法详解

3DMAX物品摆放插件ObjectPlacer安装和使用教程 3DMAX物品摆放插件ObjectPlacer&#xff0c;一键在曲面上摆放对象&#xff0c;如摆放家具物品、种植花草树木、布设电线杆交通标志等。它的功能是将对象与几何体对象&#xff08;网格、多边形、面片或NURBS&#xff09;的面法线对…