K8s集群安装Jenkins K8s动态Agent配置配置实操
K8s集群安装Jenkins K8s动态Agent配置配置实操技术栈Jenkins 2.440.x Kubernetes v1.32.13 Rocky Linux 8.6 Kubernetes Plugin Kaniko Helm 3.14.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s集群安装Jenkins K8s动态Agent配置配置实操操作环境Jenkins 版本 2.440.3部署于 K8s 集群 ci 命名空间已安装 Kubernetes、Kubernetes CLI、Docker Pipeline、Credentials Binding 插件K8s 集群版本 v1.32.13目标部署命名空间 default已配置 ServiceAccount jenkins-deployer 及 RBAC 权限镜像仓库 Harbor v2.10.x地址 harbor.example.com项目 library已配置机器人账号凭据代码仓库 GitLab/GitHub已配置 Webhook 触发 Jenkins 构建容器运行时 Containerd 1.7.xJenkins Agent 使用 Kaniko 镜像构建无需 Docker daemonHelm 3.14.x应用 Chart 存放于代码仓库 helm/ 目录Values 文件按环境区分对接原理Jenkins Pipeline 以 Groovy DSL 声明式描述 CI/CD 全流程通过 Kubernetes Plugin 在 K8s 集群中动态创建 Pod 作为构建 Agent任务完成后自动销毁实现资源弹性伸缩。Pipeline 流程包含代码检出、代码质量检查、单元测试、镜像构建Kaniko、镜像推送Harbor、部署到 K8skubectl/helm、健康验证、通知。Jenkins 通过 Kubernetes CLI Plugin 调用 kubeconfig 或 ServiceAccount Token 与 K8s APIServer 通信。凭据统一存储于 Jenkins Credentials通过 withCredentials 绑定到构建环境。K8s 侧通过 RBAC 为 jenkins-deployer ServiceAccount 授予最小权限。详细步骤1. K8s 部署 Jenkins Master# 创建命名空间和持久卷 kubectl create namespace ci # Helm 部署 Jenkins helm repo add jenkins https://charts.jenkins.io helm repo update cat jenkins-values.yaml EOF controller: serviceType: ClusterIP ingress: enabled: true hostName: jenkins.example.com resources: requests: cpu: 500m memory: 1Gi limits: cpu: 2 memory: 4Gi installPlugins: - kubernetes:3937.vd7b_82db_e347 - kubernetes-cli:4383.v2a_f9d2148296 - docker-workflow:572.v950f58993843 - credentials-binding:642.v8395a_b_b_c89e - git:5.2.1 - workflow-aggregator:596.v8c21c963d92d - sonar:2.17.2 - slack:684.v8330f8598869 serviceAccount: create: true name: jenkins agent: enabled: true image: jenkins/inbound-agent:latest persistence: enabled: true storageClass: rook-ceph-block size: 50Gi EOF helm install jenkins jenkins/jenkins -n ci -f jenkins-values.yaml # 等待启动 kubectl wait --forconditionready pod -l app.kubernetes.io/componentjenkins-controller -n ci --timeout300s # 获取初始密码 kubectl exec -n ci deployment/jenkins -- cat /var/jenkins_home/secrets/initialAdminPassword2. 配置 K8s 云与动态 Agent# Manage Jenkins - Manage Nodes and Clouds - Configure Clouds # 添加 Kubernetes 云 # Name: k8s # Kubernetes URL: https://kubernetes.default.svc.cluster.local # Kubernetes namespace: ci # Service account: jenkins # Jenkins URL: http://jenkins.ci.svc.cluster.local:8080 # Jenkins tunnel: jenkins-agent.ci.svc.cluster.local:50000 # Pod 模板配置 # Name: kaniko-builder # Labels: kaniko-builder # Containers: # - name: kaniko, image: gcr.io/kaniko-project/executor:v1.19.2-debug, command: sleep, args: 999999 # - name: kubectl, image: bitnami/kubectl:1.32, command: sleep, args: 999999 # - name: helm, image: alpine/helm:3.14.0, command: sleep, args: 999999 # 验证动态 Agent kubectl get pods -n ci -w # 触发构建后自动创建 jenkins-agent-xxx Pod验证流程# 1. 验证 Jenkins 运行 kubectl get pods -n ci -l app.kubernetes.io/componentjenkins-controller # Pod STATUS Running, READY 1/1 ​ # 2. 验证动态 Agent # 触发构建后查看 ci 命名空间 Pod kubectl get pods -n ci | grep jenkins-agent # 显示 jenkins-agent-xxx Pod 运行 ​ # 3. 验证镜像构建推送 # Harbor UI 查看 library/myapp 项目或 API: curl -u robot\$libraryci-bot:${HARBOR_TOKEN} \ https://harbor.example.com/api/v2.0/projects/library/repositories/myapp/artifacts # 显示新镜像标签 ​ # 4. 验证 K8s 部署 kubectl get deployment myapp -n default # 镜像已更新为新标签 kubectl rollout status deployment/myapp -n default # deployment successfully rolled out ​ # 5. 验证 RBAC 权限 kubectl auth can-i create deployments --assystem:serviceaccount:ci:jenkins-deployer -n default # 返回 yes kubectl auth can-i delete namespaces --assystem:serviceaccount:ci:jenkins-deployer # 返回 no ​ # 6. 验证 Webhook 触发 # 推送代码后 Jenkins 自动构建 curl http://jenkins.example.com/job/myapp/lastBuild/api/json | jq .building排错方案Jenkins Agent Pod 一直 Pending检查 ci 命名空间资源是否充足ServiceAccount 是否存在镜像是否可拉取kubectl describe pod 查看事件镜像构建失败Kaniko检查 Dockerfile 语法基础镜像是否可拉取Harbor 凭据是否正确/kaniko/.docker/config.json 是否生成镜像推送失败 401检查 Harbor 机器人账号权限Token 是否过期凭据 ID 是否正确withCredentials 变量绑定是否正确kubectl 部署失败 Forbidden检查 ServiceAccount RBAC 权限RoleBinding 是否绑定正确命名空间kubeconfig Token 是否有效kubectl 部署超时检查 Deployment 镜像是否可拉取Pod 是否启动成功健康检查是否通过kubectl describe pod 和 kubectl logs 排查Webhook 不触发检查 GitLab Webhook URLJenkins 构建触发器是否启用Secret Token 是否匹配网络是否可达查看 GitLab Webhook 最近交付记录凭据泄露风险确保不在 Jenkinsfile 硬编码密码使用 withCredentials 绑定开启 Credentials 掩码功能定期轮换凭据构建速度慢优化 Dockerfile 多阶段构建和缓存层启用 Kaniko 缓存使用本地 Maven/Gradle 缓存 PVC并行执行独立阶段增大 Agent 资源

相关新闻

MiniMax-H3 Turbo-SLA vs MiniMax-H3 Turbo:4步图生视频LoRA该如何选择

MiniMax-H3 Turbo-SLA vs MiniMax-H3 Turbo:4步图生视频LoRA该如何选择

MiniMax-H3 Turbo-SLA vs MiniMax-H3 Turbo:4步图生视频LoRA该如何选择 【免费下载链接】Minimax-h3-Turbo-SLA 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Minimax-h3-Turbo-SLA 🎬 MiniMax-H3 Turbo-SLA 是面向 MiniMax-H3 模型推…

2026/10/25 7:49:28 阅读更多 →
C语言梦开始的地方16:结构体

C语言梦开始的地方16:结构体

文章目录C语言梦开始的地方16:结构体结构体类型的声明结构体变量创建和初始化结构体的特殊声明结构体的自引用结构体内存对齐对齐规则为什么存在内存对齐?修改默认对齐数结构成员访问操作符结构体传参结构体实现位段什么是位段位段的内存分配位段的跨平台…

2026/11/5 9:40:56 阅读更多 →
达梦数据库如何查看字符集?

达梦数据库如何查看字符集?

0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KRselect SF_GET_UNICODE_FLAG();select UNICODE ();字符集在安装初始化库的时候指定,设定后不可更改,请在安装时按照需求设置好后期如果想修改就只能重新初始库!

2026/11/6 1:14:34 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/15 5:13:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/15 5:13:35 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/15 5:13:35 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/15 3:37:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/15 4:18:38 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/15 5:13:35 阅读更多 →

日新闻

周新闻

月新闻