KubeSphere DevOps 初體驗,內置 Jenkins 引擎

KubeSphere 是在 Kubernetes 之上構建的以應用爲中心的多租戶容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工做流。KubeSphere 提供了運維友好的嚮導式操做界面,幫助企業快速構建一個強大和功能豐富的容器雲平臺。KubeSphere 支持部署在任何基礎設施環境,提供在線與離線安裝,支持一鍵升級與擴容集羣,而且各功能組件支持模塊化和可插拔的安裝。

解讀 KubeSphere Devops

KubeSphere DevOps 做爲 KubeSphere 容器平臺的一個可插拔功能組件,內置了 Jenkins 做爲在 Kubernetes 之上的 CI/CD 引擎。藉助 Jenkins 豐富的插件體系和易於進行擴展開發的特性,幫助 DevOps 團隊在一個統一的平臺中,打通開發、測試、構建、部署、監控、日誌與通知等流程。KubeSphere 爲 DevOps 團隊打造了以容器爲載體的端到端的應用交付平臺,實現從應用開發、持續集成、單元測試、製品構建到應用的生產交付,全部的流程都是一個完整的閉環。node

KubeSphere DevOps 充分利用和釋放 Kubernetes 動態擴展的能力。例如,KubeSphere 在內置的 DevOps 系統使用了 Jenkins Kubernetes 的動態 Agent,這樣的方案相較於傳統虛擬機上的 Jenkins 要更加靈活敏捷。同時,在 KubeSphere DevOps 中內置了經常使用的 Agent 類型,例如 Maven、Node.js、Go 等,而且還支持自定義與擴展的 Agent 類型。linux


除了基於 Jenkins 引擎打造的 CI/CD 流水線,KubeSphere 還爲業務開發者提供了自動化打包部署的工具集。業務開發者即便尚未深刻了解 Docker 與 Kubernetes 的機制,也能夠藉助 KubeSphere 內置的自動化 CD 工具,如 Binary to Image 和 Source to Image。用戶只須要提交一個倉庫地址,或上傳 JAR/WAR/Binary 等二進制文件,便可快速將製品打包成 Docker 鏡像併發布到鏡像倉庫,最終將服務自動發佈至 Kubernetes 中,無需編寫一行 Dockerfile。nginx

關於 KubeSphere DevOps 更多的介紹,能夠參考 KubeSphere 官網得到更進一步的瞭解。git

https://kubesphere.io/devops/github

安裝 KubeSphere 開啓 Devops 組件

如下步驟將基於 Kubernetes 集羣演示如何安裝 KubeSphere v2.1.1,並開啓 KubeSphere DevOps 組件。web

  // 前提條件 //  

① 已有 Kubernetes 集羣,而且 Kubernetes 版本: 1.15.x ≤ K8s version ≤ 1.17.x。若沒有 K8s 環境可參考文檔(https://kubesphere.com.cn/docs/zh-CN/installation/all-in-one/)在 Linux 環境安裝;sql

② 集羣可以訪問外網,若無外網請參考 在 Kubernetes 離線安裝 KubeSphere,地址 https://kubesphere.com.cn/docs/installation/install-on-k8s-airgapped/typescript

  // 安裝 Helm 和 Tiller //  

提示:若集羣已有 Helm 和 Tiller,可跳過本節操做。shell

  1. 從 Helm 的 GitHub https://github.com/helm/helm/releases/tag/v2.16.3 下載 helm-v2.16.3-linux-amd64.tar.gz。json

  2. 上傳到服務器,解壓移動 Helm、Tiller 到 /usr/local/bin/:

[root@k8s-node1 linux-amd64]# cp helm /usr/local/bin/[root@k8s-node1 linux-amd64]# cp tiller /usr/local/bin/
驗證 Helm 的安裝:
helm help

建立權限:建立一個新的文件 helm_rbac.yaml,內容以下:

apiVersion: v1kind: ServiceAccountmetadata: name: tiller namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: tillerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects: - kind: ServiceAccount name: tiller namespace: kube-system

而後使用 kubectl 使其建立生效。

[root@k8s-node1 k8s]# kubectl apply -f helm_rbac.yamlserviceaccount/tiller createdclusterrolebinding.rbac.authorization.k8s.io/tiller created
初始化 Helm,這裏用的國內的鏡像源。
helm init --service-account=tiller --tiller-image=registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.3 --history-max 300

驗證 Helm Tiller。若是狀態是 ImagePullBackOff,表示鏡像未拉取成功,須要手動拉取。

kubectl -n kube-system get pods|grep tiller

檢查 Tiller 是否部署到 Kubernetes:

[root@k8s-node1 local]# kubectl get pod -n kube-system -l app=helmNAME READY STATUS RESTARTS AGEtiller-deploy-7b76b656b5-m4k2x 1/1 Running 0 94s

  // 安裝持久化存儲與 Storageclass //  

提示:- 若您的集羣已有持久化存儲與 StorageClass,可跳過本小節 - OpenEBS 將使用 LocalPV 做爲存儲卷,僅建議用做開發測試環境,生產環境建議使用如 Ceph、GlusterFS 等獨立的分佈式存儲服務 - 安裝以前,請確保 master 節點沒有 Taints (待安裝完 KubeSphere 以後再添加 Taints)

確認 master 節點是否有 Taint,以下看到 master 節點有 Taint。

$ kubectl describe node master | grep TaintTaints: node-role.kubernetes.io/master:NoSchedule
掉 master 節點的 Taint:
$ kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-
建立 OpenEBS 的 namespace,OpenEBS 相關資源將建立在這個 namespace 下:
$ kubectl create ns openebs
安裝 OpenEBS
helm inithelm install --namespace openebs --name openebs stable/openebs --version 1.5.

安裝 OpenEBS 後將自動建立 4 個 StorageClass,查看建立的 StorageClass:

$ kubectl get scNAME PROVISIONER AGEopenebs-device openebs.io/local 10hopenebs-hostpath openebs.io/local 10hopenebs-jiva-default openebs.io/provisioner-iscsi 10hopenebs-snapshot-promoter volumesnapshot.external-storage.k8s.io/snapshot-promoter 10h

以下將 openebs-hostpath 設置爲 默認的 StorageClass:

$ kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'storageclass.storage.k8s.io/openebs-hostpath patched
至此,OpenEBS 的 LocalPV 已做爲默認的存儲類型建立成功。能夠經過命令 kubectl get pod -n openebs 來查看 OpenEBS 相關 Pod 的狀態,若 Pod 的狀態都是 running,則說明存儲安裝成功。

  // Kubectl 安裝 KubeSphere //  


當 Kubernetes 集羣知足前提條件,實際上安裝 KubeSphere 的步驟很是簡單,僅一條命令。根據集羣資源狀況,使用 kubectl 安裝 KubeSphere。


若集羣可用 CPU > 1 Core 且可用內存 > 2 G,可使用如下命令最小化安裝 KubeSphere:


kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-minimal.yaml

提示:若您的服務器提示沒法訪問 GitHub,可將 kubesphere-minimal.yaml 從 GitHub 地址 https://github.com/kubesphere/ks-installer/ 拷貝文件保存到本地做爲本地的靜態文件,再參考上述命令進行安裝。

  // 驗證訪問 //  


查看滾動刷新的安裝日誌,請耐心等待安裝成功。

$ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

說明:安裝過程當中若遇到問題,也能夠經過以上日誌命令來排查問題。

經過 kubectl get pod --all-namespaces 查看 KubeSphere 相關 namespace 下全部 Pod 狀態是否爲 Running。確認 Pod 都正常運行後,可以使用 IP:30880 訪問 KubeSphere UI 界面,默認的集羣管理員帳號爲 admin/P@88w0rd。


登陸控制檯首頁,查看集羣狀態。


  // 開啓 KubeSphere Devops的安裝 //  


經過修改 ks-installer 的 ConfigMap 能夠選裝可插拔的功能組件,執行如下命令開啓 KubeSphere DevOps 系統:

$ kubectl edit cm -n kubesphere-system ks-installer

參考以下修改 ConfigMap

devops: enabled: True jenkinsMemoryLim: 2Gi jenkinsMemoryReq: 1500Mi jenkinsVolumeSize: 8Gi jenkinsJavaOpts_Xms: 512m jenkinsJavaOpts_Xmx: 512m jenkinsJavaOpts_MaxRAM: 2g sonarqube: enabled: True
保存退出,安裝任務將自動在後臺執行。等待幾分鐘,若看到 ks-installer 日誌返回安裝成功的日誌,便可經過如下命令來驗證 KubeSphere DevOps 系統下相關 Pod 與 Job 的狀態:
kubectl get pod -n kubesphere-devops-system
若 Pod 狀態都是 Running,而且在 KubeSphere 控制檯的服務組件看到 DevOps 相關
服務都是 健康 狀態,說明 KubeSphere DevOps 系統已成功開啓安裝


可參考以下文檔進一步上手 KubeSphere DevOps 系統的功能:

  • Binary-to-Image: 將 WAR、JAR、Binary 這一類的製品快速打包成 Docker 鏡像,併發布到鏡像倉庫中,最終將服務自動發佈至 Kubernetes,參考文檔 https://kubesphere.com.cn/docs/zh-CN/quick-start/b2i-war

  • Source-to-Image: 無需寫 Dockerfile,僅輸入源代碼地址便可自動打包成可運行程序到 Docker 鏡像的工具,方便構建鏡像發佈至鏡像倉庫和 Kubernetes,參考文檔 https://kubesphere.com.cn/docs/zh-CN/quick-start/source-to-image

  • 圖形化構建流水線: 經過圖形化編輯的界面構建流水線,無需寫 Jenkinsfile,交互友好,參考文檔 https://kubesphere.com.cn/docs/zh-CN/quick-start/jenkinsfile-out-of-scm

  • 基於 Jenkinsfile 構建流水線: 基於項目倉庫中已有的 Jenkinsfile 快速構建流水線,參考文檔 https://kubesphere.com.cn/docs/zh-CN/quick-start/devops-online

活動預告

KubeSphere 將在七月份重磅發佈 v3.0!歡迎你們關注和報名參加 6 月 30 日 (本週二下午 14:00) 的 KubeSphere 線上發佈會的直播,提早知曉 v3.0 的重大更新。


Jenkins CLI 命令行 v0.0.28

CI/CD 哪家強 - 主流開源 CI 工具對比

徵集用戶故事- Jenkins is the Way

Tekton 流水線發佈首個官方 Beta 版本

Jenkins流水線與k8s的持續集成落地分享

使用 Prometheus 和 Grafana 監控 Linux 進程

本文分享自微信公衆號 - Jenkins(Jenkins-Community)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索