這是我看過最詳細的k8s中部署Jenkins教程
- 2019 年 12 月 25 日
- 筆記
原文地址:http://www.mydlq.club/article/6/
前幾天發過一篇部署Jenkins的文章:
使用的HostPath的方式,今天看到一篇用NFS做存儲,且更為詳細的文章推薦給大家。
目錄[-]
一、設置存儲目錄
1、安裝 NFS 服務端
2、掛載 NFS 並設置存儲文件夾
二、創建 PV & PVC
1、準備 PV & PVC 部署文件
2、創建 PV & PVC
三、創建 ServiceAccount & ClusterRoleBinding
四、創建 Service & Deployment
1、創建 Service & Deployment 部署文件
2、部署 Jenkins
五、獲取 Jenkins 生成的 Token
六、啟動 Jenkins 進行安裝
1、進入Jenkins
2、安裝插件
3、設置用戶名、密碼
七、其他
1、插件因網路問題安裝失敗
系統環境:
- kubernetes 版本:1.14.0
- jenkins 版本:2.172
- jenkins 部署示例文件 Github 地址:https://github.com/my-dlq/blog-example/tree/master/jenkins-deploy
一、設置存儲目錄
在 Kubenetes 環境下所起的應用都是一個個 Docker 鏡像,為了保證應用重啟的情況下數據安全,所以需要將 Jenkins 持久化到存儲中。這裡用的是 NFS 網路存儲,方便在 Kubernetes 環境下應用啟動節點轉義數據一致。當然也可以選擇存儲到本地,但是為了保證應用數據一致,需要設置 Jenkins 固定到某一 Kubernetes 節點。
1、安裝 NFS 服務端
詳情請看 CentOS7 搭建 nfs 伺服器 ,這裡不過多敘述。
2、掛載 NFS 並設置存儲文件夾
如果不能直接操作 NFS 服務端創建文件夾,需要知道 NFS 伺服器地址,然後將其掛在到本地目錄,進入其中創建 Jenkins 目錄空間。
(1)、掛載 NFS
$ mount -o vers=4.1 192.168.2.11:/nfs/ /nfs
(2)、在 NFS 共享存儲文件夾下創建存儲 Jenkins 數據的文件夾
$ mkdir -p /nfs/data/jenkins
二、創建 PV & PVC
創建 PV 綁定 NFS 創建的 Jenkins 目錄,然後創建 PVC 綁定這個 PV,將此 PVC 用於後面創建 Jenkins 服務時掛載的存儲。
1、準備 PV & PVC 部署文件
一定要確保 PV 的空間大於 PVC,否則無法關聯
jenkins-pv-pvc.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: jenkins labels: app: jenkins spec: capacity: storage: Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain mountOptions: #NFS掛在選項 - hard - nfsvers=4.1 nfs: #NFS設置 path: /nfs/data/jenkins server: 192.168.2.11 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins spec: accessModes: - ReadWriteOnce resources: requests: storage: Gi #生產環境空間一定要設置比較大點 selector: matchLabels: app: jenkins
2、創建 PV & PVC
提前將 namespace 修改成你自己的 namespace
- -n:指定 namespace
$ kubectl apply -f jenkins-pv-pvc.yaml -n public
三、創建 ServiceAccount & ClusterRoleBinding
此 kubernetes 集群用的是 RBAC 安全插件,必須創建許可權給一個 ServiceAccount,然後將此 ServiceAccount 綁定到 Jenkins 服務,這樣賦予 Jenkins 服務一定許可權執行一些操作,為了方便,這裡將 cluster-admin 綁定到 ServiceAccount 以保證 Jenkins 能擁有一定的許可權。
注意:請提前修改 yaml 中的 namespace
(1)、jenkins-rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-admin #ServiceAccount名 namespace: mydlqcloud #指定namespace,一定要修改成你自己的namespace labels: name: jenkins --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: jenkins-admin labels: name: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: mydlqcloud roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
(2)、創建 RBAC 命令
$ kubectl create -f jenkins-rbac.yaml
四、創建 Service & Deployment
這裡開始部署 Jenkins 服務,創建 Service 與 Deployment,其中 Service 暴露兩個介面 80880 與 50000。而 Deployment 裡面要注意的是要設置上面創建的 ServiceAccount ,並且設置容器安全策略為「runAsUser: 0」以 Root 許可權運行容器,而且暴露8080、50000兩個埠。
1、創建 Service & Deployment 部署文件
jenkins-deployment.yaml
apiVersion: v1 kind: Service metadata: name: jenkins labels: app: jenkins spec: type: NodePort ports: - name: http port: #服務埠 targetPort: nodePort: #NodePort方式暴露 Jenkins 埠 - name: jnlp port: #代理埠 targetPort: nodePort: selector: app: jenkins --- apiVersion: apps/v1 kind: Deployment metadata: name: jenkins labels: app: jenkins spec: selector: matchLabels: app: jenkins replicas: template: metadata: labels: app: jenkins spec: serviceAccountName: jenkins-admin containers: - name: jenkins image: registry.cn-shanghai.aliyuncs.com/mydlq/jenkins:2.172 securityContext: runAsUser: #設置以ROOT用戶運行容器 privileged: true #擁有特權 ports: - name: http containerPort: - name: jnlp containerPort: resources: limits: memory: Gi cpu: "1000m" requests: memory: Gi cpu: "500m" env: - name: LIMITS_MEMORY valueFrom: resourceFieldRef: resource: limits.memory divisor: Mi - name: "JAVA_OPTS" #設置變數,指定時區和 jenkins slave 執行者設置 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 " - name: "JENKINS_OPTS" value: "--prefix=/jenkins" #設置路徑前綴加上 Jenkins volumeMounts: #設置要掛在的目錄 - name: data mountPath: /var/jenkins_home volumes: - name: data persistentVolumeClaim: claimName: jenkins #設置PVC
參數說明:
- JAVA_OPTS: JVM 參數設置
- JENKINS_OPTS: Jenkins 參數設置
- 設置執行任務時候不等待:
默認情況下,Jenkins生成代理是保守的。例如,如果隊列中有兩個構建,它不會立即生成兩個執行器。它將生成一個執行器,並等待某個時間釋放第一個執行器,然後再決定生成第二個執行器。Jenkins確保它生成的每個執行器都得到了最大限度的利用。如果你想覆蓋這個行為,並生成一個執行器為每個構建隊列立即不等待,所以在Jenkins啟動時候添加這些參數:
- -Dhudson.slaves.NodeProvisioner.initialDelay=0
- -Dhudson.slaves.NodeProvisioner.MARGIN=50
- -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
2、部署 Jenkins
執行 Kuberctl 命令將 Jenkins 部署到 Kubernetes 集群。
注意:將「-n」後面的 namespace 換成你自己的 namespace
- -n:指定應用啟動的 namespace
$ kubectl create -f jenkins-deployment.yaml -n mydlqcloud
五、獲取 Jenkins 生成的 Token
在安裝 Jenkins 時候,它默認生成一段隨機字元串,用於安裝驗證。這裡訪問它的安裝日誌,獲取它生成的 Token 字元串。
(1)、查看 Jenkins Pod 啟動日誌
注意:這裡「-n」指的是要 namespace,後面跟的 namespace 請替換成你jenkins 啟動的 namespace
$ kubectl log $(kubectl get pods -n mydlqcloud | awk '{print $1}' | grep jenkins) -n mydlqcloud
(2)、查看日誌中生成的 Token 字元串
查看日誌,默認給的token為:
************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 3b3e0dda9d6746358ade987775f924ef This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* ************************************************************* *************************************************************
六、啟動 Jenkins 進行安裝
輸入集群地址和 Jenkins Service 提供的 NodePort 埠,訪問 Jenkins 進行安裝步驟,可以按下一步步執行:
1、進入Jenkins
輸入集群地址和上面設置的Nodeport方式的埠 32001,然後輸入上面獲取的 Token 字元串。例如,本人的集群IP為 192.168.2.11 ,所以就可以訪問 http://192.168.2.11:32001/jenkins ,進入後可以看到下面的介面。

2、安裝插件
選擇自定義插件來進行安裝

安裝一些常用的插件,這裡可以選擇一下,推薦安裝下面插件。




確定後可以看到正在安裝插件介面

3、設置用戶名、密碼

然後進入 Jenkins 介面

七、其他
1、插件因網路問題安裝失敗
如果 Jenkins 安裝插件失敗,則可以按一下設置
- (1)、進入地址 http://192.168.2.11:32001/jenkins/pluginManager/advanced
- (2)、將最下面的 Update Site 的 URL 地址替換成:http://mirror.esuni.jp/jenkins/updates/update-center.json
- (3)、點「submit」按鈕,然後點右下角角 「check now」
- (4)、然後輸入地址 http://192.168.2.11:32001/jenkins/restart 重啟 jenkins 後再重新安裝插件
PS:上面地址替換成你們的集群地址及埠。

