在 Kubernetes 上安裝 Jenkins

CI/CD(持續集成/持續部署)是 DevOps 世界的核心概念。 它幫助我們自動化軟件開發過程:構建、測試和部署源代碼。

在眾多 CI/CD 工具中,Jenkins 是最著名的開源工具之一,可幫助建立持續集成和持續部署的管道。

本教程將向您展示在 Kubernetes 集群上安裝 Jenkins 的方法。

準備 Kubernetes 集群

有很多方法可以設置 Kubernetes 集群。 您可以使用公共雲服務在 AWS、GCP、Linode 等上配置您自己的集群。此外,最簡單的方法是在您的本地機器上安裝 minikube。

在這裡,我有一個使用 kubespray 配置的具有 5 個節點的 Kubernetes 集群。

$ kubectl get node

Kubernetes集群

安裝詹金斯

首先,我們將創建一個新的命名空間,以提供控制 CI 環境的隔離機制:

$ kubectl create namespace jenkins
namespace/jenkins created

通過運行以下命令驗證命名空間 jenkins 是否已成功創建:

$ kubectl get namespaces

命名空間詹金斯命名空間詹金斯

然後,讓我們創建 Jenkins 部署。 您可以使用以下清單文件來創建 Jenkins 的單實例部署。

創建文件`jenkins-deployment.yaml`:

apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
volumeMounts:
- name: jenkins-vol
mountPath: /var/jenkins_vol
volumes:
- name: jenkins-vol
emptyDir: {}

使用 Docker 鏡像 `jenkins/jenkins:lts` 並公開端口 `8080` 和 `50000` 的部署。

應用上述清單:

$ kubectl create -f jenkins-deployment.yaml --namespace jenkins

拉取鏡像 jenkins/jenkins:lts 並讓 pod 運行需要幾分鐘時間。 驗證 Jenkins 部署是否成功部署:

$ kubectl get pod -n jenkins

NAME READY STATUS RESTARTS AGE
jenkins-deployment-794699f9bc-rln7x 1/1 Running 0 66s

部署 Jenkins 服務

創建 Jenkins 部署並且 Jenkins pod 正在運行後,您必須使用服務公開與正在運行的 pod 的連接。 在本教程中,我們將使用 NodePort 和 ClusterIP 服務。

讓我們創建文件 jenkins-svc.yaml 如下:

apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: jenkins

---
apiVersion: v1
kind: Service
metadata:
name: jenkins-jnlp
spec:
type: ClusterIP
ports:
- port: 50000
targetPort: 50000
selector:
app: jenkins

現在,應用上述清單並在命名空間 `jenkins` 中創建服務:

$ kubectl create -f jenkins-svc.yaml --namespace jenkins

驗證服務是否正在運行:

$ kubectl get svc --namespace jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.233.2.81 8080:30000/TCP 30s
jenkins-jnlp ClusterIP 10.233.53.44 50000/TCP 30s

從現在開始,我們可以使用 NodePort 服務訪問 Jenkins 儀表板。

訪問 Jenkins 儀表板

NodePort 服務可從 Kubernetes 集群的任何工作節點上的端口“30000”訪問:

`https://worker_node_ip_address:30000`

您可以通過以下命令獲取工作節點的 IP 地址:

$ kubectl get node -o wide

NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready master 149m v1.19.2 192.168.0.111 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node2 Ready master 148m v1.19.2 192.168.0.112 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node3 Ready master 148m v1.19.2 192.168.0.113 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node4 Ready 147m v1.19.2 192.168.0.114 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node5 Ready 147m v1.19.2 192.168.0.115 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13

為了 example,讓我們打開網頁瀏覽器並轉到:`https://192.168.0.111:30000`

詹金斯設置管理員密碼Jenkins 設置管理員密碼

為了檢索管理員密碼,您可以運行以下命令:

$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins

獲取 jenkins 管理員密碼獲取 jenkins 管理員密碼

Enter 管理員密碼然後按照接下來的設置步驟,您將成功訪問 Jenkins 儀表板。

詹金斯歡迎頁面詹金斯歡迎頁面

結論

Jenkins 是一款非常強大的 CI/CD 工具,適用於任何 DevOps 工程師和軟件開發人員。 本教程完成了在 Kubernetes 集群上部署 Jenkins 的所有步驟。 感謝 Jenkins,我們將提高工作效率,並幫助我們減少構建、測試和部署代碼的時間。

感謝您的閱讀,請在下面的評論部分留下您的建議。