资讯专栏INFORMATION COLUMN

k8s与CICD--将drone部署到kubernetes中,实现agent动态收缩

sixleaves / 776人阅读

摘要:可以利用特性,根据负载压力来动态调整的数量。部署到集群以后,可以利用已有的日志系统和监控系统。即使用,也应该挂载到中,保证数据的安全。所有都部署到命名空间下,这个已经建好了。

前言

本文主要讲如何把drone部署到k8s集群当中,本身drone这种基于容器的pipeline方式,和k8s是相当契合的。这样的好处有:

k8s集群守护drone-server 和drone-agent。

可以利用rpc特性,根据agent负载压力来动态调整agent的数量。当然即使不动态调整,我们手动调整一下复制集的数目也是相当简单的。

部署到k8s集群以后,可以利用k8s已有的日志系统和监控系统。

其实在接下来的文章系列中,我们会不断侧重于k8s相关。依旧是直接先上yaml文件,先来一个直观的感受。

相关yaml文件

ConfigMap在此处可以理解为drone应用的配置文件。这里有关于server和agent一系列设置。不过在k8s中大家需要注意的是:更新configmap以后,对于挂载该configmap的应用,配置内容并不能立即生效,大约需要10s。

</>复制代码

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: drone-config
  5. namespace: devops
  6. data:
  7. #######################
  8. # Drone Server Config #
  9. #######################
  10. # server host name
  11. server.host: drone.xxx.com
  12. # start the server in debug mode
  13. server.debug: "false"
  14. # open user registration
  15. server.open: "true"
  16. # database driver, defaul as sqlite3
  17. server.database.driver: sqlite3
  18. # database driver configuration string
  19. server.database.datasource: drone.sqlite
  20. # remote parameters (Gogs)
  21. server.remote.gogs: "true"
  22. server.remote.gogs.url: "http://gogs.xxx.com"
  23. server.remote.gogs.private.mode: "true"
  24. ######################
  25. # Drone Agent Config #
  26. ######################
  27. agent.debug: "false"
  28. agent.debug.pretty: "false"
  29. agent.max.procs: "1"
  30. agent.healthcheck: "true"

Secret文件,主要是存放一些秘钥之类的。不过这里也是有坑的,这个secret用于server和angent通信,设置不对就会构建项目一直处于pending状态。切记k8s中,secret需要base64

</>复制代码

  1. echo -n "yourpassword" | base64
  2. eW91cnBhc3N3b3Jk

</>复制代码

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: drone-secrets
  5. namespace: devops
  6. data:
  7. server.secret: eW91cnBhc3N3b3Jk

接下来就是drone-server的Deployment和Service和Ingress。此处为了简单,用了sqlite数据库,真正生产环境建议用mysql或是pgsql。即使用sqlite,也应该挂载到ceph中,保证数据的安全。这里直接hostpath。k8s中,应该做到存储和计算的分离。

</>复制代码

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: drone-server
  5. namespace: devops
  6. spec:
  7. replicas: 1
  8. template:
  9. metadata:
  10. labels:
  11. app: drone-server
  12. spec:
  13. nodeSelector:
  14. net-type: external
  15. containers:
  16. - image: drone/drone:latest
  17. imagePullPolicy: Always
  18. name: drone-server
  19. ports:
  20. - containerPort: 8000
  21. protocol: TCP
  22. - containerPort: 9000
  23. protocol: TCP
  24. volumeMounts:
  25. # Persist our configs in an SQLite DB in here
  26. - name: drone-server-sqlite-db
  27. mountPath: /var/lib/drone
  28. resources:
  29. requests:
  30. cpu: 40m
  31. memory: 32Mi
  32. env:
  33. - name: DRONE_HOST
  34. valueFrom:
  35. configMapKeyRef:
  36. name: drone-config
  37. key: server.host
  38. - name: DRONE_OPEN
  39. valueFrom:
  40. configMapKeyRef:
  41. name: drone-config
  42. key: server.open
  43. - name: DRONE_DATABASE_DRIVER
  44. valueFrom:
  45. configMapKeyRef:
  46. name: drone-config
  47. key: server.database.driver
  48. - name: DRONE_DATABASE_DATASOURCE
  49. valueFrom:
  50. configMapKeyRef:
  51. name: drone-config
  52. key: server.database.datasource
  53. - name: DRONE_SECRET
  54. valueFrom:
  55. secretKeyRef:
  56. name: drone-secrets
  57. key: server.secret
  58. - name: DRONE_GOGS
  59. valueFrom:
  60. configMapKeyRef:
  61. name: drone-config
  62. key: server.remote.gogs
  63. - name: DRONE_GOGS_URL
  64. valueFrom:
  65. configMapKeyRef:
  66. name: drone-config
  67. key: server.remote.gogs.url
  68. - name: DRONE_GOGS_PRIVATE_MODE
  69. valueFrom:
  70. configMapKeyRef:
  71. name: drone-config
  72. key: server.remote.gogs.private.mode
  73. - name: DRONE_DEBUG
  74. valueFrom:
  75. configMapKeyRef:
  76. name: drone-config
  77. key: server.debug
  78. volumes:
  79. - name: drone-server-sqlite-db
  80. hostPath:
  81. path: /var/lib/drone

</>复制代码

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: drone-service
  5. namespace: devops
  6. spec:
  7. ports:
  8. - name: http
  9. protocol: TCP
  10. port: 80
  11. targetPort: 8000
  12. - name: grpc
  13. protocol: TCP
  14. port: 9000
  15. targetPort: 9000
  16. selector:
  17. app: drone-server

</>复制代码

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: drone-ingress
  5. namespace: devops
  6. spec:
  7. rules:
  8. - host: drone.xxx.com
  9. http:
  10. paths:
  11. - backend:
  12. serviceName: drone-service
  13. servicePort: 80
  14. path: /

下面就是agent的部署文件了,replicas: 1 该项可以设置agent的数量,扩容起来特别方便。server和agent通过grpc的方式进行通信,主要端口是9000。

</>复制代码

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: drone-agent
  5. namespace: devops
  6. spec:
  7. replicas: 1
  8. template:
  9. metadata:
  10. labels:
  11. app: drone-agent
  12. spec:
  13. nodeSelector:
  14. net-type: external
  15. containers:
  16. - image: drone/agent:latest
  17. imagePullPolicy: Always
  18. name: drone-agent
  19. volumeMounts:
  20. # Enables Docker in Docker
  21. - name: docker-socket
  22. mountPath: /var/run/docker.sock
  23. resources:
  24. requests:
  25. cpu: 100m
  26. memory: 64Mi
  27. livenessProbe:
  28. httpGet:
  29. path: /healthz
  30. port: 3000
  31. initialDelaySeconds: 3
  32. periodSeconds: 3
  33. env:
  34. - name: DRONE_SERVER
  35. value: drone-service:9000
  36. # issue: https://github.com/drone/drone/issues/2048
  37. - name: DOCKER_API_VERSION
  38. value: "1.24"
  39. - name: DRONE_SECRET
  40. valueFrom:
  41. secretKeyRef:
  42. name: drone-secrets
  43. key: server.secret
  44. volumes:
  45. - name: docker-socket
  46. hostPath:
  47. path: /var/run/docker.sock

所有都部署到devops命名空间下,这个namespace已经建好了。当然如果没有的话,需要提前创建。

效果图

总结

项目github地址,这里有该系列的所有文件。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32602.html

相关文章

  • k8sCICD--drone部署kubernetes实现agent动态收缩

    摘要:可以利用特性,根据负载压力来动态调整的数量。部署到集群以后,可以利用已有的日志系统和监控系统。即使用,也应该挂载到中,保证数据的安全。所有都部署到命名空间下,这个已经建好了。 前言 本文主要讲如何把drone部署到k8s集群当中,本身drone这种基于容器的pipeline方式,和k8s是相当契合的。这样的好处有: k8s集群守护drone-server 和drone-agent。 ...

    DTeam 评论0 收藏0
  • k8sCICD--drone部署kubernetes实现agent动态收缩

    摘要:可以利用特性,根据负载压力来动态调整的数量。部署到集群以后,可以利用已有的日志系统和监控系统。即使用,也应该挂载到中,保证数据的安全。所有都部署到命名空间下,这个已经建好了。 前言 本文主要讲如何把drone部署到k8s集群当中,本身drone这种基于容器的pipeline方式,和k8s是相当契合的。这样的好处有: k8s集群守护drone-server 和drone-agent。 ...

    hedge_hog 评论0 收藏0
  • k8sCICD--利用helm部署应用kubernetes

    摘要:本节主要介绍利用部署应用到中。利用部署一个应用,需要原生资源文件如或等。最后一般都会引用通知插件,将构建结果通知部署人员。说到部署策略,不得不说,实现的功能很多,但是足够的复杂,目前来看,国内只有小红书用起来了。 前言 本小节应该是这个系列剩下的两个小节之一了。剩下一个是之前承诺好的drone-wechart插件。本节主要介绍利用helm部署应用到kubernetes中。至于helm,...

    joyqi 评论0 收藏0
  • k8sCICD--利用helm部署应用kubernetes

    摘要:本节主要介绍利用部署应用到中。利用部署一个应用,需要原生资源文件如或等。最后一般都会引用通知插件,将构建结果通知部署人员。说到部署策略,不得不说,实现的功能很多,但是足够的复杂,目前来看,国内只有小红书用起来了。 前言 本小节应该是这个系列剩下的两个小节之一了。剩下一个是之前承诺好的drone-wechart插件。本节主要介绍利用helm部署应用到kubernetes中。至于helm,...

    邹立鹏 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<