使用 Kubernetes Helm 安裝 Drone


我們知道 CI/CD 是 devops 中最重要的環節,特別是對於現在的雲原生應用,CI/CD 更是不可或缺的部分,對於 CI/CD 工具有很多優秀的開源工具,比如前面我們介紹的Jenkins以及gitlab ci都是非常流行常用的 CI/CD 工具,但是這兩個工具整體使用來說有點陳舊和笨重,本文將為大家介紹一個比較熱門的輕量級 CI/CD 開源工具:Drone,介紹如何將 Drone 和 Kubernetes 進行結合使用。

本篇文章是 Drone 系列文章中的第一篇文章,需要有一定的 Kubernetes 基礎知識,我們將通過 Helm 在 Kubernetes 集群上面安裝 Drone,如果你已經有運行在 K8S 集群上面的 Drone 應用,則可以忽略本文內容。

環境

本次 Drone 系列文章使用到的應用相關版本如下:(不保證其他版本一定兼容)

  • Drone:1.2
  • Kubectl 和 Kubernetes:v1.14.2
  • Helm CLI 和 Tiller: v2.14.1
  • Docker: 18.09.1
  • Golang: 1.11.4

Drone

Drone 是用 Go 語言編寫的基於 Docker 構建的開源輕量級 CI/CD 工具,可以通過 SaaS 服務和自托管服務兩種方式使用,Drone 使用簡單的 YAML 配置文件來定義和執行 Docker 容器中定義的 Pipeline,Drone 由兩個部分組成:

  • Server端負責身份認證,倉庫配置,用戶、Secrets 以及 Webhook 相關的配置。
  • Agent端用於接受構建的作業和真正用於運行的 Pipeline 工作流。

Server 和 Agent 都是非常輕量級的服務,大概只使用 10~15MB 內存,所以我們也可以很輕松的運行在筆記本、台式機甚至是 Raspberry PI 上面。

要安裝 Drone 是非常簡單的,官方文檔中提供了 Drone 集成 GitHub、GitLab、Gogs 等等的文檔,可以直接部署在單節點、多個節點和 Kubernetes 集群當中。

安裝

這里我們使用 Helm Chart 官方倉庫中包含的 Chart 包:https://github.com/helm/charts/tree/master/stable/drone,文檔中有詳細的使用說明。由於 Drone 需要和代碼倉庫進行連接,如果沒有配置,則無法啟動,我們這里將結合 GitHub 和 Drone 使用,首先需要先在 GitHub 中注冊一個新的 OAuth 應用程序,登錄 GitHub,進入頁面https://github.com/settings/applications/new,添加如下信息:

github new oauth applicationgithub new oauth application

創建完成后會獲得用於配置 Drone 的 ClientID 和 ClientSecret,記錄這兩個值,然后創建一個名為 drone-values.yaml 的文件,通過覆蓋 values.yaml 中的 values 值來自定義 Drone,內容如下:

ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: 'true' hosts: - drone.k8stech.net tls: - secretName: drone-tls hosts: - drone.k8stech.net sourceControl: provider: github github: clientID: 上面獲得的ClientID值 clientSecretKey: clientSecret clientSecretValue: 上面獲得的ClientSecret值 server: https://github.com server: adminUser: cnych # github 的用戶名 ## Configures drone to use kubernetes to run pipelines rather than agents, if enabled ## will not deploy any agents. kubernetes: ## set to true if you want drone to use kubernetes to run pipelines enabled: true persistence: enabled: true existingClaim: dronepvc

我們通過 Ingress 對象來暴露 Drone 服務,而且還配置了一個kubernetes.io/tls-acme: 'true'的 annotation,這個是因為我們集群中安裝了 Cert-Manager,所以我們可以自動化 https,同樣可以參考前面的文章使用 Let’s Encrypt 實現 Kubernetes Ingress 自動化 HTTPS,另外設置server.adminUser我們 GitHub 的用戶名,這樣我們登錄后就具有管理員權限了,另外比較重要的server.kubernetes.enabled=true,將該參數設置為 true,則運行 Drone 的任務的時候就是直接使用 Kubernetes 的 Job 資源對象來執行,而不是 Drone 的 agent,這樣設置為 true 后,安裝完成后,就沒有 drone agent 了,最后通過指定 persistence.existingClaim 指定了一個 PVC 來用於數據持久化,所以在安裝之前需要先創建 dronepvc 這個 PVC 對象(volume.yaml):

apiVersion: v1 kind: PersistentVolume metadata: name: dronepv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain nfs: server: 10.151.30.11 path: /data/k8s --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: dronepvc namespace: kube-ops spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi

然后通過上面自定義的 values 文件來安裝 Drone:

$ kubectl apply -f volume.yaml
$ helm repo update
$ helm install --name drone \ --namespace kube-ops \ -f drone-values.yaml \ stable/drone Release "drone" has been installed. Happy Helming! LAST DEPLOYED: Mon Aug 5 23:35:22 2019 NAMESPACE: kube-ops STATUS: DEPLOYED RESOURCES: ==> v1/ServiceAccount NAME SECRETS AGE drone-drone-pipeline 1 18d drone-drone 1 18d ==> v1/RoleBinding NAME AGE drone-drone 18d ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE drone-drone-server 1 1 1 0 18d ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE drone-drone drone.k8stech.net 80, 443 18d ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE drone-drone-server-6f66b47dc-69qmf 0/1 ContainerCreating 0 0s ==> v1/Secret NAME TYPE DATA AGE drone-drone-source-control Opaque 1 18d drone-drone Opaque 1 18d ==> v1/ClusterRole NAME AGE drone-drone-pipeline 18d ==> v1/ClusterRoleBinding NAME AGE drone-drone-pipeline 18d ==> v1/Role NAME AGE drone-drone 18d ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE drone-drone ClusterIP 10.105.20.182 <none> 80/TCP 18d NOTES: ********************************************************************************* *** PLEASE BE PATIENT: drone may take a few minutes to install *** ********************************************************************************* From outside the cluster, the server URL(s) are: http://drone.k8stech.net

注意我們這里使用的 Drone Chart 版本是drone-2.0.5,不同的版本配置略有不同,注意查看文檔。

安裝完成后,可以查看對應的 Pod 狀態:

$ kubectl get pods -n kube-ops -l app=drone NAME READY STATUS RESTARTS AGE drone-drone-server-6f66b47dc-69qmf 1/1 Running 0 96s

最后需要做的就是給域名 drone.k8stech.net 添加上 DNS 解析,我們這里是一個正常的域名,直接解析到 nginx-ingress Pod 的任意一個節點即可,如果你是自定義的域名記住在你要訪問 drone 的節點上的 /etc/hosts 中添加上域名隱射。

在瀏覽器中訪問 drone.k8stech.net,正常這個時候就會跳轉到 GitHub 進行認證登錄,認證后會將 GitHub 的代碼倉庫同步到 Drone 來,也可以手動同步代碼倉庫:

drone indexdrone index

點擊項目右邊的ACTIVATE激活,進入項目中也可以根據自己的需求進行配置:

drone project settingsdrone project settings

到這里我們就通過 Helm 成功安裝了 Drone,下一篇文章再和大家探討如何使用 Drone 的 Pipeline 來進行 CI/CD

 

轉於:https://www.qikqiak.com/post/drone-with-k8s-1/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM