k8s集群中部署jenkins
·
帮助:k8s集群中pod显示ImagePullBackOff
1、创建jenkins的rbac
$ sudo gedit jenkins-rbac.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-rbac.yaml
# 文件内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins-admin #ServiceAccount名
namespace: jenkins #指定namespace,一定要修改成你自己的namespace
labels:
name: jenkins
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins-admin
labels:
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: jenkins
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
2、创建jenkins的pvc
$ sudo gedit jenkins-pvc.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-pvc.yaml
# 文件内容如下
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: master-nfs-storage # 与storageClass中metadata.name保持一致
finalizers:
- kubernetes.io/pvc-protection
name: jenkins
namespace: jenkins
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi #存储空间大小
storageClassName: master-nfs-storage # 与storageClass中的provisioner一致
3、创建jenkins的部署和服务
$ sudo gedit jenkins-deployment.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-deployment.yaml
#文件内容如下
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jenkins
name: jenkins
namespace: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
serviceAccountName: jenkins-admin
containers:
- name: jenkins
image: 'jenkins/jenkins:lts'
securityContext:
privileged: true #拥有特权
runAsUser: 0 #设置以ROOT用户运行容器
ports:
- containerPort: 8080
name: http
protocol: TCP
- containerPort: 50000
name: jnlp
protocol: TCP
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: '1'
memory: 1Gi
env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
divisor: 1Mi
resource: limits.memory
- name: JAVA_OPTS #设置变量,指定时区和 jenkins slave 执行者设置
value: >-
-Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
-Duser.timezone=Asia/Shanghai
-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai
- name: JENKINS_OPTS #设置路径前缀加上 Jenkins
value: '--prefix=/jenkins'
- name: JENKINS_JAVA_OPTIONS
value: '-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai'
- name: JAVA_ARGS
value: >-
-Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
-Duser.timezone=Asia/Shanghai
-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai
- name: JENKINS_JAVA_OPTIONS
value: >-
-Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
-Duser.timezone=Asia/Shanghai
volumeMounts:
- mountPath: /var/jenkins_home #设置要挂在的目录
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins #设置PVC
---
apiVersion: v1
kind: Service
metadata:
labels:
app: jenkins
name: jenkins
namespace: jenkins
spec:
ports:
- name: http
nodePort: 32001 #NodePort方式暴露 Jenkins 端口
port: 8080 #服务端口
protocol: TCP
targetPort: 8080
- name: jnlp
nodePort: 32002
port: 50000 #代理端口
protocol: TCP
targetPort: 50000
selector:
app: jenkins
type: NodePort
4、浏览器访问<集群ip>+32001/jenkins访问jenkins
5、jenkins的密码,直接使用命令”$ kubectl logs <jenkins 的pod名> -n jenkins“就有
更多推荐
所有评论(0)