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
没法放置代码块,大佬帮看看哪个配置有问题?
在使用 Kubernetes 部署 Jenkins 时,出现缺少插件的问题,通常与以下几个因素有关。我们将逐一分析你的配置,并提供可能的解决方案。
确保 Jenkins 的 jenkins_home
目录是持久化的,以便在 Jenkins 容器重启或更新时,能够保留已安装的插件和配置。
在你的配置中,使用的是 hostPath
,这意味着 Jenkins 数据将存储在 Kubernetes 节点的文件系统上。确保该路径 /var/jenkins_home/
在所有节点上都存在且可写。
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
确保 Jenkins 镜像中包含所需的插件,或者在 Jenkins 启动时自动安装。
Jenkinsfile
中使用插件安装脚本。initContainer
:可以在 initContainer
中添加插件安装脚本,确保在 Jenkins 启动之前安装所需的插件。确保 Jenkins 的环境变量和配置正确。
JAVA_OPTS
和其他环境变量是否设置正确。可以尝试使用更简单的配置,确保没有其他问题。在 Jenkins 启动后,查看 Jenkins 的日志,确认插件安装的详细信息。可以通过以下命令查看 Pod 的日志:
kubectl logs <jenkins-pod-name> -n jenkins
确保 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 时遇到的插件缺失问题。如果问题仍然存在,请提供更多的日志信息,以便进一步排查。
支持 markdown 语法,可以放代码块
– dudu 3个月前@dudu: 我用··· 不生效
– 熊猫~· 3个月前@熊猫~·: 肯定可以,我用过很多次
– dudu 3个月前@dudu: 可以了,感谢
– 熊猫~· 3个月前