kubernetes 安裝 Jenkins


> 歡迎關注個人博客:http://www.mydlq.clubnode


系統環境:json

  • kubernetes 版本:1.14.0
  • jenkins 版本:2.172

1、設置存儲目錄

在 Kubenetes 環境下所起的應用都是一個個 Docker 鏡像,爲了保證應用重啓的狀況下數據安全,因此須要將 Jenkins 持久化到存儲中。這裏用的是 NFS 網路存儲,方便在 Kubernetes 環境下應用啓動節點轉義數據一致。固然也能夠選擇存儲到本地,可是爲了保證應用數據一致,須要設置 Jenkins 固定到某一 Kubernetes 節點。api

一、安裝 NFS 服務端

詳情請看 CentOS7 搭建 nfs 服務器 ,這裏不過多敘述。安全

二、掛載 NFS 並設置存儲文件夾

若是不能直接操做 NFS 服務端建立文件夾,須要知道 NFS 服務器地址,而後將其掛在到本地目錄,進入其中建立 Jenkins 目錄空間。bash

(1)、掛載 NFS服務器

mount -o vers=4.1 192.168.2.11:/nfs/ /nfs

(2)、建立 Jenkins 存儲文件夾網絡

mkdir -p /nfs/data/jenkins

2、建立 PV & PVC

建立 PV 綁定 NFS 建立的 Jenkins 目錄,而後建立 PVC 綁定這個 PV,將此 PVC 用於後面建立 Jenkins 服務時掛載的存儲。app

一、建立 PV

(1)、jenkins-pv.yamlui

apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins
spec:
  capacity:          
    storage: 2Gi
  accessModes:       
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain  
  mountOptions:   #NFS掛在選項
    - hard
    - nfsvers=4.1    
  nfs:            #NFS設置
    path: /nfs/data/jenkins   
    server: 192.168.2.11

(2)、建立 PV 命令spa

$ kubectl create -f jenkins-pv.yaml

二、建立 PVC

(1)、jenkins-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins
  namespace: mydlqcloud     #PV是全局的,而PVC是跟namespace綁定的,因此須要指定namespace
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  selector:
    name: jenkins

(2)、建立 PVC 命令

$ kubectl create -f jenkins-pvc.yaml

3、建立 ServiceAccount & ClusterRoleBinding

此 kubernetes 集羣用的是 RBAC 安全插件,必須建立權限給一個 ServiceAccount,而後將此 ServiceAccount 綁定到 Jenkins 服務,這樣賦予 Jenkins 服務必定權限執行一些操做。

(1)、jenkins-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin       #ServiceAccount名
  namespace: mydlqcloud     #指定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

> 這裏將 cluster-admin 綁定到 ServiceAccount 以保證 Jenkins 能擁有必定的權限。

(2)、建立 RBAC 命令

$ kubectl create -f jenkins-rbac.yaml

4、建立 Service && Deployment

這裏開始部署 Jenkins 服務,建立 Service 與 Deployment,其中 Service 暴露兩個接口 80880 與 50000。而 Deployment 裏面要注意的是要設置上面建立的 ServiceAccount ,而且設置容器安全策略爲「runAsUser: 0」以 Root 權限運行容器,並且暴露8080、50000兩個端口。

一、建立 Service

(1)、jenkins-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: mydlqcloud    #指定namespace
  labels:
    name: jenkins
spec:
  type: NodePort
  ports:
  - name: http
    port: 8080          #服務端口
    targetPort: 8080
    nodePort: 32001
  - name: jnlp
    port: 50000         #代理端口
    targetPort: 50000
    nodePort: 32002
  selector:
    name: jenkins

(2)、建立 RBAC 命令

$ kubectl create -f jenkins-service.yaml

二、建立 Deployment

(1)、jenkins-deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: mydlqcloud  #指定namespace
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: jenkins
    spec:
      serviceAccountName: jenkins-admin
      containers:
      - name: jenkins
        image: registry.cn-shanghai.aliyuncs.com/mydlq/jenkins:2.172
        securityContext:                     
          runAsUser: 0       #設置以ROOT用戶運行容器
          privileged: true   #擁有特權
        ports:
        - name: http
          containerPort: 8080
        - name: jnlp
          containerPort: 50000
        resources:
          limits:
            memory: 2Gi
            cpu: "1200m"
          requests:
            memory: 1Gi
            cpu: "1000m"
        env:
        - name: "JAVA_OPTS"  #設置變量,指定時區和 jenkins slave 執行者設置
          value: " 
                   -Duser.timezone=Asia/Shanghai
                   -Dhudson.slaves.NodeProvisioner.initialDelay=0
                   -Dhudson.slaves.NodeProvisioner.MARGIN=50
                   -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                 "    
        - 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)、建立 RBAC 命令

$ kubectl create -f jenkins-deployment.yaml

5、獲取 Jenkins 生成的 Token

在安裝 Jenkins 時候,它默認生成一段隨機字符串,用於安裝驗證。這裏訪問它的安裝日誌,獲取它生成的 Token 字符串。

(1)、查看 Jenkins Pod 啓動日誌

kubectl log $(kubectl get pods -n mydlqcloud | awk '{print $1}' | grep jenkins) -n mydlqcloud

> 這裏「-n」指的是要 namespace,後面跟的 namespace 請替換成你jenkins 啓動的 namespace

(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
*************************************************************
*************************************************************
*************************************************************

6、啓動 Jenkins 進行安裝

輸入集羣地址和 Jenkins Service 提供的 NodePort 端口,訪問 Jenkins 進行安裝步驟,能夠按下一步步執行:

一、進入Jenkins

輸入集羣地址和上面設置的Nodeport方式的端口 32001,而後輸入上面獲取的 Token 字符串。例如,本人的集羣IP爲 192.168.2.11 ,因此就能夠訪問 http://192.168.2.11:32001/jenkins ,進入後能夠看到下面的界面。

二、安裝插件

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

安裝一些經常使用的插件,這裏能夠選擇一下,推薦安裝下面插件。

肯定後能夠看到正在安裝插件界面

三、設置用戶名、密碼

而後進入 Jenkins 界面

7、其餘

一、插件因網絡問題安裝失敗

若是 Jenkins 安裝插件失敗,則能夠按一下設置

> PS:上面地址替換成大家的集羣地址及端口。


> 歡迎關注個人博客:http://www.mydlq.club

相關文章
相關標籤/搜索