前言

本文主要讲如何把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。

apiVersion: v1
kind: ConfigMap
metadata:name: drone-confignamespace: devops
data:######################## Drone Server Config ######################## # server host nameserver.host: drone.xxx.com# start the server in debug modeserver.debug: "false" # open user registrationserver.open: "true" # database driver, defaul as sqlite3server.database.driver: sqlite3# database driver configuration stringserver.database.datasource: drone.sqlite# remote parameters (Gogs)server.remote.gogs: "true"server.remote.gogs.url: "http://gogs.xxx.com"server.remote.gogs.private.mode: "true" ####################### Drone Agent Config #######################agent.debug: "false"agent.debug.pretty: "false"agent.max.procs: "1"agent.healthcheck: "true"

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

echo -n "yourpassword" | base64
eW91cnBhc3N3b3Jk
apiVersion: v1 kind: Secret metadata: name: drone-secrets namespace: devops data: server.secret: eW91cnBhc3N3b3Jk

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

apiVersion: extensions/v1beta1 kind: Deployment metadata: name: drone-server namespace: devops spec: replicas: 1 template: metadata: labels: app: drone-server spec: nodeSelector: net-type: external containers: - image: drone/drone:latest imagePullPolicy: Always name: drone-server ports: - containerPort: 8000 protocol: TCP - containerPort: 9000 protocol: TCP volumeMounts:  # Persist our configs in an SQLite DB in here - name: drone-server-sqlite-db mountPath: /var/lib/drone resources: requests: cpu: 40m memory: 32Mi env: - name: DRONE_HOST valueFrom: configMapKeyRef: name: drone-config key: server.host - name: DRONE_OPEN valueFrom: configMapKeyRef: name: drone-config key: server.open - name: DRONE_DATABASE_DRIVER valueFrom: configMapKeyRef: name: drone-config key: server.database.driver - name: DRONE_DATABASE_DATASOURCE valueFrom: configMapKeyRef: name: drone-config key: server.database.datasource - name: DRONE_SECRET valueFrom: secretKeyRef: name: drone-secrets key: server.secret - name: DRONE_GOGS valueFrom: configMapKeyRef: name: drone-config key: server.remote.gogs - name: DRONE_GOGS_URL valueFrom: configMapKeyRef: name: drone-config key: server.remote.gogs.url - name: DRONE_GOGS_PRIVATE_MODE valueFrom: configMapKeyRef: name: drone-config key: server.remote.gogs.private.mode - name: DRONE_DEBUG valueFrom: configMapKeyRef: name: drone-config key: server.debug volumes: - name: drone-server-sqlite-db hostPath: path: /var/lib/drone
apiVersion: v1 kind: Service metadata: name: drone-service namespace: devops spec: ports: - name: http protocol: TCP port: 80 targetPort: 8000 - name: grpc protocol: TCP port: 9000 targetPort: 9000 selector: app: drone-server
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: drone-ingress namespace: devops spec: rules: - host: drone.xxx.com http: paths: - backend: serviceName: drone-service servicePort: 80 path: /

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

apiVersion: extensions/v1beta1 kind: Deployment metadata: name: drone-agent namespace: devops spec: replicas: 1 template: metadata: labels: app: drone-agent spec: nodeSelector: net-type: external containers: - image: drone/agent:latest imagePullPolicy: Always name: drone-agent volumeMounts:  # Enables Docker in Docker - name: docker-socket mountPath: /var/run/docker.sock resources: requests: cpu: 100m memory: 64Mi livenessProbe: httpGet: path: /healthz port: 3000 initialDelaySeconds: 3 periodSeconds: 3 env: - name: DRONE_SERVER value: drone-service:9000  # issue: https://github.com/drone/drone/issues/2048 - name: DOCKER_API_VERSION value: "1.24" - name: DRONE_SECRET valueFrom: secretKeyRef: name: drone-secrets key: server.secret volumes: - name: docker-socket hostPath: path: /var/run/docker.sock

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

效果图

总结

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

本文转自中文社区-k8s与CICD--将drone部署到kubernetes中,实现agent动态收缩

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

  1. CloudBees发布“Jenkins X”:面向部署到Kubernetes中的现代云应用的CI/CD解决方案

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ James Strachan和CloudBees团队发布了开源的"Jenkins ...

  2. 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...

    Kubernetes 中的部署策略 在本文中,我们将学习使用 Kubernetes 容器编排系统部署容器时的部署策略.在本文的最后,我们将学习如何在 Kubernetes 集群中使用不同的方式进行部署 ...

  3. Spring Cloud Kubernetes 中文文档

    本参考指南介绍了如何使用Spring Cloud Kubernetes. 1.为什么需要Spring Cloud Kubernetes? Spring Cloud Kubernetes提供了使用Kub ...

  4. 一文搞懂 Kubernetes 中数据包的生命周期

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 即使是对于具备一定虚拟网络和路由知识的人来说,Kubernetes 集群的网络也是个颇为麻烦的事情.本文尝试帮助读 ...

  5. 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...

    许多刚刚接触gRPC用户或是刚刚把gRPC服务部署到kubernetes中感到惊讶的是,发现Kubernetes的默认负载均衡通常无法与gRPC一起使用.例如,当您使用一个简单的gRPC Node.j ...

  6. Kubernetes(k8s)快速入门和环境部署

    目录 1. Kubernetes介绍 1.1 应用部署方式演变 1.2 kubernetes简介 1.3 kubernetes组件 1.4 kubernetes概念 2. kubernetes集群环境 ...

  7. 【k8s实战一】Jenkins 部署应用到 Kubernetes

    [k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...

  8. Kubernetes(K8s)集群安装部署

    Kubernetes(K8s)集群安装 Kubernetes(K8s)集群安装 1 .基本环境配置 1.1.Kubernetes集群规划 1.2.基础环境配置(所有节点) 1.2.1.Host文件修改 ...

  9. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库

    在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...

最新文章

  1. xmanager破解待验证
  2. 设计printf调试宏
  3. java基础学习(一)方法
  4. 自定义组合控件:Banner、轮播图、广告栏控件
  5. Android之获取屏幕和视图高和宽
  6. 高等数学下-赵立军-北京大学出版社-题解-练习12.2
  7. 鹤岗一中2021年高考成绩查询,2021鹤岗市地区高考成绩排名查询,鹤岗市高考各高中成绩喜报榜单...
  8. 基于ZYNQ FPGA实现图像采集存储显示
  9. 矩阵sum_Matlab-sum与cumsum函数
  10. app服务器该如何配置文件,当你使用 SQL Server 2016 或更高版本应用用户配置文件时,App-V 服务器发布可能会失败...
  11. 网络安全传输(读书笔记)
  12. SAAS--01HRM系统概述与搭建环境
  13. javaee之用户信息增删改查案例
  14. linux安装svn服务端图形化界面,Linux svn 图形界面客户端 Rabbitvcs 安装
  15. 数据库增删改查的基本操作和SpringBoot创建
  16. 基于 SpringBoot 和 webSocket 的匿名聊天室
  17. Python小结<1>
  18. centos7.4启动卡在7的界面
  19. CIsco思科三层交换配置DHCP,客户端动态获取
  20. 熊猫烧香案主犯编出杀毒程序

热门文章

  1. 利用python将txt文件中的内容写入Excel文件中
  2. Leetcode题库191.位1的个数(C实现)
  3. 计组-CISC/RISC小节
  4. 单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点
  5. raptor五个数排序流程图_经典算法系列之:选择排序
  6. 扩容是元素还是数组_348,数据结构1,数组
  7. dynamic web module 2.5与2.4
  8. 一张图搞定SDF的概念
  9. 分享 - 普通程序员如何转向AI方向
  10. POJ1226 Substrings(二分+后缀数组)