云原生--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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
17天前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
14天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
19天前
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
9天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
14天前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
21天前
|
消息中间件 Cloud Native 持续交付
云原生技术在现代企业中的应用与优势###
本文深入探讨了云原生技术在现代企业中的具体应用及其带来的显著优势。随着云计算的普及,云原生作为一种新兴的技术架构,正逐渐成为企业数字化转型的关键驱动力。文章将详细介绍云原生的核心概念、主要技术组件以及在实际业务场景中的成功案例,旨在为读者提供一个全面且实用的参考框架,以便更好地理解和应用云原生技术。 ###
|
14天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
24天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
39 3
|
25天前
|
Cloud Native 持续交付 云计算
云原生架构的演进与挑战
随着云计算技术的不断发展,云原生架构已成为企业数字化转型的重要支撑。本文深入探讨了云原生架构的概念、发展历程、核心技术以及面临的挑战,旨在为读者提供一个全面了解云原生架构的视角。通过分析Kubernetes、Docker等关键技术的应用,以及微服务、持续集成/持续部署(CI/CD)等实践案例,本文揭示了云原生架构在提高应用开发效率、降低运维成本、增强系统可扩展性等方面的显著优势。同时,也指出了云原生架构在安全性、复杂性管理等方面所面临的挑战,并提出了相应的解决策略。