部署 Jenkins Operator 并在 Kubernetes 中配置 Jenkins 实例

关于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

  1. 首先安装 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版本。

  1. 开始安装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要事先部署好。

  1. 准备以下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
  1. 将Jenkins部署到K8S:
kubectl create -f jenkins_instance.yaml
  1. 查看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
  1. 获取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
  1. 临时配置转发
[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等方式来实现服务暴露,此处仅为临时验证。

  1. 登录
部署 Jenkins Operator 并在 Kubernetes 中配置 Jenkins 实例
部署 Jenkins Operator 并在 Kubernetes 中配置 Jenkins 实例


原文始发于微信公众号(不背锅运维):部署 Jenkins Operator 并在 Kubernetes 中配置 Jenkins 实例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/149451.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!