边界说明:K8s vs Jenkins不是“谁替代谁”的问题。K8s负责应用运行和容器编排,Jenkins负责编排构建、测试、制品和发布流程,两者通常在CI/CD链路中协同。
很多团队在建设DevOps平台时会问:有了K8s还要不要Jenkins?或者有了Jenkins是不是就不需要K8s?这个问题背后其实是工具边界没有理清。Jenkins可以触发构建、执行测试、构建镜像、调用部署命令;K8s负责接收部署声明,调度Pod,保持副本期望状态,并提供服务发现、滚动更新和运行治理。
它们解决的是不同层的问题。混淆边界,会让流水线脚本越来越复杂,也会让K8s集群承担不了交付治理职责。
K8s解决什么问题
K8s是容器编排平台,重点在运行期。它通过控制器持续让实际状态接近期望状态,负责Pod调度、副本管理、服务发现、滚动更新、配置注入、存储挂载和资源隔离。
K8s适合解决:
- 应用部署到哪些节点
- 副本数如何保持稳定
- 服务如何被发现和访问
- 发布时如何滚动更新
- 应用异常后如何自动恢复
- Namespace、RBAC和资源配额如何隔离团队
- 指标、日志和事件如何支撑运行观测
K8s不负责写代码、跑单元测试、做制品扫描或决定某个版本是否可以进入生产。这些属于流水线和交付治理范畴。
Jenkins解决什么问题
Jenkins是自动化流水线工具,重点在交付过程。它可以把代码提交、构建、测试、镜像构建、制品上传、环境部署、审批和通知串联起来。
Jenkins适合解决:
- 代码提交后如何触发构建
- 测试和扫描如何自动执行
- 镜像如何构建、打标签和推送
- 哪些环境可以自动发布,哪些需要审批
- 发布失败后如何通知和回滚
- 发布记录和构建记录如何保留
Jenkins不负责长期保持应用副本,也不负责K8s集群调度和服务发现。它可以调用K8s,但不应该替代K8s的运行治理能力。
两者如何协同
典型协同方式是:Jenkins负责生成和推进发布动作,K8s负责执行和维持运行状态。
一个常见链路如下:
| 阶段 | Jenkins职责 | K8s职责 |
| 代码提交 | 触发流水线 | 无直接职责 |
| 构建测试 | 执行构建、测试、扫描 | 可提供临时构建环境 |
| 镜像制品 | 打标签、推送仓库 | 拉取镜像运行 |
| 部署发布 | 应用模板、触发变更 | 滚动更新、调度Pod |
| 发布验证 | 检查结果、读取指标 | 提供状态、事件和服务端点 |
| 回滚恢复 | 触发回滚流程 | 执行Deployment回滚或重建 |
这张表说明,两者不是替代关系,而是上下游关系。Jenkins推动变更,K8s承接变更并维持运行。
常见误区一:把所有发布逻辑都写进Jenkins脚本
如果所有K8s发布细节都写在Jenkinsfile里,短期可以跑通,长期会出现大量重复脚本。不同团队各自写kubectl命令,资源限制、探针、命名规范、权限和回滚方式都不一致,平台团队很难治理。
更好的方式是把部署模板、权限模型、镜像规范、发布策略和验证清单平台化。Jenkins调用标准模板或平台接口,而不是每个项目复制脚本。
常见误区二:以为K8s能自动替代CI/CD
K8s可以滚动更新,也可以回滚Deployment,但它不会自动完成代码测试、镜像扫描、审批、制品晋级和发布记录。没有CI/CD,团队仍然可能手工构建镜像、手工修改YAML、手工发布生产。
K8s提供运行能力,CI/CD提供交付流程。企业需要同时建设两者,并明确责任边界。
常见误区三:给Jenkins过大的K8s权限
Jenkins通常需要访问K8s集群执行部署,但权限不能无限放大。给Jenkins一个集群管理员凭据,让所有项目共享,是高风险做法。
建议按环境、Namespace和操作类型拆分权限。开发环境可以更自动化,生产环境应保留审批、审计和最小权限。流水线凭据应由凭据管理系统托管,不写入仓库或文档。
企业如何设计工具边界
设计工具边界时,可以按问题归属判断:
- 构建、测试、扫描、审批、通知归流水线
- 调度、副本、服务发现、滚动更新归K8s
- 模板、权限、策略、可观测和发布标准归平台工程
- 业务验证、版本接受和回滚决策由应用团队与平台团队协同
如果一个问题需要长期运行状态,通常由K8s和平台能力解决;如果一个问题发生在版本推进过程中,通常由Jenkins或CI/CD系统解决。
下一步建议
建议团队先梳理现有发布链路:哪些动作发生在Jenkins,哪些动作发生在K8s,哪些动作依赖人工,哪些动作没有审计。然后把高风险动作标准化,尤其是生产凭据、部署模板、回滚流程和发布验证。
如果已经有大量Jenkins脚本,可以先抽取公共步骤:镜像构建、扫描、部署模板、发布验证和通知。逐步让Jenkins成为流程入口,而不是所有平台能力的堆叠点。
延伸阅读可以查看DevOps与平台工程分类,并结合Jenkins+K8s自动化部署流水线和K8sDeployment详解继续完善发布治理边界。
落地建议:先拆边界,再做平台化
如果团队已经同时使用K8s和Jenkins,第一步不是更换工具,而是拆清边界。把当前流水线中所有动作列出来:哪些是构建动作,哪些是制品动作,哪些是部署动作,哪些是运行期检查,哪些是人工审批。再判断这些动作应该留在Jenkins、交给K8s,还是沉淀到平台模板。
第二步是减少脚本分叉。常见做法是统一镜像构建、扫描、部署模板和发布验证,把差异留给参数,而不是让每个团队维护一套命令。这样既能保留Jenkins的灵活编排能力,也能让K8s运行治理保持一致。
第三步是把验证和回滚纳入共同责任。Jenkins负责触发和记录,K8s提供状态和事件,平台团队定义判断标准,应用团队确认业务是否可用。边界清晰后,工具协同才会真正提升交付效率。
如果后续引入GitOps、内部开发者平台或应用交付平台,也不意味着Jenkins和K8s边界失效。新的平台能力应承接模板、自服务和策略治理,底层仍需要清楚区分流水线推进和运行期编排。
FAQ
有了K8s还需要Jenkins吗?
通常仍然需要CI/CD工具。K8s负责运行和编排,Jenkins负责构建、测试、制品和发布流程。两者职责不同,可以协同使用。
Jenkins能不能直接替代K8s?
不能。Jenkins可以执行部署命令,但不负责容器调度、副本自愈、服务发现和运行期治理。生产运行仍需要K8s或等效平台能力。
K8s和Jenkins集成最需要注意什么?
最需要注意权限、模板和验证。Jenkins访问K8s应遵循最小权限,部署模板应标准化,发布后不能只看命令成功,还要验证应用可用性。
企业应该先建设K8s还是Jenkins流水线?
取决于现状。已有应用交付痛点时,可以先标准化流水线;已有容器平台基础时,应尽快把流水线与K8s发布、回滚和观测打通。最终目标是形成完整交付闭环。
原创声明:本文为 Alauda 原创技术内容,非商业转载须注明出处:https://www.alauda.cn/blog/477/。
文中图示和文章内容未经许可不得用于商业转载、培训课件、营销材料或二次分发。