云原生--argocd 创建应用、部署应用、回滚 (一)

简介: 云原生--argocd 创建应用、部署应用、回滚

创建应用


在仓库 https://gitee.com/zouzou_busy/devops_test 里有个 app 目录,里面有个 myapp-deployment.yaml 文件 和 myapp-service.yaml 文件,用来演示我们 argo cd 的功能

myapp-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: zouzou0214/myapp:v1
        name: myapp
        ports:
        - containerPort: 8008

myapp-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
  - port: 8008
    targetPort: 8008
  type: NodePort
  selector:
    app: myapp


通过 CLI 来创建应用


[root@master1 ~]# argocd app create --help
Create an application
Usage:
  argocd app create APPNAME [flags]
Examples:
  # Create a directory app
  argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse
  # Create a Jsonnet app
  argocd app create jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2
  # Create a Helm app
  argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2
  # Create a Helm app from a Helm repo
  argocd app create nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc
  # Create a Kustomize app
  argocd app create kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1
  # Create a app using a custom tool:
  argocd app create kasane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasan
    Flags:
    ......

直接执行如下所示命令即可:

argocd app create app01 --repo https://gitee.com/zouzou_busy/devops_test.git --path app --dest-server https://kubernetes.default.svc --dest-namespace demo1
application 'app01' created
  • app01:应用的名称
  • --repo:仓库地址
  • --path:仓库里存放资源的路径,我这里的是在 app 目录下
  • --dest-server:部署到的服务器地址
  • --dest-namespace:部署的命名空间地址,我这里为 demo1

部署成功后就可以在页面上查看到了


通过 UI 创建应用


除了上面使用命令行创建之外,我们还可以使用 ui 进行创建

登录 ui 后,点击 +NEW APP 创建应用,如下

将应用命名为 app02,使用 default project,并将同步策略设置为 Manual。如下

SYNC POLICY 如果选择的是 Automatic 后,会有两个选项,如下

RRUNE RESOURCES:自动修剪。集群上某个资源在 GitRepo 中找不到对应的配置时,自动删除集群上的该资源

SELF HEAL:自愈。因各种原因(如手动修改)集群上资源的实时状态而导致与 GitRepo 不匹配时,自动将实际状态与 GitRepo 的期望状态同步。例如,GitRepo 中定义 pod 的数量为2,你在集群上改为了 3 个 pod,如果你不勾选 self heal。则 ArgoCD 则不会在同步(对一次提交只同步一次),这时 pod 的数量就一直为 3。但你如果勾选了 self heal,ArgoCD 就会轮询去同步,将你的 pod 改为你 GitRepo 里的数量

自动同步仅发生在应用处于 OutOfSync 状态时,ArgoCD 并不会对处于 Synced 或 Error 状态的 Application 执行自动同步

对于 GitRepo 上的一次提交,自动同步仅会执行一次,除非同时启用 Self Heal 机制

启用了自动同步的 Application 不支持 RollBack


SYNC OPTIONS(同步策略)

  • SKIP SCHEMA VALIDATION:是否执行资源规范格式的校验,相当于 ”kubectl apply --validate={true|false}“,默认为 true
  • AUTO-CREATE NAMESPACE:自动创建命名空间。如果部署的应用没有命名空间,则自动创建
  • PRUNE LAST:在同步操作的最后在执行修剪操作,即其他资源已经部署且转为健康状态后在进行 prune
  • APPLY OUT OF SYNC ONLY:仅对那些处于 OutOfSync 状态的资源执行同步操作。一个 path 下可能有多个资源,有些是 synced 的,有些是 OutOfSync 的,勾选上之后,只对 OutOfSync 的资源做同步
  • REPLACE:将使用 kubectl replace/create 命令同步资源,而非默认的 apply
  • PRUNE PROPAGATION POLICY:资源修剪传播策略,默认值使用 foreground 策略,还有 background 和 orphan
  • RESPECT IGNORE DIFFERENCES:在同步阶段忽略期望状态的字段。例如我们有个 deployment,里面的 replicas 为 20。代表我们期望的 pod 数量为 20 个,但如果我们进行灰度发布的时候,可能多,也可能少。这个时候,如果不勾选 RESPECT IGNORE DIFFERENCES ,就会导致灰度发布出现问题,所以这时候我们最好是勾选上该参数

然后在下面配置 Repository URLhttps://gitee.com/zouzou_busy/devops_test.git,将 Revision 设置为 HEAD,并将路径设置为 app。然后下面的 Destination 部分,将 cluster 设置为 inCluster 和 namespace 为 demo2

SOURCE

  • Repository URL:git 仓库的 URL 地址
  • Revision:要使用的 Revision,通常是指源码库上的 branch、tag、commit 或 helm chart 版本
  • Path:git 仓库中含有配置文件的子目录路径

DESTINATION

  • CLuster URL:部署的目标集群
  • Namespace:部署的目标集群的 namespace 下

Directory:这里还可以选择 helm、Kustomize、Plugin 等。下面以 directory 为例

  • DIRECTORY RECURSE:对目录进行递归

对应的 yaml 可以点击右上角 EDIT AS YAML 查看

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app02
spec:
  destination:
    name: ''
    namespace: demo2
    server: 'https://kubernetes.default.svc'
  source:
    path: app
    repoURL: 'https://gitee.com/zouzou_busy/devops_test.git'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated: null
    syncOptions:
      - CreateNamespace=true

填写完以上信息后,点击页面左上方的 Create 安装,即可创建 app02 应用,创建完成后可以看到当前应用的处于 OutOfSync 状态:

Argo CD 默认情况下每 3 分钟会检测 Git 仓库一次,用于判断应用实际状态是否和 Git 中声明的期望状态一致,如果不一致,状态就转换为 OutOfSync。默认情况下并不会触发更新,除非通过 syncPolicy 配置了自动同步


通过 CRD 创建


除了可以通过 CLI 和 Dashboard 可以创建 Application 之外,其实也可以直接通过声明一个 Application 的资源对象来创建一个应用,如下所示

创建一个 argocd-app03.yaml 文件,内容如下

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app03 # 名称为 app03
spec:
  destination:
    name: ''
    namespace: demo3  # 命名空间为 demo3
    server: 'https://kubernetes.default.svc'
  source:
    path: app
    repoURL: 'https://gitee.com/zouzou_busy/devops_test.git'
    targetRevision: HEAD
  project: default
  syncPolicy:
    automated: null
    syncOptions:
      - CreateNamespace=true


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
23天前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
256 20
|
2月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
137 8
|
3月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
297 25
|
11月前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
7月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
381 12
|
9月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
11月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
11月前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
202 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
3月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
333 15
下一篇
开通oss服务