Argo CD 应用程序


Red Hat OpenShift GitOps 1.15

使用 Argo CD 仪表板、oc 工具或 GitOps CLI 在 OpenShift 集群中创建并部署应用程序

Red Hat OpenShift Documentation Team

摘要

本文档提供了有关使用 Argo CD 仪表板、oc 工具或 GitOps CLI 创建和部署应用程序的说明。它还讨论了如何在 Argo CD 中验证自我修复行为,以及如何在非 control plane 命名空间中启用和管理应用程序资源。

第 1 章 使用 Argo CD 部署 Spring Boot 应用程序

使用 Argo CD,您可以使用 Argo CD 仪表板或使用 oc 工具将应用程序部署到 OpenShift Container Platform 集群。

1.1. 使用 Argo CD 仪表板创建应用程序

Argo CD 提供了一个仪表板,供您创建应用程序。

先决条件

  • 以管理员身份登录到 OpenShift Container Platform 集群。
  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
  • 已登陆到 Argo CD 实例。

流程

  1. 在 Argo CD 控制面板中,单击 NEW APP 以添加新 Argo CD 应用。
  2. 对于此工作流,使用以下配置创建一个 spring-petclinic 应用程序:

    应用程序名称
    spring-petclinic
    project
    default
    同步策略
    自动
    仓库 URL
    https://github.com/redhat-developer/openshift-gitops-getting-started
    修订
    HEAD
    路径
    app
    目的地
    https://kubernetes.default.svc
    命名空间
    spring-petclinic
  3. 单击 CREATE 以创建应用程序。
  4. 打开 Web 控制台的 Administrator 视角,再展开 AdministrationNamespaces
  5. 搜索并选择命名空间,然后在 Label 字段中输入 argocd.argoproj.io/managed-by=openshift-gitops,以便 openshift-gitops 命名空间中的 Argo CD 实例可以管理您的命名空间。

1.2. 使用 oc 工具创建应用程序

您可以使用 oc 工具在终端中创建 Argo CD 应用程序。

先决条件

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
  • 已登陆到 Argo CD 实例。

流程

  1. 下载 示例应用程序

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
  2. 创建应用程序:

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
  3. 运行 oc get 命令以查看所创建的应用程序:

    $ oc get application -n openshift-gitops
  4. 在部署应用程序的命名空间中添加标签,以便 openshift-gitops 命名空间中的 Argo CD 实例可以管理它:

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops

1.3. 验证 Argo CD 自助行为

Argo CD 持续监控已部署应用程序的状态,检测 Git 中指定清单和集群中的实时更改之间的差别,然后自动更正它们。这个行为被称为自我管理。

您可以在 Argo CD 中测试并观察自我管理的行为。

先决条件

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
  • 已登陆到 Argo CD 实例。
  • 已部署并配置 app-spring-petclinic 应用程序示例。

流程

  1. 在 Argo CD 仪表板中,验证您的应用程序是否具有 Synced 状态。
  2. 点 Argo CD 仪表板中的 app-spring-petclinic 标题,查看部署到集群中的应用程序资源。
  3. 在 OpenShift Container Platform web 控制台中进入 Developer 视角。
  4. 修改 Spring PetClinic 部署,并将更改提交到 Git 仓库的 app/ 目录。Argo CD 将自动将更改部署到集群。

    1. Fork OpenShift GitOps getting started repository
    2. deployment.yaml 文件中,将 failureThreshold 值改为 5
    3. 在部署集群中,运行以下命令验证 failureThreshold 字段更改的值:

      $ oc edit deployment spring-petclinic -n spring-petclinic
  5. 通过修改集群上的部署并扩展到两个容器集来测试自我修复行为,同时在 OpenShift Container Platform Web 控制台中观察应用程序。

    1. 运行以下命令修改部署:

      $ oc scale deployment spring-petclinic --replicas 2  -n spring-petclinic
    2. 在 OpenShift Container Platform Web 控制台中,请注意部署最多扩展两个 pod,并立即缩减到一个 pod。Argo CD 检测到与 Git 存储库的区别,并在 OpenShift Container Platform 集群中自动修复应用程序。
  6. 在 Argo CD 仪表板中,点 app-spring-petclinic 标题 → APP DETAILSEVENTSEVENTS 选项卡显示以下事件: Argo CD 检测集群中缺少同步部署资源,然后重新同步 Git 存储库进行更正。

第 2 章 使用 GitOps CLI 创建应用程序

使用 Argo CD,您可以使用 GitOps argocd CLI 在 OpenShift Container Platform 集群中创建应用程序。

2.1. 使用 GitOps CLI 在默认模式中创建应用程序

您可以使用 GitOps argocd CLI 在默认模式中创建应用程序。

先决条件

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 Red Hat OpenShift GitOps argocd CLI。
  • 已登陆到 Argo CD 实例。

流程

  1. 获取 Argo CD 服务器的 admin 帐户密码:

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
  2. 获取 Argo CD 服务器 URL:

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
  3. 使用 admin 帐户密码以单引号登录到 Argo CD 服务器:

    重要

    将密码包含在单引号中,确保 shell 无法错误地解译特殊字符,如 $。始终使用单引号括起密码的字面值。

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}

    Example

    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing

  4. 通过列出所有应用程序,验证您是否可以在默认模式下运行 argocd 命令:

    $ argocd app list

    如果配置正确,则使用以下标头列出现有应用程序:

    输出示例

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET

  5. 在默认模式中创建应用程序:

    $ argocd app create app-spring-petclinic \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path app \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy automated \
        --self-heal \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  6. spring-petclinic 目标命名空间标记为由 openshif-gitops Argo CD 实例管理:

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  7. 列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有 HealthySynced 状态:

    $ argocd app list

2.2. 使用 GitOps CLI 以核心模式创建应用程序

您可以使用 GitOps argocd CLI 以 核心 模式创建应用程序。

先决条件

  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 Red Hat OpenShift GitOps argocd CLI。

流程

  1. 使用 oc CLI 工具登录到 OpenShift Container Platform 集群:

    $ oc login -u <username> -p <password> <server_url>

    Example

    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443

  2. 检查 kubeconfig 文件中是否正确设置了上下文:

    $ oc config current-context
  3. 将当前上下文的默认命名空间设置为 openshift-gitops

    $ oc config set-context --current --namespace openshift-gitops
  4. 设置以下环境变量来覆盖 Argo CD 组件名称:

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
  5. 通过列出所有应用程序,验证您能够在 核心 模式下运行 argocd 命令:

    $ argocd app list --core

    如果配置正确,则使用以下标头列出现有应用程序:

    输出示例

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET

  6. 核心 模式创建应用程序:

    $ argocd app create app-spring-petclinic --core \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path app \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy automated \
        --self-heal \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  7. spring-petclinic 目标命名空间标记为由 openshif-gitops Argo CD 实例管理:

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  8. 列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有 HealthySynced 状态:

    $ argocd app list --core

2.3. 其他资源

第 3 章 在非 control plane 命名空间中管理应用程序资源

作为集群管理员,您可以在 openshift-gitops control plane 命名空间以外的非 control plane 命名空间中创建和管理应用程序资源。此功能在 Argo CD 开源项目的任何命名空间中称为 Applications

注意

作为开发者,如果您要在 openshift-gitops control plane 命名空间以外的非 control plane 命名空间中创建 Argo CD 应用程序,请确保集群管理员为它们授予必要的权限。

否则,在 Argo CD 协调后,您会看到类似以下示例的错误消息:

错误信息示例

error while validating and normalizing app: error getting application's project: application 'app' in namespace 'dev' is not allowed to use project 'default'

要使用这个功能,您必须在以下对象中显式启用和配置目标命名空间:

  • 用户定义的集群范围的 Argo CD 实例的 ArgoCD 自定义资源(CR)
  • AppProject 自定义资源(CR)
  • Application CR

在非 control plane 命名空间中创建和管理应用程序资源的过程由以下步骤组成:

当您要为隔离的团队管理 Argo CD 应用程序部署时,此功能在多租户环境中很有用。

重要

要防止应用程序团队的特权升级,您必须满足以下要求:

  • 不要在任何 privileged AppProject 实例的 .spec.sourceNamespaces 字段中配置非 control plane 命名空间,例如,在 openshift-gitops control plane 命名空间或您定义的命名空间中安装的 AppProject CR 的默认 实例。
  • 不要在 AppProject CRD 中授予对 openshift-gitops control plane 命名空间的访问权限。
  • openshift-gitops control plane 命名空间中始终创建和配置用户定义的 AppProject 实例,然后在对应的用户定义的 AppProject 实例中在 .spec.sourceNamespaces 字段中配置非 control plane 命名空间。

3.1. 先决条件

  • 您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps 1.13.0 或更高版本。
  • 在定义的命名空间中有一个用户定义的 集群范围的 Argo CD 实例,如 spring-petclinic 命名空间。

3.2. 使用目标命名空间配置用户定义的集群范围的 Argo CD 实例的 Argo CD CR

作为集群管理员,您可以定义一组特定的非 control plane 命名空间,用户可以在其中创建、更新和协调 应用程序资源。您必须首先根据您的要求在用户定义的集群范围 Argo CD 实例的 ArgoCD 自定义资源(CR)中明确配置目标命名空间。

先决条件

  • 以管理员身份登陆到 OpenShift Container Platform 集群。
  • 您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps 1.13.0 或更高版本。
  • 在定义的命名空间中有一个用户定义的集群范围的 Argo CD 实例,如 spring-petclinic 命名空间。

流程

  1. 在 Web 控制台的 Administrator 视角中,点 OperatorsInstalled Operators
  2. Project 列表中,选择安装用户定义的集群范围的 Argo CD 实例的项目。
  3. 从安装的 Operator 列表中选择 Red Hat OpenShift GitOps,再进入 Argo CD 选项卡。
  4. 点用户定义的集群范围的 Argo CD 实例。
  5. 使用目标命名空间配置用户定义的集群范围的 Argo CD 实例的 ArgoCD CR:

    1. YAML 选项卡,并编辑 ArgoCD CR 的 YAML 文件。
    2. ArgoCD CR 中,将 sourceNamespaces 参数的值设置为包含非 control plane 命名空间:

      ArgoCD CR 示例

      apiVersion: argoproj.io/v1beta1
      kind: ArgoCD
      metadata:
        name: example 1
        namespace: spring-petclinic 2
      spec:
        sourceNamespaces: 3
          - dev 4
          - app-team-* 5

      1
      用户定义的集群范围的 Argo CD 实例的名称。
      2
      要运行用户定义的集群范围的 Argo CD 实例的命名空间。
      3
      用于创建和管理应用程序资源的非 control plane 命名空间列表。
      4
      Argo CD 服务器的目标命名空间名称,用于 创建和管理应用程序资源
      5
      使用通配符(*),指定与模式 app-team suit 匹配的目标命名空间的名称,如 app-team-1app-team-2,用于 Argo CD 服务器来创建和管理应用程序资源。
    3. 单击 Save and Reload

      注意

      当在 sourceNamespaces 字段中指定目标命名空间时,Operator 会将 argocd.argoproj.io/managed-by-cluster-argocd 标签添加到指定的命名空间中。

      dev 目标命名空间示例

      apiVersion: v1
      kind: Namespace
      metadata:
        name: dev
        labels:
          argocd.argoproj.io/managed-by-cluster-argocd: spring-petclinic 1
          kubernetes.io/metadata.name: dev 2

      1
      用户定义的集群范围的 Argo CD 实例的命名空间。
      2
      Argo CD 服务器的目标命名空间,用于 创建和管理应用程序资源
  6. 验证 Operator 是否将 argocd.argoproj.io/managed-by-cluster-argocd 标签添加到指定命名空间中:

    1. 进入 AdministrationNamespaces,再点击 Create Namespace
    2. Create Namespace 对话框中,提供 Name 并点 Create

      例如,若要创建 dev 目标命名空间,请在 Name 字段中输入 dev。您可以重复前面的步骤来创建 app-team-1app-team-2 目标命名空间。

      Namespaces 页面显示创建的目标命名空间。

    3. 点目标命名空间并进入 YAML 选项卡,以验证 Operator 添加的 argocd.argoproj.io/managed-by-cluster-argocd 标签。
  7. 验证您的用户定义的集群范围的 Argo CD 实例是否已配置有集群角色来管理集群范围的资源:

    1. 进入 User ManagementRoles,然后从 Filter 列表中选择 Cluster-wide Roles
    2. 使用 Search by name 字段搜索创建的集群角色。例如,example-spring-petclinic-argocd-application-controllerexample-spring-petclinic-argocd-server

      Roles 页面显示创建的集群角色。

    3. 验证 GitOps Operator 创建了以下基于角色的访问控制(RBAC)资源:

      NameKind用途

      <argocd_name>-<argocd_namespace>-argocd-application-controller

      ClusterRoleClusterRoleBinding

      对于 Argo CD Application Controller,在集群级别监视和列出应用程序资源

      <argocd_name>-<argocd_namespace>-argocd-server

      ClusterRoleClusterRoleBinding

      对于 Argo CD 服务器,在集群级别监视和列出 应用程序资源

      <argocd_name>-<target_namespace>

      RoleRoleBinding

      要让 Argo CD 服务器通过 UI、API 或 CLI 管理目标命名空间中的 应用程序资源

3.3. 使用目标命名空间创建和配置用户定义的 AppProject 实例

作为集群管理员,您可以定义一组特定的非 control plane 命名空间,用户可以在其中创建、更新和协调 应用程序资源。使用目标命名空间配置用户定义的集群范围的 Argo CD 实例后,您必须在 openshift-gitops control plane 命名空间中创建和配置用户定义的 AppProject 实例。另外,您必须在用户定义的 AppProject 实例的 .spec.sourceNamespaces 字段中明确配置目标命名空间。

注意

GitOps control plane 命名空间中的应用程序(openshift-gitops)允许设置其 .spec.project 字段来引用任何 AppProject 实例,而不考虑 AppProject 自定义资源(CR)中的 .spec.sourceNamespaces 字段所放置的限制。

先决条件

  • 以管理员身份登陆到 OpenShift Container Platform 集群。
  • 您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps 1.13.0 或更高版本。

流程

  1. openshift-gitops control plane 命名空间中创建和配置用户定义的 AppProject 实例,以便在 .spec.sourceNamespaces 字段中指定目标命名空间:

    1. Project 列表中,选择 openshift-gitops 项目。
    2. 在 Web 控制台的 Administrator 视角中,点 OperatorsInstalled OperatorsRed Hat OpenShift GitOps,进入 AppProject 选项卡。
    3. Create AppProject,然后在 YAML 视图中输入以下配置:

      用户定义的 AppProject 实例示例

      kind: AppProject
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: project-one 1
        namespace: openshift-gitops 2
      spec:
        sourceNamespaces: 3
        - dev 4
        - app-team-* 5
        destinations: 6
          - name: '*'
            namespace: '*'
            server: '*'
         sourceRepos: 7
          - '*'

      1
      用户定义的 AppProject 实例的名称。
      2
      要运行用户定义的 AppProject 实例的 control plane 命名空间。
      3
      用于创建和管理应用程序资源的非 control plane 命名空间列表。
      4
      Argo CD 服务器的目标命名空间名称,用于 创建和管理应用程序资源
      5
      使用通配符(*),指定与模式 app-team suit 匹配的目标命名空间的名称,如 app-team-1app-team-2,用于 Argo CD 服务器来创建和管理应用程序资源。
      6
      对用户定义的 AppProject 实例中的应用程序可以部署到的集群和命名空间的引用。
      7
      引用用户定义的 AppProject 实例中应用程序可从中拉取清单的存储库。
    4. Create

      AppProjects 页面显示创建的用户定义的 AppProject 实例。

3.4. 创建并配置 Application CR 以引用目标命名空间和用户定义的 AppProject 实例

作为集群管理员,您可以定义一组特定的非 control plane 命名空间,用户可以在其中创建、更新和协调 应用程序资源。在用户定义的 AppProject 实例的 .spec.sourceNamespaces 字段中配置目标命名空间后,您必须使用 metadata.namespace.spec.project 字段的参数显式创建和配置 Application 自定义资源(CR)。

先决条件

  • 以管理员身份登陆到 OpenShift Container Platform 集群。
  • 您已在 OpenShift Container Platform 集群上安装 Red Hat OpenShift GitOps 1.13.0 或更高版本。

流程

  1. 使用 metadata.namespace.spec.project 字段的参数创建和配置 Application CR,以引用目标命名空间和用户定义的 AppProject 实例:

    1. Project 列表中,选择目标命名空间。
    2. 在 Web 控制台的 Administrator 视角中,点 OperatorsInstalled OperatorsRed Hat OpenShift GitOps,进入 Application 选项卡。
    3. Create Application,然后在 YAML 视图中输入以下配置:

      用户定义的 AppProject 实例示例

      kind: Application
      apiVersion: argoproj.io/v1alpha1
      metadata:
        name: cluster-configs 1
        namespace: dev 2
      spec:
        project: project-one 3
        # ...

      1
      应用程序的名称。
      2
      Argo CD 服务器的目标命名空间名称,用于 创建和管理应用程序资源
      3
      用户定义的 AppProject 实例的名称。
    4. Create

      Applications 页面显示创建的应用程序。

      cluster-configs Argo CD 应用程序现在的状态为 HealthySynced

3.5. 其他资源

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.