k8s搭建drone

Drone 是用 Go 语言编写的基于 Docker 构建的开源轻量级 CI/CD 工具,可以通过 SaaS 服务和自托管服务两种方式使用,Drone 使用简单的 YAML 配置文件来定义和执行 Docker 容器中定义的 Pipeline,Drone 由两个部分组成:

  • Server端负责身份认证,仓库配置,用户、Secrets 以及 Webhook 相关的配置。
  • Agent端用于接受构建的作业和真正用于运行的 Pipeline 工作流。

Server 和 Agent 都是非常轻量级的服务,大概只使用 10~15MB 内存,所以我们也可以很轻松的运行在笔记本、台式机甚至是 Raspberry PI 上面

1、申请域名,绑定VIP

2、创建如下service

apiVersion: v1
kind: Service
metadata:
  annotations:
    sigma.ali/vip: 100.64.46.7
  name: drone-server
  namespace: vts
  labels:
    app: drone-server
    sigma.ali/internal-lb: vip
    sigma.ali/instance-group: vts-drone
spec:
  clusterIP: None
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: drone-server

3、创建 DRONE_RPC_SECRET # 共享密钥

openssl rand -hex 16

de9e0d708e49cc14c02008bc16ee8cca

4、创建drone-server.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: drone-server
  name: drone-server
  namespace: vts
spec:
  replicas: 1
  selector:
    matchLabels:
      app: drone-server
  template:
    metadata:
      labels:
        app: drone-server
        sigma.ali/app-name: vts
        sigma.ali/instance-group: vts-service
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: resource-group.bach.io/vts
                operator: Exists
      containers:
      - env:
        - name: DRONE_GITLAB_CLIENT_ID
          value: d2e2f75e723e0fb91a3be09c650f6fbb3b2794fa6507e4a9cd3267fc2296c0b8
        - name: DRONE_GITLAB_CLIENT_SECRET
          value: 87aa84b868f8fc64b331f59c68904276ac976a01ac0c5c7b663faf216aca0282
        - name: DRONE_GITLAB_SERVER
          value: http://gitlab.alibaba-inc.com/
        - name: DRONE_GIT_ALWAYS_AUTH
          value: "true"
        - name: DRONE_GITLAB_DEBUG
          value: "true"
        - name: DRONE_RPC_SECRET
          #value: de9e0d708e49cc14c02008bc16ee8cca
          value: bd6c2d42e64197b8753fab0d4cd5d27f
        - name: DRONE_SERVER_HOST
          value: vts-drone-test-inc.com
        - name: DRONE_SERVER_PROTO
          value: http
        - name: DRONE_USER_CREATE
          value: username:wb-ldp766934,machine:false,admin:true
        - name: DRONE_GITLAB_SKIP_VERIFY
          value: "true"
        - name: DRONE_LOGS_DEBUG
          value: "true"
        - name: DRONE_DEBUG_DUMP_HOOK
          value: "true"
        - name: DRONE_REPOSITORY_TRUSTED
          value: "true"
        image: reg.docker.test.com/vts-test/drone-server:latest
        imagePullPolicy: Always
        name: drone-server
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        - containerPort: 443
          name: https
          protocol: TCP
      dnsPolicy: Default
      restartPolicy: Always
      schedulerName: default-scheduler
      tolerations:
      - effect: NoSchedule
        key: sigma.ali/resource-pool
        operator: Equal
        value: mit_bach
      - effect: NoSchedule
        key: sigma.ali/is-ecs
        operator: Equal
        value: "true"
kubectl apply -f drone-server.yml -n vts

5、创建drone-runner.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: drone-runner
  namespace: vts
  labels:
    app.kubernetes.io/name: drone
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: drone
  template:
    metadata:
      labels:
        app.kubernetes.io/name: drone
    spec:
      containers:
      - name: runner
        image: reg.docker.test-inc.com/vts-test/drone-runner:latest
        ports:
        - containerPort: 3000
        env:
        - name: DRONE_RPC_HOST
          #value: vts-drone.test-inc.com
          value: 100.67.206.236
        - name: DRONE_RPC_PROTO
          value: http
        - name: DRONE_RPC_SECRET
          value: bd6c2d42e64197b8753fab0d4cd5d27f
      tolerations:
         - effect: NoSchedule
           key: sigma.ali/resource-pool
           value: sigma_public
         - effect: NoSchedule
           key: sigma.ali/is-ecs
           operator: Exists
         - effect: NoExecute
           key: node.kubernetes.io/not-ready
           operator: Exists
           tolerationSeconds: 300
         - effect: NoExecute
           key: node.kubernetes.io/unreachable
           operator: Exists
           tolerationSeconds: 300

kubectl apply -f drone-runner.yml -n vts

6、查看pod

kubectl get pod -n vts | grep drone-runner

7、删除pod

kubectl delete -f drone-runner.yml -n vts

(必须)DRONE_GITLAB_CLIENT_ID # GitLab oauth客户端ID(必须)DRONE_GITLAB_CLIENT_SECRET # GitLab oauth客户端密钥

(必须)DRONE_RPC_SECRET # 共享密钥,de9e0d708e49cc14c02008bc16ee8cca[用于验证到服务器的rpc连接。必须为服务器和代理提供相同的秘密值]

(必须)DRONE_SERVER_HOST # drone地址[提供您的外部主机名或IP地址。如果使用IP地址,则可以包括端口]

(必须)DRONE_SERVER_PROTO # 提供了您的外部协议方案。此值应设置为http或https

(可选)DRONE_GITLAB_SERVER # 提供您的GitLab服务器网址,默认值为的gitlab.com服务器地址https://gitlab.com

(可选)DRONE_GIT_ALWAYS_AUTH # 可选的布尔值

DRONE_RPC_SECRET # 共享密钥

启动成功:

8、授权

打开浏览器,查看域名 http://vts-drone-new.test.com,经过 gitlab 授权后可以看到 drone.ci 的管理页面。

### Kubernetes 上部署 CI/CD 系统的实现方法 在 Kubernetes 平台上部署 CI/CD 系统可以通过多种方式实现,常见的工具有 Jenkins、Drone 和 Argo CD 等。以下是具体的实现方法: #### 使用 Jenkins 部署 CI/CD Jenkins 是一种流行的 CI/CD 工具,支持通过插件与 Kubernetes 集成。以下是一个典型的 Jenkins Pipeline 示例,展示如何将微服务部署到 Kubernetes 集群。 ```groovy pipeline { agent any stages { stage('Build') { steps { echo 'Building...' sh 'mvn clean package' } } stage('Test') { steps { echo 'Testing...' sh 'mvn test' } } stage('Deploy to Kubernetes') { steps { script { kubernetesDeploy( configs: 'k8s/deployment.yaml', kubeconfigId: 'kube-config' ) } } } } } ``` 此脚本定义了一个三阶段流水线:构建、测试和部署[^1]。`kubernetesDeploy` 插件负责将应用配置文件 `deployment.yaml` 应用到指定的 Kubernetes 集群中。 #### 使用 Drone 部署 CI/CD Drone 是另一种轻量级的 CI/CD 工具,采用 Go 编写并专为容器化工作流设计。其核心理念是利用 Docker 容器作为执行环境,从而简化跨平台兼容性和资源隔离问题。 下面是一份简单的 `.drone.yml` 文件示例: ```yaml kind: pipeline name: default steps: - name: build image: maven:3-jdk-8 commands: - mvn clean install - name: deploy image: plugins/kubectl settings: command: apply args: ["-f", "k8s/deployment.yaml"] kubeconfig_path: /root/.kube/config ``` 该 YAML 文件描述了一条两步流水线:第一步使用 Maven 构建项目;第二步调用 Kubectl 将生成的应用程序部署至目标 Kubernetes 集群[^3]。 #### 自动化的无云依赖解决方案 对于希望避免锁定特定公有云供应商的企业来说,创建一个与云无关的自动化 CI/CD 流程尤为重要。这种方法通常涉及以下几个方面: 1. **统一管理开发环境**:借助 Rancher 或类似的工具分配给每位开发者专属命名空间及权限控制下的节点实例。 2. **高效恢复机制**:即使发生硬件故障也能迅速重建受影响的工作负载。 3. **灵活发布策略**:既可以依靠官方维护好的 Helm Chart 来安装软件包,也允许自定义模板满足特殊需求[^4]。 ### 总结 无论是选择传统老牌产品如 Jenkins 还是新兴替代方案比如 Drone,在 Kubernetes 中实施 CI/CD 不仅能够显著提升效率还能增强系统的可靠程度。然而值得注意的是每种途径背后都伴随着各自的优缺点需要权衡考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值