您好,登錄后才能下訂單哦!
這篇文章主要介紹“Drone怎么在kubernetes環境下打包并部署”,在日常操作中,相信很多人在Drone怎么在kubernetes環境下打包并部署問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Drone怎么在kubernetes環境下打包并部署”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. drone是一款使用 Go 開發的開源的 CI 自動構建平臺。原生 Docker 支持,kubernetes也是支持的。drone比argo, tekton更快,更簡單,比jenkins更輕量化。drone云原生概念+1,做了很多事不用考慮+1,gitlab/github能看到構建結果+1
環境:kubernetes 1.18+, helm3 參考官方
https://github.com/drone/charts
https://docs.drone.io/server/provider/gitlab/
創建namespace, 添加倉庫
kubectl create ns drone helm repo add drone https://charts.drone.io helm repo update
在gitlab中創建一個OAuth應用。Redirect URI是drone的地址并加一個/login,授權兩個api, read_user
增加一個文件drone-server-overrides.yaml
。這里使用的traefik。需要一個數據庫鏈接,默認使用的sqllite,本例使用postgres
image: tag: 1.10.1 ingress: enabled: true annotations: traefik.ingress.kubernetes.io/router.tls: "true" traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls.certresolver: aliyun traefik.ingress.kubernetes.io/router.tls.domains.0.main: drone.your_domain.com hosts: - host: drone.your_domain.com paths: - "/" env: DRONE_SERVER_HOST: drone.your_domain.com:31000 DRONE_SERVER_PROTO: https # 更新已存在并關連的gitlab帳號為admin權限,需要重啟pod,參考https://docs.drone.io/server/user/admin/ DRONE_USER_CREATE: username:your_gitlab_username,admin:true # 通過openssl rand -hex 16生成一個 DRONE_RPC_SECRET: c7a536a3af5e2809f3d0d34a71a13302 DRONE_GITLAB_CLIENT_ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DRONE_GITLAB_CLIENT_SECRET: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DRONE_GITLAB_SERVER: https://your_gitlab_url # oauth會驗證gitlab證書,如果驗證不過,需要打開 #DRONE_GITLAB_SKIP_VERIFY: true DRONE_DATABASE_DRIVER: postgres DRONE_DATABASE_DATASOURCE: postgres://postgres:password@192.168.1.10:5433/drone?sslmode=disable persistentVolume: enabled: false
創建drone server
helm install --namespace drone \ server \ drone/drone \ -f drone-server-overrides.yaml
創建runner文件drone-runner-kube-values.yaml
image: tag: latest rbac: buildNamespaces: - drone env: # 同server的kubernetes service名稱 DRONE_RPC_HOST: server-drone DRONE_RPC_SECRET: c7a536a3af5e2809f3d0d34a71a13302 DRONE_NAMESPACE_DEFAULT: drone
運行runner
helm install --namespace drone \ drone-runner-kube \ drone/drone-runner-kube \ -f drone-runner-kube-values.yaml
查看pod是否跑起來了
$ kubectl get pods -n drone NAME READY STATUS RESTARTS AGE drone-runner-kube-6554c9df64-2znff 1/1 Running 0 3h26m server-drone-647875c9f-t5bfx 1/1 Running 0 3h31m
解析域名并訪問導出的Ingress。第一次訪問會跳轉到gitlab,要求授權
在項目下創建.drone.yml
。drone docker插件參考
kind: pipeline type: kubernetes name: default steps: - name: 編譯&構建鏡像 image: plugins/docker # 掛載主機的docker volumes: - name: docker path: /var/run/docker.sock settings: repo: registry.your_registry.com:31000/your_project/test-ci registry: registry.your_registry.com:31000 mirror: https://hub-mirror.c.163.com username: username password: password # 更多變量參考https://docs.drone.io/pipeline/environment/reference/ tags: - ${DRONE_TAG=latest} - build-${DRONE_BUILD_NUMBER} - name: 部署到k8s image: jeessy/dron8s:0.4.0 settings: yaml: ./deployment-test.yaml image_addr: registry.your_registry.com:31000/your_project/${DRONE_REPO_NAME}:build-${DRONE_BUILD_NUMBER}
11.1 deployment-test.yaml
apiVersion: v1 kind: Namespace metadata: name: {{.repo_namespace}} --- apiVersion: apps/v1 kind: Deployment metadata: name: {{.repo_name}} namespace: {{.repo_namespace}} spec: selector: matchLabels: app: {{.repo_name}} replicas: 1 template: metadata: labels: app: {{.repo_name}} spec: imagePullSecrets: - name: harbor-registry-secret containers: - name: {{.repo_name}} image: {{.image_addr}} ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: {{.repo_name}}-svc namespace: {{.repo_namespace}} spec: selector: app: {{.repo_name}} ports: - protocol: TCP port: 80 targetPort: 80 --- # 私有倉庫 apiVersion: v1 kind: Secret metadata: name: harbor-registry-secret namespace: {{.repo_namespace}} type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: xxxxx
說明:部署到k8s可以使用pelotech/drone-helm3
或jeessy/dron8s
。兩個插件本人都提交過代碼。根據情況使用,helm配置更復雜,個人推介使用dron8s,可使用集群中使用,無需在drone中添加kube_token https://github.com/bh90210/dron8s#in-cluster-use
pelotech/drone-helm3
是連接helm和kubernetes的一個插件。通過它就可以把項目下的helm自動部到kubernetes中。參考官方
使用helm create test-ci
創建helm項目,并放到項目下。根據實際情況修改templates
文件夾下的模板。參考官方教程
圖為運行后效果
到此,關于“Drone怎么在kubernetes環境下打包并部署”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。