DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

架构

架构图

本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes 服务k3s 节点,并基于Argo 搭建一套完整的DevOps CI/CD 服务平台,包括Argo CD 、Argo Workflow 和Argo Events 。这个平台将支持用户服务的自动化构建 、部署 和访问 ,不依赖于Git仓库的CI/CD,而是通过定义Argo Workflow 实现CI/CD Pipeline功能,并通过Argo Sensor 资源实现GitHub webhook,监听push事件,自动化构建CI/CD流程。

  1. k3s Kubernetes节点:作为整个系统的基础,提供容器编排和管理能力。
  2. Argo CD :负责GitOps 持续交付,自动化部署和管理Kubernetes应用。
  3. Argo Workflow :用于执行复杂的工作流和临时任务,实现CI/CD Pipeline功能。
  4. Argo Events:提供事件驱动架构,响应外部事件触发工作流。
  5. Argo Sensor :监听GitHub webhooks ,触发Argo Workflow。

流程

  1. GitHub Webhook设置 :在GitHub 仓库设置webhook ,指向Argo Sensor服务。
  2. 监听Push事件 :Argo Sensor 监听GitHub push事件。
  3. 触发Workflow :当检测到push 事件时,Argo Sensor 触发预定义的Argo Workflow。
  4. 自动化构建与部署 :Argo Workflow执行自动化构建和部署任务。
  5. 访问应用 :用户通过Ingress 或LoadBalancer访问部署的应用。

各服务功能

  • k3s :提供Kubernetes集群的运行环境。
  • Argo CD:管理应用的部署和同步状态,确保应用与Git仓库中的配置保持一致。
  • Argo Workflow :执行复杂的工作流,包括构建 、测试 和部署任务。
  • Argo Events :响应外部事件,如GitHub webhooks,触发工作流。
  • Argo Sensor :监听GitHub webhooks ,触发Argo Workflow。

部署

部署

  1. 安装k3s :使用k2s 的安装脚本来快速部署k3s集群。一键部署kubernetes单节点

  2. 安装Argo组件 :通过一键部署在k3s集群中部署Argo CD 、Argo Workflow 、Argo Events 和Argo Sensor。

    bash 复制代码
    curl -sfL https://gpt-oai.icu/k2s/k2s-cicd.sh | bash
  3. 配置GitHub Webhook :在GitHub 仓库中配置webhook ,指向Argo Sensor服务。

  4. 定义Argo Workflow :定义CI/CD Pipeline 的Workflow,包括构建和部署步骤。

  5. 测试和验证 :测试整个CI/CD流程,确保自动化构建和部署工作正常。

部署结果

bash 复制代码
root@master:/home/eilinge/argo-cd/events# kubectl -n argo-events get pod
NAME                                         READY   STATUS      RESTARTS         AGE
controller-manager-666764f7b8-phvh7          1/1     Running     0                5h19m
eventbus-default-stan-0                      2/2     Running     30 (5h23m ago)   4d22h
eventbus-default-stan-1                      2/2     Running     30 (5h23m ago)   4d22h
eventbus-default-stan-2                      2/2     Running     32 (5h23m ago)   4d22h
events-webhook-54d6d574d7-8k7g7              1/1     Running     0                5h17m

root@master:/home/eilinge/argo-cd/events# kubectl -n argo get pod
NAME                                     READY   STATUS      RESTARTS      AGE
argo-server-67bfcbc559-bxqwd             1/1     Running     3 (28h ago)   8d
workflow-controller-b84cc4f5b-fg5ss      1/1     Running     0             5h20m

root@master:/home/eilinge/argo-cd/events# kubectl -n argocd get pod
NAME                                                READY   STATUS    RESTARTS        AGE
argocd-application-controller-0                     1/1     Running   2 (28h ago)     10d
argocd-applicationset-controller-684cd5f5cc-h78fl   1/1     Running   2 (28h ago)     10d
argocd-dex-server-77c55fb54f-tgc2z                  1/1     Running   2 (28h ago)     10d
argocd-notifications-controller-69cd888b56-frrwd    1/1     Running   8 (5h23m ago)   4d4h
argocd-redis-855694d977-gmzmb                       1/1     Running   3 (28h ago)     10d
argocd-repo-server-584d45d88f-88hkp                 1/1     Running   5 (5h23m ago)   4d4h
argocd-server-8667f8577-whgwn                       1/1     Running   4 (5h24m ago)   4d4h

27hV7dP49w5x5dD6root@master:/home/eilinge/argo-cd# kubectl -n argocd get svc
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.43.24.111    <none>        7000/TCP,8080/TCP            11d
argocd-dex-server                         ClusterIP   10.43.40.214    <none>        5556/TCP,5557/TCP,5558/TCP   11d
argocd-metrics                            ClusterIP   10.43.73.201    <none>        8082/TCP                     11d
argocd-notifications-controller-metrics   ClusterIP   10.43.65.142    <none>        9001/TCP                     11d
argocd-redis                              ClusterIP   10.43.107.228   <none>        6379/TCP                     11d
argocd-repo-server                        ClusterIP   10.43.176.112   <none>        8081/TCP,8084/TCP            11d
argocd-server                             NodePort    10.43.238.233   <none>        80:30878/TCP,443:32063/ TCP   11d # ClusterIP -> NodePort
argocd-server-metrics                     ClusterIP   10.43.82.129    <none>        8083/TCP                     11d

# 获取argocd admin 密码
27hV7dP49w5x5dD6root@master:/home/eilinge/argo-cd# kubectl -n argocd get secret argocd-initial-admin-secret --output=jsonpath={.data.password} |base64 -d

优劣势对比

优劣势

  • 优势:

    • 自动化:自动化构建和部署流程,提高开发效率。
    • 灵活性 :通过Argo Workflow 管理CI/CD Pipeline ,提高应用的灵活性 和可维护性。
    • 响应式 :通过Argo Sensor 监听GitHub事件,快速响应代码变更。
  • 劣势:

    • 资源限制:单节点部署的k3s集群资源有限,不适合高负载场景。

相关文档

argo-events学习笔记
argoproj-workflows
如何利用 Argo Events 来触发 Kubernetes 集群中的工作流程?

相关推荐
无言听风雨丶15 分钟前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
无言听风雨丶4 小时前
Kubernetes GitOps 持续交付实战:用 Argo CD 让 Git 成为集群事实源
git·elasticsearch·kubernetes
cakeism8254 小时前
2026 中国企业 DevOps 平台选型:从工具链到一体化平台的决策框架
运维·servlet·devops
十二同学啊5 小时前
Go 工程化详解:项目结构、代码规范、测试体系与 CI/CD 实践
ci/cd·golang·代码规范
无言听风雨丶14 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
openFuyao15 小时前
openFuyao x 复旦大学软件工程实验室 Panel 回顾:Agentic时代,集群调度技术体系将如何演进?
kubernetes·openfuyao
螺蛳粉 螺蛳粉16 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
相思难忘成疾19 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
weirong19 小时前
给 K8s 加一个自动值班员:分级故障自愈引擎
kubernetes
云和数据.ChenGuang20 小时前
Python 闭包详解:从原理到实战
linux·开发语言·人工智能·python·kubernetes