1. 为什么要在Kubernetes中部署Jenkins?
传统的Jenkins部署方式通常采用静态Agent节点,这种方式存在几个明显的痛点。首先,资源利用率低下——构建任务高峰期需要预留大量闲置资源,而低谷期这些资源又处于浪费状态。其次,维护成本高——每个Agent节点都需要单独配置环境、安装依赖,当构建需求变化时需要人工介入调整。我在2018年负责的一个电商项目中,就曾因为"双十一"前临时扩容了20台物理Agent节点,活动结束后这些机器闲置了三个月才被回收。
Kubernetes的动态调度能力完美解决了这些问题。通过Kubernetes部署Jenkins,可以实现:
- 按需创建:每个构建任务触发时自动创建Pod作为Jenkins Agent
- 自动回收:任务完成后立即释放资源
- 环境隔离:每个构建都在全新的Pod中运行,避免环境污染
- 资源配额:通过Kubernetes的ResourceQuota精确控制每个构建的资源消耗
实测数据显示,某中型互联网公司采用这种方案后,CI/CD基础设施成本降低了67%,构建环境问题导致的失败率从15%降至3%以下。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与组件选型
2.1 最小化Kubernetes集群配置
要实现稳定的动态Agent方案,Kubernetes集群需要满足以下最低配置要求:
| 组件 | 推荐版本 | 必须功能 |
|---|---|---|
| Kubernetes | ≥1.20 | Pod优先级/抢占、Vertical Pod Autoscaler |
| CNI插件 | Calico/Flannel | NetworkPolicy支持 |
| 存储类 | 动态Provisioner | ReadWriteMany访问模式 |
| Ingress Controller | Nginx 1.19+ | WebSocket支持 |
特别注意:如果使用AWS EKS或Azure AKS等托管服务,需要确保Worker节点有足够的资源缓冲池。建议预留30%的未分配资源用于突发构建任务。
2.2 Jenkins核心插件选择
以下插件是实现动态Agent的关键:
- Kubernetes Plugin (1.30.0+) - 核心插件,负责与K8s API交互
- Pipeline (2.6+) - 必须使用声明式Pipeline定义构建流程
- Docker Pipeline (1.26+) - 用于构建容器化应用
- Kubernetes CLI (1.10.0+) - 在Pipeline中直接操作K8s资源
安装时常见的版本冲突问题:当同时安装Git插件和Kubernetes插件时,可能会因为JGit的依赖冲突导致启动失败。解决方案是先在管理界面安装Kubernetes插件及其所有依赖,重启后再安装其他插
