核心是jenkins master通过kubernetes插件按需拉起pod作为slave并自动销毁;关键在于声明式定义slave的镜像、资源、挂载、标签及生命周期策略,全程无需人工维护节点。

核心在于让 Jenkins Master 通过 Kubernetes Plugin 按需拉起 Pod 作为 Slave,构建结束立即销毁,全程无需人工维护节点。关键不是“配置节点”,而是“声明式定义 Slave 的运行时形态”——包括镜像、资源、挂载、标签和生命周期策略。
安装并启用 Kubernetes 插件
进入 Jenkins 系统管理 → 插件管理 → 可选插件,搜索 Kubernetes(注意不是 “Kubernetes Continuous Deploy”),勾选安装并重启。该插件是实现动态 Slave 的基础,它让 Jenkins 能与 kube-apiserver 对话,创建/删除 Pod。
配置 Kubernetes 云连接
系统设置 → 最下方【云】→ 添加云 → 选择 Kubernetes:
-
名称:例如
k8s-cloud,后续在 Pipeline 中通过此名称引用 -
Kubernetes URL:集群内可访问的 apiserver 地址(如
https://kubernetes.default.svc),建议用 Service DNS -
Credentials:使用 ServiceAccount Token(推荐)或 kubeconfig,确保有
create/delete pod权限 -
Jenkins URL:Master 对外可访问地址(如
http://jenkins.example.com) -
JNLP Agent Port:填
50000(不是 HTTP 端口),且不能带协议或路径(❌http://...❌/tcp)
点击【连接测试】成功后,说明 Jenkins 已能调度集群资源。
定义 Pod 模板与容器规格
在同一云配置页,展开【Pod Templates】→ 添加 Pod 模板:
-
名称:如
maven-slave -
标签:如
maven(Pipeline 中node('maven')就靠它匹配) -
容器列表 → 添加容器:
▪ 名称:如jnlp(必须为 jnlp,Jenkins 默认识别)
▪ 镜像:使用官方或自建镜像,如jenkins/inbound-agent:4.11-1或封装好 JDK/Maven/Node 的定制镜像
▪ 命令 和 参数:留空(插件自动注入启动逻辑)
▪ Tty Enabled:勾选(避免容器静默退出) -
资源配置:设置 CPU 请求/限制(如
100m/500m)、内存(如256Mi/1Gi),直接影响调度速度和稳定性 -
卷挂载:添加
PersistentVolumeClaim挂载 Maven 本地仓库(/home/jenkins/.m2)和 workspace(/home/jenkins/agent/workspace),避免重复下载依赖、保留构建产物
在 Pipeline 中触发弹性供给
新建流水线任务,使用声明式语法直接调用模板:
pipeline {
agent {
kubernetes {
cloud 'k8s-cloud'
label 'maven'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B clean package -DskipTests'
}
}
}
}
每次执行时,Jenkins 自动:匹配云配置 → 渲染 Pod YAML → 提交至 Kubernetes → 等待 Pod Ready 并完成 JNLP 注册 → 运行步骤 → 构建结束自动终止 Pod。整个过程通常在 5–15 秒内完成,真正实现秒级伸缩。











