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 部署。

相关推荐
童槿顏丶11 小时前
Jenkins部署(Docker)
java·docker·jenkins
lv__pf3 天前
servlet与jsp
java·开发语言·servlet
Elastic 中国社区官方博客4 天前
使用 Elasticsearch open inference API 对 OpenAI chat completions 进行支持
大数据·elasticsearch·搜索引擎·全文检索·jenkins
snow@li5 天前
SpringBoot:项目基于Rancher全景梳理与深入分析/Kubernetes可视化管理平台
rancher
风起洛阳@不良使5 天前
Servlet体系
servlet
X1A0RAN6 天前
Jenkins Pipeline 变量打印指南
运维·servlet·jenkins
heimeiyingwang6 天前
【CI/CD·Jenkins篇】多节点构建:Agent 配置与任务分发策略
ci/cd·jenkins
heimeiyingwang6 天前
【CI/CD·Jenkins篇】环境搭建:从零部署 Jenkins 主从架构
ci/cd·jenkins
heimeiyingwang6 天前
【CI/CD·Jenkins篇】Pipeline 基础:Declarative 与 Scripted 语法详解
ci/cd·pipeline·jenkins
sun༒7 天前
Java Web 三大组件之 Servlet:从入门到理解生命周期
java·servlet·web