如何在K8S中安裝jenkins?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的桂林網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!以 NFS 為存儲(chǔ)卷的示例,將在 NFS 存儲(chǔ)卷上創(chuàng)建 Jenkins 目錄,然后創(chuàng)建 NFS 類型的 PV、PVC。
進(jìn)入 NFS Server 服務(wù)器,然后再其存儲(chǔ)目錄下創(chuàng)建 Jenkins 目錄,并且確保目錄對(duì)其它用戶有讀寫權(quán)限。
$ mkdir /nfs/data/jenkins
創(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 的資源對(duì)象 yaml 文件。
jenkins-storage.yaml
apiVersion: v1kind: PersistentVolumemetadata: name: jenkins labels: app: jenkinsspec: capacity: storage: 50Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain mountOptions: #NFS掛載選項(xiàng) - hard - nfsvers=4.1 nfs: #NFS設(shè)置 path: /nfs/data/jenkins # 根據(jù)上一步的地址來定 server: 192.168.2.11 # 根據(jù)nfs server ip實(shí)際來設(shè)置---kind: PersistentVolumeClaimapiVersion: v1metadata: name: jenkinsspec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi #存儲(chǔ)空間大小 selector: matchLabels: app: jenkins
將 PV 與 PVC 部署到 Kubernetes 中:
$ kubectl apply -f jenkins-storage.yaml -n public
Kubernetes 集群一般情況下都默認(rèn)開啟了 RBAC 權(quán)限,所以需要?jiǎng)?chuàng)建一個(gè)角色和服務(wù)賬戶,設(shè)置角色擁有一定權(quán)限,然后將角色與 ServiceAccount 綁定,最后將 ServiceAccount 與 Jenkins 綁定,這樣來賦予 Jenkins 一定的權(quán)限,使其能夠執(zhí)行一些需要權(quán)限才能進(jìn)行的操作。這里為了方便,將 cluster-admin 綁定到 ServiceAccount 來保證 Jenkins 擁有足夠的權(quán)限。
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 中:
$ kubectl apply -f jenkins-rbac.yaml -n public
在 Kubernetes 中部署服務(wù)需要部署文件,這里部署 Jenkins 需要?jiǎng)?chuàng)建 Service 與 Deployment 對(duì)象,其中兩個(gè)對(duì)象需要做一些配置,如下:
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用戶運(yùn)行容器 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è)置變量,指定時(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ù)說明:
-Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
有了上面的部署文件后,再將 Jenkins 部署到 Kuberntes 中:
$ kubectl create -f jenkins-deployment.yaml -n mydlqcloud
在安裝 Jenkins 時(shí)候,它默認(rèn)生成一段隨機(jī)字符串在控制臺(tái)日志中,用于安裝時(shí)驗(yàn)證。這里需要獲取它輸出在控制臺(tái)中的日志信息,來獲取 Token 字符串。
查看 Jenkins Pod 啟動(dòng)日志
$ 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*************************************************************
輸入 Kubernetes 集群地址和 Jenkins Service 設(shè)置的 NodePort 端口號(hào),訪問 Jenkins UI 界面進(jìn)行初始化,按以下步驟執(zhí)行:
進(jìn)入Jenkins
輸入 Kubernetes 集群地址和上面設(shè)置的 Nodeport 方式的端口號(hào) 32001,然后輸入上面獲取的 Token 字符串。例如,本人 Kubernetes 集群 IP 為 192.168.2.11 ,所以就可以訪問地址 http://192.168.2.11:32001/jenkins 進(jìn)入 Jenkins 初始化界面。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)如何在K8S中安裝jenkins大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。