本文共 3955 字,大约阅读时间需要 13 分钟。
本指南将引导您在Kubernetes集群上部署并配置Jenkins_master和 Slave。以下是必要条件:
StorageClass。kube-ops命名空间用于Jenkins组件的部署。确保存储资源可用并创建PVC:
kubectl create persistentvolumeclaim opspvc --storage-class <存储类名称>存储类名称>
紧接在创建PVC后,将accessMode设置为readWriteMany,以支持多个Pod的并发读写。
为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 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
创建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
在 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 自定义id>
在Jenkins中创建Python构建Job时,勾选“此Job只能在特定节点上运行”,并选择标签jenkins_slave。确保Slave对应的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私有云内的节点。
转载地址:http://uztmz.baihongyu.com/