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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 云原生--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搭建和管理企业级网站应用
相关文章
|
8天前
|
Cloud Native 安全 云计算
云原生技术在现代企业中的应用与挑战
随着云计算技术的蓬勃发展,云原生技术已经成为推动企业数字化转型的重要力量。本文将深入浅出地探讨云原生技术的核心概念、优势以及在实际应用中所面临的挑战和解决策略,旨在为读者提供一个全面而清晰的云原生技术应用框架,助力企业在数字化浪潮中乘风破浪。
|
3天前
|
Cloud Native 持续交付 云计算
云原生之旅:从传统IT到现代应用的蜕变
在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将带您一探云原生的核心概念、优势以及实施路径,揭示如何通过拥抱云原生架构,实现从传统IT向灵活、高效的现代应用转型。
10 2
|
7天前
|
运维 Cloud Native 云计算
云原生技术在现代企业中的应用与挑战
【8月更文挑战第13天】随着云计算技术的不断发展,云原生作为一种新型的架构模式,正在被越来越多的企业所采用。本文将探讨云原生技术的核心概念、优势以及在现代企业中的应用案例,同时分析企业在实施云原生过程中可能遇到的挑战和解决方案。
|
8天前
|
Cloud Native 安全 持续交付
云原生技术在现代企业中的应用与挑战
随着云计算技术的飞速发展,云原生已成为推动企业数字化转型的关键力量。本文将深入探讨云原生技术的核心概念、优势以及在实际应用中面临的挑战,旨在为读者提供一份全面的云原生应用指南,帮助理解其对企业IT架构和服务交付方式的深远影响。
21 4
|
5天前
|
Kubernetes Cloud Native API
Kubernetes云原生问题之Kubernetes帮助业务应用较少关注底层基础设施差异如何解决
Kubernetes云原生问题之Kubernetes帮助业务应用较少关注底层基础设施差异如何解决
20 1
|
6天前
|
设计模式 弹性计算 Cloud Native
云原生技术在现代企业中的应用与挑战
本文旨在探讨云原生技术如何成为现代企业数字化转型的催化剂。通过分析云原生的核心概念和优势,我们深入讨论了容器化、微服务架构等关键技术如何助力企业快速适应市场变化。同时,文章也指出了企业在采纳云原生技术过程中可能遭遇的安全、成本和技术挑战,并提供了相应的解决策略。最后,结合案例分析,展现了云原生技术在实际应用中带来的积极影响及未来的发展趋势。
|
8天前
|
运维 Cloud Native Devops
云原生之旅:探索现代软件部署的未来之路
在数字化时代的浪潮下,云计算已不再是新鲜词汇,而云原生技术作为其进阶形态,正引领着软件开发和运维的全新变革。本文将深入浅出地解析云原生的核心概念、优势以及实践路径,旨在为读者揭示这一技术趋势如何重塑我们的数字世界,同时分享个人从传统IT向云原生转型的真实体验和所思所感。
|
6天前
|
运维 Cloud Native 持续交付
云原生技术在现代企业中的应用与挑战
【8月更文挑战第13天】随着数字化转型的深入,云原生技术成为推动企业IT革新的关键力量。本文将探讨云原生技术的核心价值、在现代企业中的应用场景及其面临的主要挑战,旨在为读者提供一个关于云原生技术实际应用与未来发展趋势的全面视角。
|
8天前
|
运维 Cloud Native 安全
云原生之旅:探索现代软件部署的未来
在数字化转型的浪潮中,企业正寻求更高效、灵活的方式来部署和管理他们的应用程序。云原生技术,作为一种新兴的架构模式,提供了一种解决方案。本文将介绍云原生的基本概念,探讨它如何改变软件开发和运维的方式,并分析其在企业中的应用实例,最后讨论云原生面临的挑战及未来发展趋势。
20 2
|
4天前
|
设计模式 Cloud Native 安全
云原生技术在现代企业中的应用与挑战
【8月更文挑战第15天】随着云计算技术的不断发展和成熟,云原生作为一种新兴的架构模式,正逐渐改变着企业的IT基础设施和服务交付方式。本文将探讨云原生技术的基本概念、核心价值及其在现代企业中的应用场景,同时分析企业在采用云原生技术时面临的主要挑战,并提出相应的解决策略。
12 0

热门文章

最新文章