博客
关于我
k8s如何部署分布式jenkins
阅读量:664 次
发布时间:2019-03-15

本文共 3955 字,大约阅读时间需要 13 分钟。

在Kubernetes集群上部署Jenkins

安装前提条件

本指南将引导您在Kubernetes集群上部署并配置Jenkins_master和 Slave。以下是必要条件:

  • 存储类:确保集群中存在适用于Jenkins数据存储的StorageClass
  • Persistent Volume Claim (PVC):创建持久化存储资源以支持Jenkins工作流程。
  • Kubernetes命名空间:创建kube-ops命名空间用于Jenkins组件的部署。

存储与权限配置

创建PVC

确保存储资源可用并创建PVC:

kubectl create persistentvolumeclaim opspvc --storage-class 
<存储类名称>

紧接在创建PVC后,将accessMode设置为readWriteMany,以支持多个Pod的并发读写。

Jenkins访问权限

为Jenkins Master配置读写权限:

# 在你选择的命名空间(如kube-ops)中创建ServiceAccountkubectl create serviceaccount jenkins -n kube-ops

配置RBAC角色:

# 在kube-ops命名空间中创建角色kubectl create role jenkins -n kube-ops

创建角色绑定:

kubectl bind role jenkins --to-serviceaccount jenkins -n kube-ops

Jenkins Master部署

部署Jenkins Master:

# 配置Jenkins Master Deployment在kube-ops命名空间kubectl apply -n kube-ops -f deployment.yml

deployment.yml示例:

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: jenkins  namespace: kube-opsspec:  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

配置Service

创建Jenkins服务:

kubectl apply -n kube-ops -f service.yml

service.yml示例:

apiVersion: v1kind: Servicemetadata:  name: jenkins  namespace: kube-opslabels:  app: jenkinsspec:  selector:    app: jenkins  ports:  - name: web    port: 8080    targetPort: web  - name: agent    port: 50000    targetPort: agent

Jenkins Slave配置

在 Slave所在Kubernetes集群中标注节点:

kubectl label nodes 
<节点名称>
jenkins=slave

配置Jenkins Slave Pod:

apiVersion: v1kind: Podmetadata:  labels:    jenkins: slave  annotations:    jenkins SlaveID: 
<自定义id>
spec: containers: - name: jenkins-slave image: jenkins/jenkins-slave:lts imagePullPolicy: IfNotPresent volumeMounts: - name: jenkinshome subPath: jenkins-slave mountPath: /var/jenkins_home - name: jenkins-slave-config subPath: jenkins-slave mountPath: /var/jenkins/slave_config

Job配置

在Jenkins中创建Python构建Job时,勾选“此Job只能在特定节点上运行”,并选择标签jenkins_slave。确保Slave对应的Kubernetes标签已正确配置。

使用Kubernetes插件

安装Jenkins插件(如SonarQube插件):

kubectl apply -n jenkins -f https://github.com/jenkinsci/kubernetes-plugin-deployment files

高级集群配置

由于Jenkins和Kubernetes集成,确保集群的SSL配置正确。由于腾讯云未提供TLS客户端认证,建议直接使用账号密码认证,并禁用证书检查。

集群远程连接

Jenkins Master和Slave分别在不同的Kubernetes集群中运行。确保Jenkins Master的UI通过Ingress服务外露,访问地址为Jenkins外TERNAL IP和端口8080(或其他配置的端口)。Slave构建任务将自动尝试Kubernetes私有云内的节点。

Troubleshooting

  • 确保Jenkins Master和Slave有适当的权限访问PVC存储。
  • 检查Jenkins服务和Pod日志,确保其能够正确挂载存储且没有网络连接问题。
  • 请确保Jenkins Slave节点在可接触的Kubernetes集群中运行,并且Pod的容器安全组允许通信。

转载地址:http://uztmz.baihongyu.com/

你可能感兴趣的文章
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>