溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在K8S中安裝jenkins

發(fā)布時間:2020-11-05 17:15:33 來源:億速云 閱讀:271 作者:小新 欄目:開發(fā)技術(shù)

如何在K8S中安裝jenkins?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

以 NFS 為存儲卷的示例,將在 NFS 存儲卷上創(chuàng)建 Jenkins 目錄,然后創(chuàng)建 NFS 類型的 PV、PVC。

1、NFS 存儲卷創(chuàng)建 Jenkins 目錄

進(jìn)入 NFS Server 服務(wù)器,然后再其存儲目錄下創(chuàng)建 Jenkins 目錄,并且確保目錄對其它用戶有讀寫權(quán)限。

$ mkdir /nfs/data/jenkins

2、創(chuàng)建 Jenkins 用于存儲的 PV、PVC

創(chuàng)建 Kubernetes 的 PV、PVC 資源,其中 PV 用于與 NFS 關(guān)聯(lián),需要設(shè)置 NFS Server 服務(wù)器地址和掛載的路徑,修改占用空間大小。而 PVC 則是與應(yīng)用關(guān)聯(lián),方便應(yīng)用與 NFS 綁定掛載,下面是 PV、PVC 的資源對象 yaml 文件。

jenkins-storage.yaml

apiVersion: v1kind: PersistentVolumemetadata:
  name: jenkins
  labels:
    app: jenkinsspec:
  capacity:          
    storage: 50Gi
  accessModes:       
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain  
  mountOptions:         #NFS掛載選項
    - hard
    - nfsvers=4.1    
  nfs:                  #NFS設(shè)置
    path: /nfs/data/jenkins   # 根據(jù)上一步的地址來定
    server: 192.168.2.11   # 根據(jù)nfs server ip實際來設(shè)置---kind: PersistentVolumeClaimapiVersion: v1metadata:
  name: jenkinsspec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi     #存儲空間大小
  selector:
    matchLabels:
      app: jenkins

將 PV 與 PVC 部署到 Kubernetes 中:

  • -n:指定 namespace
$ kubectl apply -f jenkins-storage.yaml -n public

3、創(chuàng)建 ServiceAccount & ClusterRoleBinding

Kubernetes 集群一般情況下都默認(rèn)開啟了 RBAC 權(quán)限,所以需要創(chuàng)建一個角色和服務(wù)賬戶,設(shè)置角色擁有一定權(quán)限,然后將角色與 ServiceAccount 綁定,最后將 ServiceAccount 與 Jenkins 綁定,這樣來賦予 Jenkins 一定的權(quán)限,使其能夠執(zhí)行一些需要權(quán)限才能進(jìn)行的操作。這里為了方便,將 cluster-admin 綁定到 ServiceAccount 來保證 Jenkins 擁有足夠的權(quán)限。

  • 注意: 請修改下面的 Namespace 參數(shù),改成部署的 Jenkins 所在的 Namespace。

jenkins-rbac.yaml

apiVersion: v1kind: ServiceAccountmetadata:
  name: jenkins-admin       #ServiceAccount名
  namespace: mydlqcloud     #指定namespace,一定要修改成你自己的namespace
  labels:
    name: jenkins---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:
  name: jenkins-admin
  labels:
    name: jenkinssubjects:
  - kind: ServiceAccount
    name: jenkins-admin
    namespace: mydlqcloudroleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

將 Jenkins 的 RBAC 部署到 Kubernetes 中:

  • -n:指定 namespace
$ kubectl apply -f jenkins-rbac.yaml -n public

4、創(chuàng)建 Service & Deployment

在 Kubernetes 中部署服務(wù)需要部署文件,這里部署 Jenkins 需要創(chuàng)建 Service 與 Deployment 對象,其中兩個對象需要做一些配置,如下:

  • Service:Service 暴露兩個接口 8080 與 50000,其中 8080 是 Jenkins API 和 UI 的端口,而 50000 則是供代理使用的端口。
  • Deployment: Deployment 中,需要設(shè)置容器安全策略為 runAsUser: 0 賦予容器以 Root 權(quán)限運行,并且暴露 8080 與 50000 兩個端口與 Service 對應(yīng),而且還要注意的是,還要設(shè)置上之前創(chuàng)建的服務(wù)賬戶 “jenkins-admin”。

jenkins-deployment.yaml

apiVersion: v1kind: Servicemetadata:
  name: jenkins
  labels:
    app: jenkinsspec:
  type: NodePort
  ports:
  - name: http
    port: 8080                      #服務(wù)端口
    targetPort: 8080
    nodePort: 32001                 #NodePort方式暴露 Jenkins 端口
  - name: jnlp
    port: 50000                     #代理端口
    targetPort: 50000
    nodePort: 32002
  selector:
    app: jenkins---apiVersion: apps/v1kind: Deploymentmetadata:
  name: jenkins
  labels:
    app: jenkinsspec:
  selector:
    matchLabels:
      app: jenkins
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccountName: jenkins-admin
      containers:
      - name: jenkins
        image: jenkins/jenkins:2.204.6
        securityContext:                     
          runAsUser: 0                      #設(shè)置以ROOT用戶運行容器
          privileged: true                  #擁有特權(quán)
        ports:
        - name: http
          containerPort: 8080
        - name: jnlp
          containerPort: 50000
        resources:
          limits:
            memory: 2Gi
            cpu: "2000m"
          requests:
            memory: 2Gi
            cpu: "2000m"
        env:
        - name: LIMITS_MEMORY
          valueFrom:
            resourceFieldRef:
              resource: limits.memory
              divisor: 1Mi
        - name: "JAVA_OPTS"                 #設(shè)置變量,指定時區(qū)和 jenkins slave 執(zhí)行者設(shè)置
          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"         #設(shè)置路徑前綴加上 Jenkins
        volumeMounts:                        #設(shè)置要掛在的目錄
        - name: data
          mountPath: /var/jenkins_home
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: jenkins                 #設(shè)置PVC

參數(shù)說明:

  • JAVA_OPTS: JVM 參數(shù)設(shè)置
  • JENKINS_OPTS: Jenkins 參數(shù)設(shè)置
  • 其它參數(shù): 默認(rèn)情況下,Jenkins 生成代理是保守的。例如,如果隊列中有兩個構(gòu)建,它不會立即生成兩個執(zhí)行器。它將生成一個執(zhí)行器,并等待某個時間釋放第一個執(zhí)行器,然后再決定生成第二個執(zhí)行器。Jenkins 確保它生成的每個執(zhí)行器都得到了最大限度的利用。如果你想覆蓋這個行為,并生成一個執(zhí)行器為每個構(gòu)建隊列立即不等待,所以在 Jenkins 啟動時候添加這些參數(shù):
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85

有了上面的部署文件后,再將 Jenkins 部署到 Kuberntes 中:

  • -n:指定應(yīng)用啟動的 namespace
$ kubectl create -f jenkins-deployment.yaml -n mydlqcloud

5、獲取 Jenkins 生成的 Token

在安裝 Jenkins 時候,它默認(rèn)生成一段隨機字符串在控制臺日志中,用于安裝時驗證。這里需要獲取它輸出在控制臺中的日志信息,來獲取 Token 字符串。

查看 Jenkins Pod 啟動日志

  • -n:指定應(yīng)用啟動的 namespace
$ kubectl logs $(kubectl get pods -n mydlqcloud | awk '{print $1}' | grep jenkins) -n mydlqcloud

在日志中可以看到,默認(rèn)給的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:

96b19967a2aa4e7ab7d2ea5c6f55db8d

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword*************************************************************

6、啟動 Jenkins 進(jìn)行初始化

輸入 Kubernetes 集群地址和 Jenkins Service 設(shè)置的 NodePort 端口號,訪問 Jenkins UI 界面進(jìn)行初始化,按以下步驟執(zhí)行:

進(jìn)入Jenkins

輸入 Kubernetes 集群地址和上面設(shè)置的 Nodeport 方式的端口號 32001,然后輸入上面獲取的 Token 字符串。例如,本人 Kubernetes 集群 IP 為 192.168.2.11 ,所以就可以訪問地址 http://192.168.2.11:32001/jenkins 進(jìn)入 Jenkins 初始化界面。

感謝各位的閱讀!看完上述內(nèi)容,你們對如何在K8S中安裝jenkins大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI