k8s如何部署分布式jenkins

87次阅读
没有评论

共计 2835 个字符,预计需要花费 8 分钟才能阅读完成。

k8s 如何部署分布式 jenkins,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。

前提条件是,有 storageclass,利用 pvc 创建持久化存储 创建 kube-ops namespace

这里创建 opspvc 另外把 accessmode 换成 readwritemany,因为会有多个 pod 进行读写

然后部署 jenkins master deployment 如下

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: jenkins
 namespace: kube-ops
spec:
 template:
 metadata:
 labels:
 app: jenkins
 spec:
 terminationGracePeriodSeconds: 10
 serviceAccountName: jenkins
 containers:
 - name: jenkins
 image: jenkins/jenkins:lts
 imagePullPolicy: IfNotPresent
 ports:
 - containerPort: 8080
 name: web
 protocol: TCP
 - containerPort: 50000
 name: agent
 protocol: TCP
 resources:
 limits:
 cpu: 2000m
 memory: 4Gi
 requests:
 cpu: 1000m
 memory: 2Gi
 livenessProbe:
 httpGet:
 path: /login
 port: 8080
 initialDelaySeconds: 60
 timeoutSeconds: 5
 failureThreshold: 12
 readinessProbe:
 httpGet:
 path: /login
 port: 8080
 initialDelaySeconds: 60
 timeoutSeconds: 5
 failureThreshold: 12
 volumeMounts:
 - name: jenkinshome
 subPath: jenkins
 mountPath: /var/jenkins_home
 env:
 - name: LIMITS_MEMORY
 valueFrom:
 resourceFieldRef:
 resource: limits.memory
 divisor: 1Mi
 - name: JAVA_OPTS
 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
 securityContext:
 fsGroup: 1000
 volumes:
 - name: jenkinshome
 persistentVolumeClaim:
 claimName: opspvc
apiVersion: v1
kind: Service
metadata:
 name: jenkins
 namespace: kube-ops
 labels:
 app: jenkins
spec:
 selector:
 app: jenkins
 ports:
 - name: web
 port: 8080
 targetPort: web
 - name: agent
 port: 50000
 targetPort: agent

分配权限,配置 rbac 如下

apiVersion: v1
kind: ServiceAccount
metadata:
 name: jenkins
 namespace: kube-ops
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: jenkins
 namespace: kube-ops
rules:
 - apiGroups: [ ]
 resources: [pods]
 verbs: [create , delete , get , list , patch , update , watch]
 - apiGroups: [ ]
 resources: [pods/exec]
 verbs: [create , delete , get , list , patch , update , watch]
 - apiGroups: [ ]
 resources: [pods/log]
 verbs: [get , list , watch]
 - apiGroups: [ ]
 resources: [secrets]
 verbs: [get]
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
 name: jenkins
 namespace: kube-ops
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: Role
 name: jenkins
subjects:
 - kind: ServiceAccount
 name: jenkins
 namespace: kube-ops

安装 k8s 插件,与 k8s 目标集群进行远程连接

因为是腾讯云,并没有提供 tls 客户端认证,所以直接利用账号密码,进行认证,记得,禁用 https 证书检查,jenkins 和 k8s 就集成好了

划重点!!!:jenkins 地址,这里我这里写的是内网地址以及暴露了 50000 端口(用来与 slave 建立通信使用),因为 master 和 slave 分别在不通的 k8s 集群里,那么需要远程进行联通,而 jenkins-ui 我是以 ingress 的方式对外暴露

slave 的配置

这里需要注意的是标签列表,这里填写的标签,需要在 slave 所在 k8s 集群的节点上进行标注,而这个名字,是 label 这个字段里的 key 并未是 value,这里要注意

job 里配置

关于 k8s 如何部署分布式 jenkins 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2835字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)