mac單機, jenkins-master在集群k8s外, k8s內部署動態jenkins-slave, jnlp方式. 踩坑+吐血詳細總結


  • 1.安裝kubernetes的kubectl和minikute, baidu很多, easy
  • 2.minikute啟動, 直接啟動由於國內網絡問題一直失敗, 加上鏡像倉庫地址
    minikube start  image-mirror-country='cn' --registry-mirror=https://registry.docker-cn.com --memory=4096  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
  • 3.k8s集群內操作:
  •   3.1 設置rbac, pv, pvc信息, 通過yaml文件啟動, 先本地路徑新建文件分別如下:
  •     rbac.yaml : 定義供jenkins-master鏈接使用的ServiceAccount信息, 以及分配相應的角色權限, 其中Service Account Name是jenkins, Namespace是devops, 權限是cluser-admin, 這些信息也都可以使用kubectl命令一步步
  •                     新建, 使用yaml文件可一次執行更加方便可視.
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: jenkins
      namespace: devops
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: jenkins
      namespace: devops
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["create","delete","get","list","patch","update","watch"]
    - apiGroups: [""]
      resources: ["pods/exec"]
      verbs: ["create","delete","get","list","patch","update","watch"]
    - apiGroups: [""]
      resources: ["pods/log"]
      verbs: ["get","list","watch"]
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: jenkins
      namespace: devops
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: jenkins
        namespace: devops
  •     jenkins-pv.yaml : 新建Persistent Volume信息, pv, pvc, 以及nfs, 其實用來集群內pods同步傳輸文件, 也就是常說的數據持久化, 主要是因為k8s內部工作的很多pods, 有一定生命周期, 也有一定損壞的風險, 故為了解決各
  •                             個pods中的數據如何在運行時同步傳輸到指定的地方(文件服務器, 此處為nfs), 需要這些配套使用, 當然, 如果只是簡單玩玩動態jenkins-slave, 此處可不必深究, 可配可不配, 我本地當時配了
  • apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: jenkins-pv
      namespace: devops
    spec:
      storageClassName: pv1
      persistentVolumeReclaimPolicy: Recycle
      capacity:
        storage: 15Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 10.68.128.26
        path: /Users/grahamliu/App/nfs/jenkins

        jenkins-pvc.yaml : 配合jenkins-pv.yaml使用

  • kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: jenkins-pvc
      namespace: devops
    spec:
      storageClassName: pv1
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi

     

  •   3.2 使用kubectl命令分別執行以上yaml文件, 必須不能報錯, 報錯請排查
  • kubectl create -f rbac.yaml -n devops
    kubectl create -f jenkins-pv.yaml -n devops
    kubectl create -f jenkins-pvc.yaml -n devops

      

  •   3.3 使用kubectl命令查看pv-pvc綁定狀態, STATUS都為Bound說明成功
  • pro-2:~ grahamliu$ kubectl get pv -n devops
    NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
    jenkins-pv   15Gi       RWO            Retain           Bound    devops/jenkins-pvc   pv1                     23h
    pro-2:~ grahamliu$ kubectl get pvc -n devops
    NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    jenkins-pvc   Bound    jenkins-pv   15Gi       RWO            pv1            23h

     

  • 4.Jenkins-master配置, 主要步驟是配置鏈接k8s集群信息:
  •   4.1 我是mac本地用docker部署jenkins服務, docker pull 需要的鏡像部署, baidu很多, easy
  •   4.2 Jenkins安裝Kubernetes插件, 可能安裝完成后需要重啟jenkins才可用-
  •   4.3 插件安裝成功后 :
  •     Jenkins進入Dashboard->系統管理->系統配置->頁面最下面顯示‘Cloud’,The cloud configuration has moved to a separate configuration page.點擊進入->配置集群->kubernetes
  •   4.4 開始詳細配置, 我的配置如下:
  •     
  •      
  •       kubernetes地址獲取:
  • pro-2:~ grahamliu$ kubectl cluster-info
    Kubernetes master is running at https://192.168.64.9:8443
    KubeDNS is running at https://192.168.64.9:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

          kubernetes命名空間 : 以上在k8s配置部分的rbac中的配置, 我配置為devops

  •       憑據 : rbac中在devops下的service account所擁有的token, 通過兩步命令獲取, 獲取后添加jenkins憑據
  • pro-2:~ grahamliu$ kubectl describe sa jenkins -n devops
    Name:                jenkins
    Namespace:           devops
    Labels:              <none>
    Annotations:         <none>
    Image pull secrets:  <none> Mountable secrets: jenkins-token-6fqd9 Tokens: jenkins-token-6fqd9
    Events:              <none>
    pro-2:~ grahamliu$ kubectl describe secrets jenkins-token-6fqd9 -n devops
    Name:         jenkins-token-6fqd9
    Namespace:    devops
    Labels:       <none>
    Annotations:  kubernetes.io/service-account.name: jenkins
                  kubernetes.io/service-account.uid: b4c3b24a-54ea-4d30-9f24-f4df6df2002b
    
    Type:  kubernetes.io/service-account-token
    
    Data
    ====
    ca.crt:     1066 bytes
    namespace:  6 bytes
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6Ikt0eW9BWmZtc3prX0NEcER2b1NmVmcyc1hqR2tleVlWeXBabXZoUkdoV2sifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZvcHMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiamVua2lucy10b2tlbi02ZnFkOSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJqZW5raW5zIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYjRjM2IyNGEtNTRlYS00ZDMwLTlmMjQtZjRkZjZkZjIwMDJiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRldm9wczpqZW5raW5zIn0.A64F7RxvnLc1Oj9SvMftLdaEKrZLqpbICeAmB49uzGqFHyvnDZYvLpaxguFvpsX6x-jo0pm4frUGE8bDKlskBYwl04nHpyKIKoMc6e4t23BuJshFR1kgd2CVP98K6GASJ-5wnMM3KSQ4DjDDcLGZC0VIvtie2B-jrOsBpHuR4_KgnF3Wpyex9JOHMqxYAYA2pjwV2731GsmSk3EtzqrwE6t2qobm3Wq3cwfIy1CC0myj_ObrTlG7TUP_s4Ui7LSWGO3ae2goAkBcSGUqEVpcqSYM4KGA7dJ9M68J4ItB6s1uaHuxlVmKG5iv_CRAHruuVxLvsPpsj7CqWeWq1TlNmQ

     

           4.5 以上配置完成后, 點擊“連接測試”, 應該顯示Connected to Kubernetes vX.XX.X信息, 如果報錯, 請按報錯信息和以上配置步驟排查

  •        4.6 Jenkins 地址 : 實際配置多少寫多少, docker中起的jenkins服務, 查看本機IP地址和開放端口配置, 比較容易配錯, 請多嘗試
  •              注 : Jenkins-master如果在k8s集群內, 需要配置k8s內給jenkins分配的ip地址, 此ip和電腦本機ip不同
  •        4.7 Jenkins通道 : ip同Jenkins 地址的ip, 不帶http頭, 端口配置對, 確定到底是5000還是50000? (我當時配錯, 排查了很久, 其他都沒問題, 這一個配置不對同樣帶不起k8s配置)
  •             注 : 1. 首先確定本地jenkins服務是否開啟5000端口映射? 如果開啟, 下一步
  •                  2. Jenkins進入Dashboard->系統管理->全局安全配置->代理, 確定此處配置和jenkins服務開啟端口一致!!!!
  •                  3. 確定ip配置一致, 端口一致, 此配置表面算成功了
  •  

          4.8 添加Pod Templete配置, 如下: 

  •  

     

  •     以上Jenkins配置K8s結束
  •  
  • 5. 新建pipline Job測試后build:
  • pipeline {
      agent {
          label 'jenkins-slave-k8s'
      }
      stages {
          stage('test') {
              steps {
                  script {
                      println "test"
                  }
              }
          }
      }
    }

     

  • 6. 正常的話應該build success
  •  

     

  • 注 : 查詢網上信息, 在jenkins-slave構建中, 有可能在pull image時無法成功拉取鏡像, 或者想拉取私人image, 可以嘗試配置個人docker倉庫的密鑰, 然后通過個人倉庫+密鑰拉取
  •       可baidu查詢“kubernetes配置secret拉取私倉鏡像“獲取詳細配置信息
  •  

     

     

     

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM