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

你可能感兴趣的文章
Objective-C实现鸡兔同笼问题(附完整源码)
查看>>
Objective-c正确的写法单身
查看>>
Objective-C语法之代码块(block)的使用
查看>>
ObjectMapper - 实现复杂类型对象反序列化(天坑!)
查看>>
ObjectProperty 类的使用
查看>>
Object常用方法
查看>>
Object方法的finalize方法
查看>>
Object类有哪些方法,hashcode方法的作用,为什么要重写hashcode方法?
查看>>
Objenesis创建类的实例
查看>>
OBObjective-c 多线程(锁机制) 解决资源抢夺问题
查看>>
OBS studio最新版配置鉴权推流
查看>>
Obsidian的使用-ChatGPT4o作答
查看>>
Obsidian笔记记录GPT回复的数学公式无缝转化插件Katex to mathjax
查看>>
ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。 将元素标记为过时可以通知用户:该元素在产品的未来版本中将被移除。...
查看>>
OC Xcode快捷键
查看>>
oc 中的.m和.mm文件区别
查看>>
OC 中的重写 OC中没有重载 以及隐藏
查看>>
OC 内存管理黄金法则
查看>>
oc57--Category 分类
查看>>
occi库在oracle官网的下载针对vs2008
查看>>