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

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

前言

本文主要讲如何把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-config
 namespace: devops
data:

 #######################
 # Drone Server Config #
 ####################### # server host name
 server.host: drone.xxx.com
 # start the server in debug mode
 server.debug: "false" # open user registration
 server.open: "true" # database driver, defaul as sqlite3
 server.database.driver: sqlite3
 # database driver configuration string
 server.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已经建好了。当然如果没有的话,需要提前创建。

效果图

9baa5eeebecf40e1194d629b1eff6cb77a268e9c

总结

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

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
27天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
48 17
|
22天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
93 0
|
23天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
106 0
|
25天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
19 1
|
30天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
218 0
|
30天前
|
Kubernetes Java Nacos
nacos常见问题之k8s上部署需要自动扩缩容如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
33 0
|
1月前
|
弹性计算 运维 Kubernetes
容器服务ACK常见问题之线上的K8s一直waiting如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。

推荐镜像

更多