jenkins連線k8s

FuShudi發表於2024-06-23

目錄
  • Jenkins連線k8s叢集
    • 1. Kubernetes外掛簡介
    • 2. Kubernetes外掛使用
      • 2.1 kubernetes的連線引數
    • 3. 測試
    • 4. 錯誤原因

Jenkins連線k8s叢集

  • 預設Jenkins是有2個執行器的,我們也可以透過增加節點的方式去讓他擁有更多的執行器,連線固定節點的方法比較簡單,按照他的步驟一步步來就好了,這裡我們配置連線k8s叢集

  • 在我們需要連線k8s叢集之前,是需要安裝kubernetes外掛的,不然是沒有那個按鈕的

1. Kubernetes外掛簡介

Kubernetes 外掛的目的是能夠使用 Kubernetes 配合,實現動態配置 Jenkins 代理(使用 Kubernetes 排程機制來最佳化負載),在執行 Jenkins Job 構建時,Jenkins Master 會在 kubernetes 中建立一個 Slave Pod 代理來執行任務。

該 Slave Pod 中可以包含多種映象,例如需要 Maven 編譯可以使用 Maven 映象執行任務。使用 NPM編譯則可以使用 NPM映象。操作 Kubernetes 可以使用 Kubectl 外掛映象。

所有 Job 中所需要的環境及其依賴都交由映象提供,而不需要手動搭配這些環境。在 Slave Pod 執行完 Job 任務後,該Slave Pod將會自動刪除。所以 Kubernetes Plugin 簡單用法就是,在 Kubernetes 中啟動 Jenkins Slave 代理,讓代理執行 Jenkins Job,執行完後釋放刪除 Slave 釋放資源。

2. Kubernetes外掛使用

Kubernetes Plugin的配置主要有兩部分組成:

  • kubernetes的連線引數:主要用於配置如果連線kubernetes
  • kubernetes的pod模板:呼叫kubernetes建立jenkins slave使用的pod模板

2.1 kubernetes的連線引數

進入 **系統管理->節點管理->Configure Clouds **中,點選 “Add a new cloud” 選項,選擇kubernetes,即可進行kubernetes外掛的配置。Kubernetes 外掛的基本配置,可以配置 Jenkins 連線 Kubernetes API 地址、憑據、超時時間、容器數量限制等引數,詳細配置項說明如下:

  • 名稱: 用於該“雲”配置的標識,可以配置多個“雲”來對應多個 Kubernetes 環境,如:kubernetes
  • Kubernetes 地址: Kubernetes API 的地址,一般在 Kubernetes 叢集內部 Kubernetes API 為 https://kubernetes.default.svc.cluster.local,叢集外部 Kubernetes API 地址為 https://{K8S IP}:6443,Jenkins 如果也部署在 Kubernetes 叢集中的話,可以使用內部地址,否則只能使用外部地址。
  • 禁用 HTTPS 證書檢查: 設定連線 Kubernetes API 時不檢查 Https 證書,一般預設不勾選即可。
  • Kubernetes 名稱空間: 指定在哪個 Kubernetes 名稱空間下執行任務,一般預設為空即可。
  • Jenkins 地址: 指定 Jenkins Master 的 URL 地址,用於 Slave 連線 Jenkins 用,如果 Jenkins 配置了字首也要帶上。如http://jenkins.example.com:8080,也可以使用kubernetes的內部地址 http://jenkins-svc.devops.svc.cluster.local:8080
  • Jenkins 通道: jenkins會提供一個獨立的埠用於Jenkins slave的連線,該埠預設為50000;如: jenkins-svc.devops.svc.cluster.local:50000

這裡的內部地址規則是svc名字.名稱空間.svc.cluster.local,一定要注意不要寫錯了

  • Connection Timeout: 連線 Kubernetes API 超時時間,預設值即可。
  • Read Timeout: 連線 Kubernetes API 讀取超時時間,預設值即可。
  • 容器數量: 執行 Slave Pod 的最大數量。為空則不限制,設定為 0 則一個都不能建立,預設是 10 個,一般推薦預設值。
  • Pod Labels: Slave Pod 的 Label 標籤設定,預設標籤即可。
  • Pod Retention: Pod 保留策略,在 Slave Pod 執行完任務後,是否刪除或者保留策略,預設會刪除,一般使用預設值即可。
  • 映象: Pod 模板配置,可以配置 Slave Pod 中多個容器的引數值,非常靈活。

最終的配置圖片就是這樣的

3. 測試

我們新建一個流水線,然後讓他執行一些任務,看他能不能正確啟動並連線

將這一段流水線程式碼複製進去,這裡的cloud指的是你剛剛新增的k8s節點的名稱,然後儲存,點選立即執行

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes' 
            showRawYaml true  
            yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: jenkins-agent
  name: jenkins-agent
spec:
  serviceAccountName: jenkins-admin
  containers:
  - name: jnlp
    image: jenkins/inbound-agent
    args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
  - name: busybox
    image: busybox
    command:
    - cat
    tty: true
    imagePullPolicy: IfNotPresent
  dnsPolicy: ClusterFirst
  restartPolicy: Never
"""
        }
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

如果不出問題的話就可以構建成功了

4. 錯誤原因

  • 當然,有極大可能會失敗,因為目前國內的docker不能直接拉取映象,所以你可以將映象地址換一下
  • 如果不是因為映象的原因,正常情況下20秒以內就會執行完,你的流水線一直卡在那個地方的話就可能是你的jenkins的地址寫錯了,檢查一下jenkins的svc然後去修改一下

相關文章