Rancher、Docker、K8s、Jenkins、ArgoCD:五个工具,一条流水线
云原生后端的技术栈很长但真正串起从代码到上线这条主线的就五个工具Docker、Jenkins、K8s、ArgoCD、Rancher。每个工具解决一个特定问题环环相扣。这篇文章不讲怎么安装只讲清楚两件事每个工具是什么、解决什么问题以及它们怎么串成一条完整的交付流水线。一、五个工具各自是什么先逐个搞清楚定位再看怎么协作。Docker解决环境一致性一句话把应用和它的所有依赖打包成一个不可变的镜像到哪里都能跑。没有 Docker 之前在我机器上能跑是后端开发最常见的甩锅。开发用 Java 11测试环境 Java 8生产环境某个依赖库版本不同——环境不一致导致的 bug 极难排查。Docker 的解法是把代码、运行时、依赖库、配置文件全部打到一个镜像里。镜像是一个不可变的制品开发、测试、生产用的是同一个镜像环境差异从源头消除。产出物一个带版本号的 Docker 镜像如user-service:v1.2.3。Jenkins解决自动化构建一句话代码 push 之后自动触发编译、测试、打包、推镜像全程不需要人干预。Docker 解决了怎么打包但谁来打包还是问题。总不能每次合代码都手动跑mvn package、docker build、docker push。Jenkins 就是那个自动化的流水线引擎。Jenkins 的核心是 Pipeline——一段声明式脚本定义了从代码拉取到镜像推送的完整步骤pipeline{agent any stages{stage(编译){steps{shmvn clean package -DskipTests}}stage(测试){steps{shmvn test}}stage(打镜像){steps{shdocker build -t user-service:v1.2.3 .}}stage(推镜像){steps{shdocker push registry.example.com/user-service:v1.2.3}}}}代码合并到主分支 → Jenkins 自动触发 → 编译 → 测试 → 打镜像 → 推到镜像仓库。CI持续集成到这一步结束。产出物一个已推送到镜像仓库的 Docker 镜像。K8s解决容器编排和调度一句话管理一堆机器上的容器负责自动部署、弹性伸缩、故障自愈、滚动更新。镜像推到仓库了但在哪些机器上跑几个副本、挂了怎么办、流量怎么分过去这些问题 Docker 自己解决不了。K8s 就是那个调度中枢。K8s 里的几个核心概念Pod最小调度单位里面跑一个或多个容器。Deployment定义要跑几个副本、用什么镜像、怎么更新。Service给一组 Pod 提供固定的访问入口IP 和域名Pod 挂了重建换 IPService 不变。Ingress把集群内的 Service 暴露给公网支持域名路由和 HTTPS。ConfigMap/Secret配置和敏感信息管理跟镜像解耦。一份 K8s 部署文件大概长这样apiVersion:apps/v1kind:Deploymentmetadata:name:user-servicespec:replicas:3# 跑 3 个副本selector:matchLabels:app:user-servicetemplate:metadata:labels:app:user-servicespec:containers:-name:user-serviceimage:registry.example.com/user-service:v1.2.3ports:-containerPort:8080K8s 拿着这份 YAML在集群里拉起 3 个 Pod自动负载均衡某个 Pod 挂了会自动重启。产出物一个在集群中稳定运行的应用实例。ArgoCD解决持续部署的配置漂移一句话监听 Git 仓库里的 K8s YAML 变化自动同步到集群保证集群状态和 Git 声明永远一致。CD持续部署有两种模式Push 模式Pull 模式代表Jenkins 做 CDArgoCD方式主动kubectl apply推到集群监听 Git 变化自动拉取并同步配置漂移有人手动改集群Jenkins 不知道集群与 Git 不一致时自动修正回来Push 模式的问题有人在集群里手动改了配置比如改了副本数Jenkins 下次部署会覆盖掉但中间这段时间集群状态和 Git 是不一致的——这叫配置漂移。ArgoCD 用 Pull 模式 GitOps 解决这个问题所有 K8s YAML 存在 Git 仓库里。ArgoCD 持续监听这个仓库。有人改了 Git 里的 YAMLArgoCD 自动同步到集群。有人手动改了集群ArgoCD 发现不一致会强制同步回 Git 的声明。Git 仓库成为唯一真实来源Single Source of Truth。不在集群里敲命令在 Git 里改文件。产出物集群状态与 Git 声明始终一致的持续部署机制。Rancher解决多集群管理一句话统一纳管多个 K8s 集群提供可视化界面、项目隔离、应用商店。一个团队可能有多个 K8s 集群开发集群、测试集群、生产集群甚至多云多地域。每个集群都要kubectl连上去管理切来切去很烦。Rancher 把这些集群统一纳管到一个界面里多集群管理一个页面看到所有集群的状态。可视化操作不用敲kubectl点按钮就能部署、扩缩容、看日志。项目隔离按项目/团队划分权限和资源。应用商店一键安装常用组件监控、日志等。Rancher 不是 K8s 的替代品是 K8s 的管理平台。底下跑的还是 K8sRancher 是上面那层管理面板。产出物一个统一的多集群管理入口。二、五个工具怎么串成一条流水线概念清楚了下面看它们怎么协作。以一个 Spring Boot 服务的完整交付流程为例。完整流程图开发写代码 ↓ Git push 到 GitLab/GitHub ↓ Jenkins 自动触发 CI 流水线 ├→ mvn clean package 编译 ├→ mvn test 单元测试 ├→ docker build 打镜像 └→ docker push 推到 Harbor/ACR ↓ 开发者修改 K8s YAML 仓库 把镜像版本号改成 v1.2.3 ↓ ArgoCD 监听到 Git 仓库变化 ├→ 拉取最新 YAML └→ kubectl apply 到 K8s 集群自动同步 ↓ K8s 拉起新版本 Pod ├→ 滚动更新逐个替换旧 Pod ├→ Service 流量自动切换 └─ 故障自愈Pod 挂了自动重启 ↓ Rancher 界面查看部署状态 ├→ 看 Pod 日志 ├→ 看资源使用率 └→ 排障、扩缩容逐环节拆解环节 1开发提交代码开发者写完 Spring Boot 代码本地用 Docker Compose 跑起 MySQL Redis 依赖自测通过后推到 Git 仓库的功能分支发起 MR/PR。代码审查通过后合并到主分支。环节 2Jenkins 做 CIJenkins 监听到主分支有新代码自动触发流水线编译 Java 代码 → 跑单元测试 →docker build打镜像 →docker push推到镜像仓库。到这一步CI 结束。产出物是registry.example.com/user-service:v1.2.3这个镜像。关键点Jenkins 只负责把代码变成镜像不负责部署。很多团队让 Jenkins 直接kubectl apply做 CD这其实混了职责。现代实践是 Jenkins 只管 CI。环节 3改 Git 里的 K8s YAML有一个独立的 Git 仓库存放 K8s 部署文件YAML。CI 完成后开发者或自动化脚本修改这个仓库里的镜像版本号# 从image:registry.example.com/user-service:v1.2.2# 改成image:registry.example.com/user-service:v1.2.3提交这个改动到 Git。环节 4ArgoCD 做 CDArgoCD 持续监听 YAML 仓库。发现 Git 里的镜像版本号变了自动拉取最新 YAML通过kubectl apply同步到 K8s 集群。如果有运维手动在集群里改了配置ArgoCD 会发现集群状态和 Git 不一致强制同步回 Git 的声明。Git 是唯一真实来源。环节 5K8s 执行部署K8s 收到新的 Deployment 声明开始滚动更新逐个创建新版本 Pod就绪后替换旧 Pod旧 Pod 优雅下线。Service 的流量自动切换到新 Pod。如果新版本有问题比如启动失败K8s 的健康检查会阻止新 Pod 接入流量旧版本继续服务给排查争取时间。环节 6Rancher 监控和排障部署完成后开发或运维通过 Rancher 界面查看新版本 Pod 是否全部 RunningPod 日志有没有异常CPU/内存使用率是否正常需要扩容时直接在 Rancher 界面改副本数不用敲kubectl不用切集群上下文一个界面搞定。三、职责边界谁干什么五个工具的职责很容易混淆尤其 Jenkins 和 ArgoCD、K8s 和 Rancher。画个线工具职责不干什么Docker打包应用为镜像不管部署、不管调度JenkinsCI编译→测试→打镜像→推仓库不直接部署到 K8s交给 ArgoCDArgoCDCD监听 Git→同步到 K8s不管编译、不管打镜像K8s容器调度部署、伸缩、自愈不管多集群统一界面交给 RancherRancher多集群管理可视化、纳管不替代 K8s底下还是 K8s最容易踩的坑是让 Jenkins 同时做 CI 和 CD。Jenkins 做 CDPush 模式的问题是没有配置漂移修正能力回滚也不优雅。让 Jenkins 和 ArgoCD 各干各的职责清晰问题好排查。四、一个实际场景串一遍假设要上线用户服务 v2.0增加了新功能手机号登录。开发本地写代码用 Docker Compose 跑依赖自测通过。提交代码推到 Git 功能分支发起 MR审查通过合并到主分支。CIJenkins 自动触发——编译 Java、跑测试、docker build打镜像user-service:v2.0.0、推到 Harbor。改 YAML修改部署仓库的 Deployment YAML镜像版本改成v2.0.0提交到 Git。CDArgoCD 监听到 YAML 变化自动同步到 K8s 测试集群。先在测试集群验证。K8s 部署滚动更新3 个新 Pod 逐个替换旧 PodService 流量自动切换。Rancher 查看在 Rancher 界面看测试集群的 Pod 状态和日志验证没问题。推生产把同一个 YAML 的目标集群改成生产集群ArgoCD 自动同步到生产 K8s。同样的滚动更新流程。监控通过 Rancher 界面看生产集群的 CPU、内存、Pod 状态确认服务稳定。整个过程代码到镜像是 Jenkins 的事镜像到集群是 ArgoCD 的事集群内调度是 K8s 的事多集群看是 Rancher 的事。Docker 贯穿始终提供不可变制品。五、为什么是这五个这五个工具不是随便选的它们刚好覆盖了交付流水线的五个关键环节打包Docker代码怎么变成可部署的制品。构建Jenkins怎么自动化地把代码变成镜像。调度K8s镜像怎么在集群里跑起来、跑得稳。部署ArgoCD怎么把镜像安全、可追溯地推到集群。管理Rancher多个集群怎么统一看、统一管。少一个就有缺口没有 Docker环境一致性没法保证没有 Jenkins手动打包效率低没有 K8s容器调度靠手动没有 ArgoCD部署配置容易漂移没有 Rancher多集群管理靠切命令行。

相关新闻

Java实习生面试:从八股文背诵到技术思维与工程能力的展现

Java实习生面试:从八股文背诵到技术思维与工程能力的展现

1. 从“面试鸭”到“面试官”:一次Java实习面试的深度复盘与拆解最近在带新人,也参与了几场实习生面试,发现很多同学对“面试”这件事的理解还停留在“背八股文”的阶段。一上来就是“HashMap的底层原理”、“Spring Bean的生命周期”&#x…

2026/10/12 5:33:40 阅读更多 →
Vivado启动自动化:Tcl脚本实现FPGA开发环境一键配置

Vivado启动自动化:Tcl脚本实现FPGA开发环境一键配置

1. 项目概述:为什么需要让 Vivado 启动时自动执行脚本?如果你和我一样,常年泡在 FPGA 开发里,每天和 Vivado 打交道的时间可能比和家人还多,那你一定遇到过这些烦人的重复劳动:每次打开 Vivado,…

2026/10/8 5:32:43 阅读更多 →
Frida实战:从原理到代码,彻底破解移动应用SSL Pinning证书绑定

Frida实战:从原理到代码,彻底破解移动应用SSL Pinning证书绑定

1. 项目概述:为什么SSL Pinning是移动安全分析的“拦路虎”?在移动应用安全测试和逆向工程领域,SSL Pinning(证书绑定)是一个我们几乎每天都会遇到的“老朋友”,也是一个让人又爱又恨的技术。爱它&#xff…

2026/10/13 5:01:20 阅读更多 →

最新新闻

学术期刊状态异常分析与应对策略

学术期刊状态异常分析与应对策略

1. 期刊状态异常事件概述今天早上在学术圈内突然流传开一则消息:Springer旗下某JCR二区期刊疑似被标记为"On Hold"状态。这个消息最初是由一位研究者在投稿系统后台发现状态异常后,在学术论坛上发出的预警。目前期刊官网尚未发布正式公告&…

2026/10/14 11:41:50 阅读更多 →
从命名到落地:拆解一个极简实时数据处理项目的完整设计思维

从命名到落地:拆解一个极简实时数据处理项目的完整设计思维

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率是个缩写。在技术圈里混久了,你会发现一个规律:越是短到只有两三个字母的项目名,背…

2026/10/14 11:41:50 阅读更多 →
微信小程序咖啡店点餐系统开发实战

微信小程序咖啡店点餐系统开发实战

1. 项目概述"基于微信小程序的咖啡店点餐系统"是一个典型的餐饮行业数字化转型解决方案。这个系统充分利用了微信生态的便利性,为咖啡店经营者提供了一个完整的线上点餐、支付、订单管理的闭环服务。相比传统纸质菜单或简单的外卖平台接入,这种…

2026/10/14 11:41:50 阅读更多 →
GPUImage3入门:Metal渲染链架构与自定义滤镜实战

GPUImage3入门:Metal渲染链架构与自定义滤镜实战

GPUImage3出来也挺久了,但网上大部分教程还是围绕它前代版本在写,很多朋友照着老文章迁移过来,看了Metal几个文件直接懵掉。我前后从旧版框架一路用到 GPUImage3,中间还踩过不少坑,这篇就把我梳理出来的框架骨干思路讲…

2026/10/14 11:41:50 阅读更多 →
Unity C#实现pHash感知哈希:图片相似度计算与查重实战

Unity C#实现pHash感知哈希:图片相似度计算与查重实战

做游戏或者工具链开发的朋友,应该都遇到过一种需求:明明是一张图,用户上传的是缩略图、你本地存的是原图,却要判断它们“是不是同一个东西”。换到Unity工程里,就是素材查重、自动化测试截图比对、玩家上传图片内容过滤…

2026/10/14 11:41:50 阅读更多 →
FCMADDPG多智能体编队控制:从集中训练到分布式执行的工程实践

FCMADDPG多智能体编队控制:从集中训练到分布式执行的工程实践

简介:针对无人机、自动驾驶等场景中的多智能体协同编队问题,这套代码基于MADDPG算法(多智能体深度确定性策略梯度)构建了一套可运行的深度强化学习实现方案。资源适用于学习多智能体强化学习与编队控制的研究者、工程师&#xff0…

2026/10/14 11:40:49 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →