rancher 安装jenkins 。国内镜像太头疼

Jenkins 在 K3s 上安装笔记(使用 Helm 离线包 + DaoCloud 镜像加速)

一、前置条件

  • K3s 集群正常运行(节点状态 Ready

  • Helm 已安装并能连接集群(建议配置好 kubeconfig)

  • 已下载 Jenkins Helm Chart 离线包(例如 jenkins-5.9.16.tgz

  • 确定可用的镜像仓库地址(例如 DaoCloud 镜像加速器 docker.m.daocloud.io

二、准备 values 配置文件

创建 my-values.yaml,注意 init 容器和主容器的镜像都需要指定,否则 init 容器仍会使用 Chart 默认的镜像(可能导致拉取失败)。

yaml

复制代码
controller:
  # 主容器镜像配置
  image:
    registry: docker.m.daocloud.io      # 镜像仓库地址
    repository: jenkins/jenkins         # 镜像名称
    tag: lts-jdk21                      # 标签(可用 lts-jdk11 或 lts-jdk17)
    pullPolicy: IfNotPresent
  # init 容器镜像配置(关键,必须与主容器一致)
  initContainerImage:
    registry: docker.m.daocloud.io
    repository: jenkins/jenkins
    tag: lts-jdk21
    pullPolicy: IfNotPresent
  serviceType: NodePort                  # 对外暴露 NodePort
persistence:
  storageClass: local-path               # K3s 默认的本地存储

为什么需要单独配置 initContainerImage?

Jenkins Helm Chart 使用 init 容器完成一些初始化工作(例如安装插件、配置权限等)。如果只配置 controller.image,init 容器仍会使用 Chart 默认的镜像(例如 jenkins/jenkins:2.555.2-jdk21),如果默认镜像不存在或网络不通,就会导致 Pod 卡在 Init:ImagePullBackOff

三、安装 Jenkins

bash

复制代码
# 创建命名空间(如果未存在)
kubectl create namespace jenkins --dry-run=client -o yaml | kubectl apply -f -

# 安装
helm install myjenkins ./jenkins-5.9.16.tgz \
  --namespace jenkins \
  -f my-values.yaml

如果需要升级或重新安装:

bash

复制代码
# 如果已存在且需要升级配置
helm upgrade myjenkins ./jenkins-5.9.16.tgz -n jenkins -f my-values.yaml

# 如果需要彻底删除后重装(会丢失数据,谨慎)
helm uninstall myjenkins -n jenkins
# 可选:删除 PVC 以清理所有数据
kubectl delete pvc -n jenkins jenkins-home-myjenkins-0
# 然后重新执行 install

四、验证安装

1. 查看 Pod 状态

bash

复制代码
kubectl get pods -n jenkins -w

等待 Pod 状态变为 Running(通常需要 2-5 分钟,取决于镜像拉取速度)。

2. 检查使用的镜像是否正确

bash

复制代码
kubectl get pod myjenkins-0 -n jenkins -o jsonpath='{range .spec.initContainers[*]}{.image}{"\n"}{end}'
kubectl get pod myjenkins-0 -n jenkins -o jsonpath='{range .spec.containers[*]}{.image}{"\n"}{end}'

应输出类似 docker.m.daocloud.io/jenkins/jenkins:lts-jdk21

五、首次登录

1. 获取初始管理员密码

bash

复制代码
kubectl exec --namespace jenkins -it svc/myjenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo
2. 获取访问端口

bash

复制代码
kubectl get svc -n jenkins myjenkins

输出示例:myjenkins NodePort 10.43.x.x 8080:31234/TCP,其中 31234 即为 NodePort。

3. 浏览器访问

text

复制代码
http://<K3s节点IP>:<NodePort>

例如:http://172.19.172.4:31234

使用用户名 admin 和上面获得的密码登录,按向导完成初始化(推荐安装默认插件)。

六、常见问题排查

现象 可能原因 解决方法
Pod 卡在 Init:ImagePullBackOff init 容器镜像配置错误或镜像不存在 检查 my-values.yaml 中的 controller.initContainerImage 是否正确;手动 crictl pull 测试镜像是否存在
Pod 卡在 ContainerCreating 很长时间 镜像拉取慢、存储卷挂载失败 配置镜像加速器(如 /etc/rancher/k3s/registries.yaml),检查 PVC 状态
访问 Jenkins 页面加载异常 NodePort 被防火墙阻止 检查节点防火墙是否开放该端口
忘记初始密码 执行密码获取命令重新获取,或进入 Pod 修改 /var/jenkins_home/secrets/initialAdminPassword

七、附:镜像加速配置(可选但推荐)

如果集群拉取 Docker Hub 镜像仍然缓慢,可以在 K3s 节点上配置镜像加速:

bash

复制代码
sudo mkdir -p /etc/rancher/k3s
sudo tee /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
  docker.io:
    endpoint:
      - "https://docker.m.daocloud.io"
      - "https://docker.nju.edu.cn"
      - "https://hub-mirror.c.163.com"
EOF
sudo systemctl restart k3s

注意:该配置会影响所有 Pod 的镜像拉取,优先级高于 values 中的 registry 设置。


下载jenkins离线安装包(国内网络环境太糟糕下载不成功只能离线安装)

wget https://github.com/jenkinsci/helm-charts/releases/download/jenkins-5.9.16/jenkins-5.9.16.tgz

helm install 报错(不要指定set)

helm install myjenkins ./jenkins-5.9.16.tgz \

--namespace jenkins \

--set controller.serviceType=NodePort \

--set persistence.storageClass=local-path \

--set controller.image=registry.cn-hangzhou.aliyuncs.com/acs/jenkins \

--set controller.tag=2.555.2-jdk21-alpine

level=INFO msg="warning: cannot overwrite table with non table for jenkins.controller.image (mappullPolicy:Always registry:docker.io repository:jenkins/jenkins tagLabel:jdk21)"

Error: INSTALLATION FAILED: jenkins/templates/tests/jenkins-test.yaml:34:24

executing "jenkins/templates/tests/jenkins-test.yaml" at <.Values.controller.image.registry>:

can't evaluate field registry in type interface {}

docker pull 验证镜像是否存在

笔记结束。以上步骤已在实际环境中验证,可顺利完成 Jenkins 部署。

相关推荐
fengyehongWorld8 小时前
Jenkins 安装与简单配置
运维·jenkins
圣光SG1 天前
Servlet学习笔记
笔记·学习·servlet
weixin_307779131 天前
Linux下Jenkins数据故障的系统化排查Shell脚本
linux·运维·服务器·jenkins
海兰4 天前
【Elasticsearch】工作流自动化评估
elasticsearch·自动化·jenkins
智码看视界4 天前
Tomcat架构深度拆解:Connector和Container到底怎么配合的?
java·servlet·架构·tomcat·web服务器
tianyuanwo4 天前
深入掌握 java -jar 命令:从基础到 Jenkins Agent 实战
java·jenkins·jar
这个需求做不了5 天前
Jenkins自动化构建与CI/CD流水线,并配置GitLab
java·ci/cd·自动化·gitlab·jenkins
007张三丰7 天前
软件测试专栏(15/20):REST Assured接口自动化框架实战
运维·自动化·jenkins·接口自动化·rest·assured
qq_452396238 天前
第二篇:《Jenkins 从零搭建:安装、配置与第一个 Pipeline》
java·运维·jenkins
用户6757049885028 天前
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第三章:发布之nodeAgent)
后端·jenkins