news 2026/9/10 16:19:17

K8s集群安装Jenkins K8s Pod模板配置部署实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8s集群安装Jenkins K8s Pod模板配置部署实操

K8s集群安装Jenkins K8s Pod模板配置部署实操

技术栈:Jenkins 2.440.x + Kubernetes v1.32.13 + Rocky Linux 8.6 + Kubernetes Plugin + Kaniko + Helm 3.14.x

操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案

K8s集群安装Jenkins K8s Pod模板配置部署实操

操作环境

  • 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.x,Jenkins Agent 使用 Kaniko 镜像构建(无需 Docker daemon)

  • Helm 3.14.x,应用 Chart 存放于代码仓库 helm/ 目录,Values 文件按环境区分

对接原理

Jenkins Pipeline 以 Groovy DSL 声明式描述 CI/CD 全流程,通过 Kubernetes Plugin 在 K8s 集群中动态创建 Pod 作为构建 Agent,任务完成后自动销毁,实现资源弹性伸缩。Pipeline 流程包含代码检出、代码质量检查、单元测试、镜像构建(Kaniko)、镜像推送(Harbor)、部署到 K8s(kubectl/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 --for=condition=ready pod -l app.kubernetes.io/component=jenkins-controller -n ci --timeout=300s # 获取初始密码 kubectl exec -n ci deployment/jenkins -- cat /var/jenkins_home/secrets/initialAdminPassword

2. 配置 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/component=jenkins-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\$library+ci-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 --as=system:serviceaccount:ci:jenkins-deployer -n default # 返回 yes kubectl auth can-i delete namespaces --as=system: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 URL,Jenkins 构建触发器是否启用,Secret Token 是否匹配,网络是否可达,查看 GitLab Webhook 最近交付记录

  • 凭据泄露风险:确保不在 Jenkinsfile 硬编码密码,使用 withCredentials 绑定,开启 Credentials 掩码功能,定期轮换凭据

  • 构建速度慢:优化 Dockerfile 多阶段构建和缓存层,启用 Kaniko 缓存,使用本地 Maven/Gradle 缓存 PVC,并行执行独立阶段,增大 Agent 资源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 16:17:49

改进麻雀算法在微电网需求响应优化中的应用

1. 项目背景与核心价值在能源系统智能化转型的背景下&#xff0c;配电网与微电网的协同优化成为提升能源利用效率的关键突破口。传统电力调度方式在面对分布式能源渗透率不断提高的现代电网时&#xff0c;暴露出响应速度慢、调节精度不足等明显短板。这个项目正是瞄准这一痛点&…

作者头像 李华
网站建设 2026/9/10 16:16:24

STM32+FPGA协同架构:FFT计算与信号合成分工设计

简介&#xff1a;本资源是2023年全国大学生电子设计竞赛H题‘信号分离系统’的完整FPGASTM32联合实现方案&#xff0c;面向嵌入式与数字电路方向的初学者及课程设计、毕设实践者&#xff0c;解决多频混合信号实时分离与参数可视化的核心难点。资源包共434个文件&#xff0c;8.4…

作者头像 李华
网站建设 2026/9/10 16:16:08

AI Agent+DevEco CLI:从零自动生成、构建并安装鸿蒙应用全流程实测

最近我一直在折腾一件事&#xff1a;让AI Agent不停留在“生成代码片段”这个层面&#xff0c;而是真正自己把一个鸿蒙应用从零写出来、编译通过、装进设备。搞了一圈之后发现&#xff0c;完成这条链路的关键不是AI模型选哪个&#xff0c;而是DevEco CLI这套命令行工具链能不能…

作者头像 李华
网站建设 2026/9/10 16:15:52

Wand-Enhancer 技术拆解:本地增强 Wand 客户端的 4 种实战

Wand-Enhancer 技术拆解&#xff1a;本地增强 Wand 客户端的 4 种实战 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer 是一款完全离…

作者头像 李华