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

相关推荐
cgsthtm1 小时前
Jenkins添加用户和角色并分配相应Job权限
运维·jenkins·jenkins用户·jenkins角色·jenkins权限·jenkins job
mnasd1 小时前
Gitlab + Jenkins 实现 CICD
运维·gitlab·jenkins
开发者联盟league1 天前
使用Jenkins整合Sonarqube/Gitlab/Harbor/Kubernetes的Demo工程
kubernetes·gitlab·jenkins
开发者联盟league1 天前
使用k8s安装Jenkins
容器·kubernetes·jenkins
wangyadong3171 天前
重新安装k3s,因为我安装jenkins 的时候报错了。不知道为啥rancher 访问不了了。
linux·服务器·rancher
开发者联盟league1 天前
使用Jenkins整合Sonarqube/Gitlab/Harbor/Kubernetes实现CICD
kubernetes·gitlab·jenkins
serve the people1 天前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins
开发者联盟league2 天前
使用jenkins pipeline将项目打包运行在k8s上报错kubectl: Permission denied
java·kubernetes·jenkins
江华森2 天前
Jenkins 运维管理实战博客大纲
运维·jenkins