> 歡迎關注個人博客:http://www.mydlq.clubnode
系統環境:json
在 Kubenetes 環境下所起的應用都是一個個 Docker 鏡像,爲了保證應用重啓的狀況下數據安全,因此須要將 Jenkins 持久化到存儲中。這裏用的是 NFS 網路存儲,方便在 Kubernetes 環境下應用啓動節點轉義數據一致。固然也能夠選擇存儲到本地,可是爲了保證應用數據一致,須要設置 Jenkins 固定到某一 Kubernetes 節點。api
詳情請看 CentOS7 搭建 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
建立 PV 綁定 NFS 建立的 Jenkins 目錄,而後建立 PVC 綁定這個 PV,將此 PVC 用於後面建立 Jenkins 服務時掛載的存儲。app
(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
(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
此 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
這裏開始部署 Jenkins 服務,建立 Service 與 Deployment,其中 Service 暴露兩個接口 80880 與 50000。而 Deployment 裏面要注意的是要設置上面建立的 ServiceAccount ,而且設置容器安全策略爲「runAsUser: 0」以 Root 權限運行容器,並且暴露8080、50000兩個端口。
(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
(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
參數說明:
默認狀況下,Jenkins生成代理是保守的。例如,若是隊列中有兩個構建,它不會當即生成兩個執行器。它將生成一個執行器,並等待某個時間釋放第一個執行器,而後再決定生成第二個執行器。Jenkins確保它生成的每一個執行器都獲得了最大限度的利用。若是你想覆蓋這個行爲,並生成一個執行器爲每一個構建隊列當即不等待,因此使用這些標誌在Jenkins啓動:
(2)、建立 RBAC 命令
$ kubectl create -f jenkins-deployment.yaml
在安裝 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 ************************************************************* ************************************************************* *************************************************************
輸入集羣地址和 Jenkins Service 提供的 NodePort 端口,訪問 Jenkins 進行安裝步驟,能夠按下一步步執行:
輸入集羣地址和上面設置的Nodeport方式的端口 32001,而後輸入上面獲取的 Token 字符串。例如,本人的集羣IP爲 192.168.2.11 ,因此就能夠訪問 http://192.168.2.11:32001/jenkins ,進入後能夠看到下面的界面。
選擇自定義插件來進行安裝
安裝一些經常使用的插件,這裏能夠選擇一下,推薦安裝下面插件。
肯定後能夠看到正在安裝插件界面
而後進入 Jenkins 界面
若是 Jenkins 安裝插件失敗,則能夠按一下設置
> PS:上面地址替換成大家的集羣地址及端口。
> 歡迎關注個人博客:http://www.mydlq.club