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

相关推荐
醉颜凉15 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
sbjdhjd15 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
小美元15 天前
【爽之】使用jenkins实现前端一键发版
运维·jenkins
ywl47081208716 天前
springSecurity+jwt,简单版demo
java·前端·servlet
飞天狗11116 天前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
changxiang16 天前
Jenkins备忘
运维·jenkins
飞天狗11117 天前
零基础JavaWeb入门——第4课:表单处理 —— 浏览器怎么把数据发给服务器
java·开发语言·前端·后端·servlet
未若君雅裁18 天前
日志采集与ELK:从本地日志到集中检索分析
运维·elk·jenkins
Dontla18 天前
CI/CD前世今生(持续集成、持续交付、持续部署、Jenkins、Github Actions)
ci/cd·github·jenkins
Java 码思客18 天前
【ElasticSearch从入门到架构师】第7章-聚合查询——实现数据统计与分析
大数据·elasticsearch·jenkins