共计 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 行业资讯频道了解更多相关知识。