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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录

一、理论

1.K8S集群升级

2.环境

3.升级策略

4.master1节点迁移容器运行时(docker → containerd) 

5.master2节点迁移容器运行时(docker → containerd) 

6.node1节点容器运行时迁移(docker → containerd) 

7.升级集群计划(v1.23.14 → v1.24.1)

8.升级master1节点版本(v1.24.1)

9.升级master2节点版本(v1.24.1)

10.升级node1节点版本(v1.24.1)

11.验证集群(v1.24.1)

二、实验

1. 环境

2.master1节点迁移容器运行时(docker → containerd) 

3.master2节点迁移容器运行时(docker → containerd) 

4.node1节点迁移容器运行时(docker → containerd) 

5.升级集群计划(v1.23.14 → v1.24.1)

6.升级master1节点版本(v1.24.1)

7.升级 master2节点版本(v1.24.1)

8.升级 node1节点版本(v1.24.1)

9.验证集群(v1.24.1)


一、理论

1.K8S集群升级

(1)概念

        搭建K8S集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,K8S集群升级方式也各有千秋,目前准备使用kubeadm方式搭建的k8s集群升级方法。

        需要注意的是,升级集群版本建议逐步升级,比如v1.21.1–>v1.22.1–>v1.23.1–>v1.24.1,不能跨度过大,否则会报错。

2.环境

(1)主机(容器运行时)

表1 主机(容器运行时)

主机架构当前容器运行时目标容器运行时IP
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker 20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker 20.10.6containerd 1.6.24192.168.204.182 

(2)主机 (集群版本)

表2 主机(集群版本)

主机架构当前版本目标版本IP
master1K8S master节点v1.23.14v1.24.1192.168.204.180
master2K8S master节点v1.23.14v1.24.1192.168.204.181
node1K8S node节点v1.23.14v1.24.1192.168.204.182 


3.升级策略

(1)升级策略1

先迁移容器运行时为containerd:

docker → containerd

(2)升级策略2

然后升级集群版本到v1.24.1:

v1.23.14 → v1.24.1

4.master1节点迁移容器运行时(docker → containerd) 

(1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

kubectl get nodes -owide #查看容器运行时

(2)迁移master1

kubectl drain master1  --delete-emptydir-data  --force --ignore-daemonsets   #对k8s控制节点xianchaomaster1进行drain

(3)关闭并卸载Docker

systemctl disable docker  --now     #先启动dockeryum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum install  containerd.io cri-tools  -y   # 安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sockcontainerd config default > /etc/containerd/config.toml    #生成配置文件vim /etc/containerd/config.toml    #使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(5)重启containerd服务

systemctl enable containerd  ; systemctl restart containerd  # 重启systemctl status containerd    # 查看服务状态

(6)配置并启动kubelet

vim /etc/sysconfig/kubelet     #设置kubelet启动参数systemctl restart kubelet      #重启kubelet服务

(7)对master节点进行uncordon

kubectl uncordon master1       #解除维护

(8)验证

kubectl get nodes -owide       #验证是否把容器运行时由docker迁移到containerd

5.master2节点迁移容器运行时(docker → containerd) 

(1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

kubectl get nodes -owide #查看容器运行时

(2)迁移master2

kubectl drain master2  --delete-emptydir-data  --force --ignore-daemonsets   #对k8s控制节点xianchaomaster1进行drain

(3)关闭并卸载Docker

systemctl disable docker  --now     #先启动dockeryum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum install  containerd.io cri-tools  -y   # 安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sockcontainerd config default > /etc/containerd/config.toml    #生成配置文件vim /etc/containerd/config.toml    #使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(5)重启containerd服务

systemctl enable containerd  ; systemctl restart containerd  # 重启systemctl status containerd    # 查看服务状态

(6)配置并启动kubelet

vim /etc/sysconfig/kubelet     #设置kubelet启动参数systemctl restart kubelet      #重启kubelet服务

(7)对master2节点进行uncordon

kubectl uncordon master2      #解除维护

(8)验证

kubectl get nodes -owide       #验证是否把容器运行时由docker迁移到containerd

6.node1节点容器运行时迁移(docker → containerd) 

(1) 迁移node1节点

kubectl drain node1 --delete-emptydir-data  --force --ignore-daemonsets   #对k8s工作节点xianchaonode1进行drain

(2)关闭并卸载Docker

systemctl disable docker --now     # 关闭yum remove docker-ce docker-ce-cli -y  # 卸载

(3)安装并配置containerd

yum install  containerd.io cri-tools  -y    #安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock   # 配置containerd config default > /etc/containerd/config.toml   #生成配置文件vim /etc/containerd/config.toml     #使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(4)重启containerd服务

 systemctl enable containerd  ; systemctl restart containerd   # 重启

(5)配置并启动kubelet

vim /etc/sysconfig/kubelet     #设置kubelet启动参数systemctl restart kubelet       #重启kubelet服务kubectl get nodes -owide         #查看pod

(6)对node1节点进行uncordon

 kubectl uncordon node1   #解除维护

(7)验证

kubectl get nodes -owide       #验证是否把容器运行时由docker迁移到containerd

(8)查看

kubectl get pods -n kube-system      #查看集群

7.升级集群计划(v1.23.14 → v1.24.1

(1)查看集群

 kubectl get nodes -owide  # 查看集群版本

(2)修改master1节点kubelet参数

kubectl edit nodes master1   #修改systemctl restart kubelet    #重启

 (3)修改master2节点kubelet参数

kubectl edit nodes master2   #修改systemctl restart kubelet    #重启

 (4)修改node1节点kubelet参数

kubectl edit nodes node1   #修改systemctl restart kubelet    #重启

(5)确定升级版本

# 执行如下命令确定升级版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

 我的目标版本是1.24.1-0。

8.升级master1节点版本(v1.24.1)

(1)在k8s控制节点master1安装kubeadm1.24.1

yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

kubectl drain master1  --delete-emptydir-data  --force --ignore-daemonsets

(3)升级控制节点master1各个组件

kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(5)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

systemctl daemon-reload;  systemctl restart kubelet

(7)解除master1的节点维护

 kubectl uncordon master1

(8)查看节点状态

kubectl get nodes

9.升级master2节点版本(v1.24.1)

 (1)在k8s控制节点master1安装kubeadm1.24.1

yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

kubectl drain master2  --delete-emptydir-data  --force --ignore-daemonsets

(3)升级控制节点master1各个组件

kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(5)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

systemctl daemon-reload;  systemctl restart kubelet

(7)解除master1的节点维护

 kubectl uncordon master2

(8)查看节点状态

kubectl get nodes

10.升级node1节点版本(v1.24.1)

 (1)在k8s工作节点node1安装kubeadm1.24.1

yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

kubectl drain node1  --delete-emptydir-data  --force --ignore-daemonsets

(3)升级node1上的kubelet

 kubeadm upgrade node

(4)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(5)升级kubelet和kubectl

yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(6)重启kubelet

systemctl daemon-reload;  systemctl restart kubelet

(7)解除node11的节点维护

 kubectl uncordon node1

11.验证集群(v1.24.1)

(1)验证集群状态是否正常

kubectl get nodes# 结果如下:
[root@master1 ~]# kubectl get nodes

版本均已升级到 v1.24.1。

(2) 查看集群服务状态

kubectl get pods -n kube-system

二、实验

1. 环境

(1)主机(容器运行时)

表1 主机(容器运行时)

主机架构当前容器运行时目标容器运行时IP
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker 20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker 20.10.6containerd 1.6.24192.168.204.182 

(2)主机 (集群版本)

表2 主机(集群版本)

主机架构当前版本目标版本IP
master1K8S master节点v1.23.14v1.24.14192.168.204.180
master2K8S master节点v1.24.14v1.24.14192.168.204.181
node1K8S node节点v1.24.14v1.24.14192.168.204.182 

2.master1节点迁移容器运行时(docker → containerd) 

 (1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

(2)迁移master1

(3)关闭并卸载Docker

先启动docker,再卸载

(4)安装并配置containerd

① 安装

② 生成配置文件

③  使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

修改前:

修改后:

第二步:搜索sandbox,并修改。

修改前:

修改后:

第三步:搜索SystemdCgroup,并修改。

修改前:

修改后:

(5)重启containerd服务

重启

②查看服务

(6)配置并启动kubelet

①  设置

②修改

重启kubelet服务

这时查看pod,master1为SchedulingDisabled,容器运行时还未更新

(7)对master1节点进行uncordon

(8)验证(此时master1可以调度)

3.master2节点迁移容器运行时(docker → containerd) 

(1)迁移master2

(2)关闭并卸载Docker

先启动

卸载

(4)安装并配置containerd

①  安装

② ⑩配置

生成配置文件

使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

⑥第二步:搜索sandbox,并修改。

⑦ ​​​​​​​​​​​​​​​​​​​​​第三步:搜索SystemdCgroup,并修改。

(5)重启containerd服务

重启

②  查看服务

(6)配置并启动kubelet

设置

② 修改


③ 重启

这时查看pod,master2为SchedulingDisabled,容器运行时已更新

 ​​​​​​​(7)对master2节点进行uncordon

(8)验证(此时master2可以调度)

4.node1节点迁移容器运行时(docker → containerd) 

(1) 迁移node1节点​​​​​​​

(2)关闭并卸载Docker

关闭并卸载

(3)安装并配置containerd

①  安装

② 配置

生成配置文件

④ ​​​​​​​使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

⑥​​​​​​​第二步:搜索sandbox,并修改。

第三步:搜索SystemdCgroup,并修改。

(4)重启containerd服务

重启

②  查看服务

(5)配置并启动kubelet

①  设置

这时查看pod,node1为SchedulingDisabled,容器运行时已更新

(6)对node节点进行uncordon

(7)验证 (此时node1可以调度)

(8)查看

5.升级集群计划v1.23.14 → v1.24.1

(1)确定升级版本

可以看到目前的版本是v1.23.14。​​​​​​​

(2)修改节点kubelet参数(在runtime由docker迁移到containerd之后做)

①修改master1节点

修改前:

修改后:

②重启

③修改master2节点

 修改前:

修改后:

④重启

⑤修改node1节点

 修改前:

修改后:

④重启

(3)确定升级计划

执行如下命令确定升级版本

我的目标版本是1.24.1-0。

6.升级master1节点版本(v1.24.1)

(1)在k8s控制节点master1安装kubeadm1.24.1

(2)腾空控制节点master1

(3)升级控制节点master1各个组件

成功

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

(7)解除master1的节点维护

(8)查看节点状态(master1已升级为v1.24.1)

7.升级 master2节点版本(v1.24.1)

(1)在k8s控制节点master2安装kubeadm1.24.1

(2)腾空控制节点master2

(3)升级master2节点

成功:

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

(7)查看节点状态(master1和master2都已升级为v1.24.1)

8.升级 node1节点版本(v1.24.1)

(1)在node1节点上安装kubeadm 1.24.1

(2)腾空节点node1(驱逐node1的pod)

(3)升级node1上的kubelet

(4)修改kubelet变量

修改前:

修改后:

(5)升级kubelet和kubectl

(6)解除对node1的保护

9.验证集群(v1.24.1)

(1)验证集群状态是否正常

​​​​​​​​​​​​​​​​​​​​​

版本均已升级到 v1.24.1。

(2) 查看集群服务状态

相关文章:

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd) 5.master2节点迁移容器运行时(docker → containerd) 6.node1节点容器运行时迁移(docker → containerd) 7.升级集群计划(v1.23.14 → v1.24.1&#…...

Redis 数据结构和常用命令

* 代表多个,?代表一个 (不用全部敲出来,按住tab可以自动补全) -2是无效,-1是永久有效 ;贴心小提示:内存非常宝贵,对于一些数据,我们应当给他一些过期时间&a…...

Docker 容器命令总汇

目录 1、创建Docker容器(不启动) 2、创建Docker容器(启动) 3、列出正在运行的容器 4、停止和启动容器 5、重启容器 6、进入容器 7、查看容器信息 8、查看容器日志 9、删除容器和镜像 10、重命名容器 11、从旧容器复制数…...

react + redux 之 美团案例

1.案例展示 2.环境搭建 克隆项目到本地(内置了基础静态组件和模版) git clone http://git.itcast.cn/heimaqianduan/redux-meituan.git 安装所有依赖 npm i 启动mock服务(内置了json-server) npm run serve 启动前端服务 npm…...

【形式语言与自动机/编译原理】CFG-->Greibach-->NPDA(2)

本文将详细讲解《形式语言与自动机》(研究生课程)或《编译原理》(本科生课程)中的上下文无关文法(CFG)转换成Greibach范式,再转成下推自动机(NPDA)识别语言是否可以被接受…...

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户: 1.使用CREATE USER语创建…...

【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中创建一个目录,例如/usr/local/arm,然后…...

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言: 近期,[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法,将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…...

[Linux开发工具]——vim使用

Linux编辑器——vim的使用 一、什么是集成开发环境?二、什么是vim?三、vim的概念四、vim的基本操作五、vim命令模式命令集5.1 移动光标5.2 删除文字5.3 复制粘贴5.4 其他操作 六、vim底行模式命令集6.1 首先在命令模式下shift;进入末行模式。…...

【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套)

背景需求: 1、以前做单元格填充,都是制作N个分开的单元格 (表格8) 2、这次做五宫格数独的Word模板,我图方便,就只用了一个大表格,第六行第六列隐藏框线,看上去就是分开的&#xff…...

Spring Boot日志:从Logger到@Slf4j的探秘

写在前面 Hello大家好,今日是2024年的第一天,祝大家元旦快乐🎉 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用?三、日志怎么用?四、自定义日志打印💬 常见日志框架说明4.1 在程序…...

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置 1 GTM与ADC的接口2 GTM与VADC的连接2.1 VADC 到 GTM 的连接2.1.1 简要介绍2.1.2 应用举例2.2 EVADC到 GTM的连接2.2.1 应用举例3 总结本文介绍实现GTM与VADC的连接性的相关寄存器配置。 1 GTM与ADC的接口 由英…...

【基础】【Python网络爬虫】【6.数据持久化】Excel、Json、Csv 数据保存(附大量案例代码)(建议收藏)

Python网络爬虫基础 数据持久化(数据保存)1. Excel创建数据表批量数据写入读取表格数据案例 - 豆瓣保存 Excel案例 - 网易新闻Excel保存 2. Json数据序列化和反序列化中文指定案例 - 豆瓣保存Json案例 - Json保存 3. Csv写入csv列表数据案例 - 豆瓣列表保…...

王道考研计算机网络——应用层

如何为用户提供服务? CS/P2P 提高域名解析的速度:local name server高速缓存:直接地址映射/低级的域名服务器的地址 本机也有告诉缓存:本机开机的时候从本地域名服务器当中下载域名和地址的对应数据库,放到本地的高…...

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…...

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…...

neovim调试xv6-riscv过程中索引不到对应头文件问题

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com,github地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。 和这篇文章neovim调试linux内核过程中索…...

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选?不差钱选云服务器CVM,追求性价比选择轻量应用服务器,轻量真优惠呀,活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三…...

骑砍战团MOD开发(31)-游戏AI控制

一.骑砍单机模式下AI控制 骑砍战团中野外战斗,训练场中小兵和地方小兵的行为统称为场景AI. 骑砍大地图中敌军追踪和遭遇追击统称为大地图AI. 二.骑砍场景AI 骑砍引擎通过header_mission_templates,py定制AI常量控制小兵位置,动作和朝向.可实现自定义阵型和攻击动作。 # Agen…...

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上,权限不是在安装时才授予应用程序的。相反,开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中,则需要一个跨平台(iOS, Android)的 API 来…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...