博客
关于我
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/

你可能感兴趣的文章
php查最大值,在PHP数组中查找最大值
查看>>
php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
查看>>
php根据年月日计算年龄
查看>>
RabbitMQ - 单机部署(超详细)
查看>>
php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
查看>>
php模拟发送GET和POST请求
查看>>
RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
查看>>
php模板引擎smarty
查看>>
php正则表达式模式
查看>>
php正则表达式的特殊字符含义
查看>>
PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
查看>>
RabbitMQ + JMeter组合,优化你的中间件处理方式!
查看>>
PHP水仙花问题解法之一
查看>>
php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
查看>>
php注册页面实现注册后跳转页面
查看>>
PHP消息队列的实现方式与详解,值得一看
查看>>
PHP混合Go协程并发
查看>>
php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
查看>>
PHP源码安装后如何新增模块
查看>>
php源码详细安装步骤,linux下php源码安装步骤
查看>>