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

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

架构

架构图

本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes 服务k3s 节点,并基于Argo 搭建一套完整的DevOps CI/CD 服务平台,包括Argo CDArgo WorkflowArgo 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. 访问应用 :用户通过IngressLoadBalancer访问部署的应用。

各服务功能

  • 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 CDArgo WorkflowArgo EventsArgo 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 PipelineWorkflow,包括构建和部署步骤。

  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 集群中的工作流程?

相关推荐
还在忙碌的吴小二7 小时前
k8s是啥?
云原生·容器·kubernetes
zhen248 小时前
K8s Service
云原生·容器·kubernetes
我爱学习好爱好爱10 小时前
Kubernetes 1.29集群上部署Java网站项目
java·容器·kubernetes
智能运维指南10 小时前
信创背景下,国产 DevOps 平台如何实现真正的“全栈适配”?
运维·devops
代码派10 小时前
NineData社区版:免费+本地化部署,满足数据库DevOps、数据复制与一致性对比的数据库管理平台
运维·数据库·database·devops·数据库管理工具·ninedata·数据库迁移
qhqh31011 小时前
K8S的PV、PVC和storageClass的相关概念及实验
云原生·容器·kubernetes
無限神樂15 小时前
docker,docker compose,k8s之间的区别
docker·容器·kubernetes
2301_7873284916 小时前
57.DevOps入门
运维·devops
光蛋17 小时前
Jenkins+Docker 实现 Java 项目全自动 CI/CD 流水线实战指南
ci/cd
岁岁种桃花儿18 小时前
kubenetes从入门到上天系列第十二篇:Kubernetes的Deployment控制器
云原生·容器·kubernetes