首页 新闻 会员 周边 捐助

docker执行Jenkins正常,用kubernetes执行Jenkins却提示缺少插件

0
悬赏园豆:10 [待解决问题] 浏览: 50次

docker执行图

kubernetes执行图

用kubernetes部署Jenkins总提示缺少各种插件

kubernetes配置如下:


apiVersion: v1
kind: Namespace
metadata:
  name: jenkins
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-crb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: jenkins
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-master
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      devops: jenkins-master
  template:
    metadata:
      labels:
        devops: jenkins-master
    spec:
      nodeSelector:
        jenkins: "true"
      serviceAccount: jenkins
      initContainers:
      - name: fix-permissions
        image: busybox
        command: ["sh","-c","chown -R 1000:1000 /var/jenkins_home"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: jenkinshome
          mountPath: /var/jenkins_home
      containers:
      - name: jenkins
        image: jenkins401:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
        - name: slavelistener
          containerPort: 50000
        volumeMounts:
        - name: jenkinshome
          mountPath: /var/jenkins_home
        env:
        - name: JAVA_OPTS
          value: "-Xms4096m -Xmx5120m -Duser.timezone=Asia/Shanghai -Dhudson.model.DirectoryBrowserSupport.CSP="
      volumes:
        - name: jenkinshome
          hostPath:
            path: /var/jenkins_home/
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: jenkins
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
    - name: slavelistener
      port: 50000
      targetPort: 50000
  selector:
    devops: jenkins-master
---
apiVersion: networking.k8s.io/v1 # 或者 networking.k8s.io/v1,如果您的集群支持
kind: Ingress
metadata:
  name: jenkins-web
  namespace: jenkins
spec:
  rules:
    - host: jenkins.qq.com
      http:
        paths:
          - backend:
              service:
                name: jenkins
                port:
                  number: 8080
            path: /
            pathType: Prefix

没法放置代码块,大佬帮看看哪个配置有问题?
熊猫~·的主页 熊猫~· | 初学一级 | 园豆:171
提问于:2024-11-03 11:18

支持 markdown 语法,可以放代码块

dudu 3个月前

@dudu: 我用··· 不生效

熊猫~· 3个月前

@熊猫~·: 肯定可以,我用过很多次

dudu 3个月前

@dudu: 可以了,感谢

熊猫~· 3个月前
< > 人人可用的开源BI工具
分享
所有回答(1)
0

在使用 Kubernetes 部署 Jenkins 时,出现缺少插件的问题,通常与以下几个因素有关。我们将逐一分析你的配置,并提供可能的解决方案。

1. 持久化数据问题

确保 Jenkins 的 jenkins_home 目录是持久化的,以便在 Jenkins 容器重启或更新时,能够保留已安装的插件和配置。

问题:

在你的配置中,使用的是 hostPath,这意味着 Jenkins 数据将存储在 Kubernetes 节点的文件系统上。确保该路径 /var/jenkins_home/ 在所有节点上都存在且可写。

解决方案:

  • 使用 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC):建议使用 PV 和 PVC 来确保 Jenkins 的数据持久化。以下是一个示例配置:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /var/jenkins_home # 确保该路径存在且可写

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

然后在 Jenkins 部署中引用 PVC:

      volumes:
        - name: jenkinshome
          persistentVolumeClaim:
            claimName: jenkins-pvc

2. 插件安装方式

确保 Jenkins 镜像中包含所需的插件,或者在 Jenkins 启动时自动安装。

解决方案:

  • 使用 Jenkins 官方镜像:如果你使用的是自定义镜像,确保在 Dockerfile 中包含所有必要的插件安装步骤,或者使用 Jenkins 的配置文件来预装插件。例如,可以在 Jenkinsfile 中使用插件安装脚本。
  • 配置 initContainer:可以在 initContainer 中添加插件安装脚本,确保在 Jenkins 启动之前安装所需的插件。

3. 环境变量和配置

确保 Jenkins 的环境变量和配置正确。

解决方案:

  • 检查 JAVA_OPTS 和其他环境变量是否设置正确。可以尝试使用更简单的配置,确保没有其他问题。

4. 检查日志

在 Jenkins 启动后,查看 Jenkins 的日志,确认插件安装的详细信息。可以通过以下命令查看 Pod 的日志:

kubectl logs <jenkins-pod-name> -n jenkins

5. Ingress 配置

确保 Ingress 配置正确,虽然这不会影响插件的安装,但确保可以通过指定的域名访问 Jenkins。

示例完整配置

结合以上建议,以下是一个更新后的 Kubernetes 配置示例:

apiVersion: v1
kind: Namespace
metadata:
  name: jenkins
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-crb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: jenkins
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /var/jenkins_home
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-master
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      devops: jenkins-master
  template:
    metadata:
      labels:
        devops: jenkins-master
    spec:
      nodeSelector:
        jenkins: "true"
      serviceAccount: jenkins
      initContainers:
      - name: fix-permissions
        image: busybox
        command: ["sh","-c","chown -R 1000:1000 /var/jenkins_home"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: jenkinshome
          mountPath: /var/jenkins_home
      containers:
      - name: jenkins
        image: jenkins401:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
        - name: slavelistener
          containerPort: 50000
        volumeMounts:
        - name: jenkinshome
          mountPath: /var/jenkins_home
        env:
        - name: JAVA_OPTS
          value: "-Xms4096m -Xmx5120m -Duser.timezone=Asia/Shanghai -Dhudson.model.DirectoryBrowserSupport.CSP="
      volumes:
        - name: jenkinshome
          persistentVolumeClaim:
            claimName: jenkins-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: jenkins
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
    - name: slavelistener
      port: 50000
      targetPort: 50000
  selector:
    devops: jenkins-master
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins-web
  namespace: jenkins
spec:
  rules:
    - host: jenkins.qq.com
      http:
        paths:
          - backend:
              service:
                name: jenkins
                port:
                  number: 8080
            path: /
            pathType: Prefix

总结

通过使用持久化卷(PV 和 PVC)来存储 Jenkins 数据、确保插件安装的正确性、查看 Jenkins 日志等方式,通常可以解决在 Kubernetes 上部署 Jenkins 时遇到的插件缺失问题。如果问题仍然存在,请提供更多的日志信息,以便进一步排查。

Technologyforgood | 园豆:7872 (大侠五级) | 2025-02-13 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册
Top