关于Jenkins Operator
-
Jenkins Operator的GitHub仓库:
https://github.com/jenkinsci/kubernetes-operator
-
Jenkins Operator的DockerHub仓库:
https://hub.docker.com/r/virtuslab/jenkins-operator
-
Jenkins Operator官方文档:
https://jenkinsci.github.io/kubernetes-operator/
前置条件
-
Kubernetes集群版本应为1.17版本或以上 -
kubectl版本应为1.17版本或以上
部署方式
部署 Jenkins Operator 有两种方法,分别是:
-
使用 YAML 部署,需要先部署好Jenkins Operator,再部署Jenkins实例 -
使用 Helm Chart 部署,会同时将Jenkins Operator和Jenkins部署好
❝
因考虑到后续对细节有更多控制的需求,本篇选择采用YAML的方式部署。可定制性强一些,这样可以对每个 K8S 资源进行详细的配置和管理。当然,可以根据自己的需求和选择安装方式,关于使用 Helm Chart 部署的方法可参考官方文档。
❞
使用YAML安装Jenkins Operator
-
首先安装 Jenkins 自定义资源定义(CRDs)
kubectl apply -f https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/config/crd/bases/jenkins.io_jenkins.yaml
安装后查看已经注册到K8S API中的自定义资源:
[root@k8s-b-master jenkins-k8s]# kubectl api-resources | grep jenkins
jenkins jenkins.io/v1alpha2 true Jenkins
上面的输出表明存在一个名为”jenkins”的自定义资源(Custom Resource),其版本为”v1alpha2″,并且它是可被发现的(”true”)。该自定义资源的类型为”Jenkins”,它是由jenkins.io提供的。这意味着在该Kubernetes集群中,已经安装了一个与Jenkins相关的自定义资源定义(CRD)。这个CRD定义了一个新的资源类型”Jenkins”,可以在该集群中使用。
后续的步骤,通过Deployment部署jenkins实例时,需要定义:
apiVersion: jenkins.io/v1alpha2
apiVersion字段就是指定Deployment对象的API版本,表明这个Deployment对象使用的是jenkins.io自定义资源的v1alpha2版本。
-
开始安装Operator和其他所需资源
其它所需的资源是指:ServiceAccount、Role、Rolebinding,之后才真正开始部署Jenkins Operator
kubectl apply -f https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/deploy/all-in-one-v1alpha2.yaml
可以看到Jenkins Operator已经运行正常:
[root@k8s-b-master jenkins-k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
jenkins-operator-654d85448f-rpdrz 1/1 Running 0 10m
开始部署Jenkins实例
❝
注意,部署Jenkins的前提是Operator要事先部署好。
❞
-
准备以下jenkins_instance.yaml:
apiVersion: jenkins.io/v1alpha2
kind: Jenkins
metadata:
name: jenkins-ser
namespace: default
spec:
configurationAsCode:
configurations: []
secret:
name: ""
groovyScripts:
configurations: []
secret:
name: ""
jenkinsAPISettings:
authorizationStrategy: createUser
master:
disableCSRFProtection: false
containers:
- name: jenkins-master
image: jenkins/jenkins:2.319.1-lts-alpine
imagePullPolicy: Always
livenessProbe:
failureThreshold: 12
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 100
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 10
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 80
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 1500m
memory: 3Gi
requests:
cpu: "1"
memory: 500Mi
seedJobs:
- id: jenkins-operator
targets: "cicd/jobs/*.jenkins"
description: "Jenkins Operator repository"
repositoryBranch: master
repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
-
将Jenkins部署到K8S:
kubectl create -f jenkins_instance.yaml
-
查看Pod
[root@k8s-b-master jenkins-k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
jenkins-jenkins-ser 0/1 Running 0 73s
jenkins-operator-654d85448f-rpdrz 1/1 Running 0 53m
-
获取Jenkins凭据
[root@k8s-b-master jenkins-k8s]# kubectl get secret
NAME TYPE DATA AGE
jenkins-operator-credentials-jenkins-ser Opaque 4 6m43s
[root@k8s-b-master jenkins-k8s]# kubectl get secret jenkins-operator-credentials-jenkins-ser -o 'jsonpath={.data.user}' | base64 -d
jenkins-operator
[root@k8s-b-master jenkins-k8s]# kubectl get secret jenkins-operator-credentials-jenkins-ser -o 'jsonpath={.data.password}' | base64 -d
R8SfjGlE8HrrcdJNdHaZ
-
临时配置转发
[root@k8s-b-master jenkins-k8s]# kubectl port-forward --address 0.0.0.0 jenkins-jenkins-ser 80:8080
Forwarding from 0.0.0.0:80 -> 8080
❝
注意,在生产环境中,更常见的做法是通过Kubernetes Ingress、Load Balancer或NodePort等方式来实现服务暴露,此处仅为临时验证。
❞
-
登录


原文始发于微信公众号(不背锅运维):部署 Jenkins Operator 并在 Kubernetes 中配置 Jenkins 实例
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/149451.html