Argo CD 应用程序
使用 Argo CD 仪表板、oc 工具或 GitOps CLI 在 OpenShift 集群中创建并部署应用程序
摘要
第 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 实例。
流程
- 在 Argo CD 控制面板中,单击 NEW APP 以添加新 Argo CD 应用。
对于此工作流,使用以下配置创建一个 spring-petclinic 应用程序:
- 应用程序名称
-
spring-petclinic - project
-
default - 同步策略
-
自动 - 仓库 URL
-
https://github.com/redhat-developer/openshift-gitops-getting-started - 修订
-
HEAD - 路径
-
app - 目的地
-
https://kubernetes.default.svc - 命名空间
-
spring-petclinic
- 单击 CREATE 以创建应用程序。
- 打开 Web 控制台的 Administrator 视角,再展开 Administration → Namespaces。
-
搜索并选择命名空间,然后在 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 实例。
流程
下载 示例应用程序:
git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
$ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建应用程序:
oc create -f openshift-gitops-getting-started/argo/app.yaml
$ oc create -f openshift-gitops-getting-started/argo/app.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
oc get命令以查看所创建的应用程序:oc get application -n openshift-gitops
$ oc get application -n openshift-gitopsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在部署应用程序的命名空间中添加标签,以便
openshift-gitops命名空间中的 Argo CD 实例可以管理它:oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
$ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitopsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. 验证 Argo CD 自助行为 复制链接链接已复制到粘贴板!
Argo CD 持续监控已部署应用程序的状态,检测 Git 中指定清单和集群中的实时更改之间的差别,然后自动更正它们。这个行为被称为自我管理。
您可以在 Argo CD 中测试并观察自我管理的行为。
先决条件
- 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
- 已登陆到 Argo CD 实例。
-
已部署并配置
app-spring-petclinic应用程序示例。
流程
-
在 Argo CD 仪表板中,验证您的应用程序是否具有
Synced状态。 -
点 Argo CD 仪表板中的
app-spring-petclinic标题,查看部署到集群中的应用程序资源。 - 在 OpenShift Container Platform web 控制台中进入 Developer 视角。
修改 Spring PetClinic 部署,并将更改提交到 Git 仓库的
app/目录。Argo CD 将自动将更改部署到集群。- Fork OpenShift GitOps getting started repository。
-
在
deployment.yaml文件中,将failureThreshold值改为5。 在部署集群中,运行以下命令验证
failureThreshold字段更改的值:oc edit deployment spring-petclinic -n spring-petclinic
$ oc edit deployment spring-petclinic -n spring-petclinicCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过修改集群上的部署并扩展到两个容器集来测试自我修复行为,同时在 OpenShift Container Platform Web 控制台中观察应用程序。
运行以下命令修改部署:
oc scale deployment spring-petclinic --replicas 2 -n spring-petclinic
$ oc scale deployment spring-petclinic --replicas 2 -n spring-petclinicCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 OpenShift Container Platform Web 控制台中,请注意部署最多扩展两个 pod,并立即缩减到一个 pod。Argo CD 检测到与 Git 存储库的区别,并在 OpenShift Container Platform 集群中自动修复应用程序。
- 在 Argo CD 仪表板中,点 app-spring-petclinic 标题 → APP DETAILS → EVENTS。EVENTS 选项卡显示以下事件: 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
argocdCLI。 - 已登陆到 Argo CD 实例。
流程
获取 Argo CD 服务器的
admin帐户密码:ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)$ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 Argo CD 服务器 URL:
SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')$ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
admin帐户密码以单引号登录到 Argo CD 服务器:重要将密码包含在单引号中,确保 shell 无法错误地解译特殊字符,如
$。始终使用单引号括起密码的字面值。argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}$ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing
$ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过列出所有应用程序,验证您是否可以在默认模式下运行
argocd命令:argocd app list
$ argocd app listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置正确,则使用以下标头列出现有应用程序:
输出示例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在默认模式中创建应用程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
spring-petclinic目标命名空间标记为由openshif-gitopsArgo CD 实例管理:oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有
Healthy和Synced状态:argocd app list
$ argocd app listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 使用 GitOps CLI 以核心模式创建应用程序 复制链接链接已复制到粘贴板!
您可以使用 GitOps argocd CLI 以 核心 模式创建应用程序。
先决条件
- 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
-
已安装 OpenShift CLI(
oc)。 -
已安装 Red Hat OpenShift GitOps
argocdCLI。
流程
使用
ocCLI 工具登录到 OpenShift Container Platform 集群:oc login -u <username> -p <password> <server_url>
$ oc login -u <username> -p <password> <server_url>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
$ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
kubeconfig文件中是否正确设置了上下文:oc config current-context
$ oc config current-contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将当前上下文的默认命名空间设置为
openshift-gitops:oc config set-context --current --namespace openshift-gitops
$ oc config set-context --current --namespace openshift-gitopsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置以下环境变量来覆盖 Argo CD 组件名称:
export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
$ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过列出所有应用程序,验证您能够在
核心模式下运行argocd命令:argocd app list --core
$ argocd app list --coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置正确,则使用以下标头列出现有应用程序:
输出示例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
核心模式创建应用程序:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
spring-petclinic目标命名空间标记为由openshif-gitopsArgo CD 实例管理:oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有
Healthy和Synced状态:argocd app list --core
$ argocd app list --coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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'
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) -
ApplicationCR
在非 control plane 命名空间中创建和管理应用程序资源的过程由以下步骤组成:
当您要为隔离的团队管理 Argo CD 应用程序部署时,此功能在多租户环境中很有用。
要防止应用程序团队的特权升级,您必须满足以下要求:
-
不要在任何 privileged
AppProject实例的.spec.sourceNamespaces字段中配置非 control plane 命名空间,例如,在openshift-gitopscontrol plane 命名空间或您定义的命名空间中安装的AppProjectCR的默认实例。 -
不要在
AppProjectCRD 中授予对openshift-gitopscontrol plane 命名空间的访问权限。 -
在
openshift-gitopscontrol 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命名空间。
流程
- 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators。
- 从 Project 列表中,选择安装用户定义的集群范围的 Argo CD 实例的项目。
- 从安装的 Operator 列表中选择 Red Hat OpenShift GitOps,再进入 Argo CD 选项卡。
- 点用户定义的集群范围的 Argo CD 实例。
使用目标命名空间配置用户定义的集群范围的 Argo CD 实例的
ArgoCDCR:-
点 YAML 选项卡,并编辑
ArgoCDCR 的 YAML 文件。 在
ArgoCDCR 中,将sourceNamespaces参数的值设置为包含非 control plane 命名空间:ArgoCDCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 单击 Save and Reload。
注意
-
点 YAML 选项卡,并编辑
验证 Operator 是否将
argocd.argoproj.io/managed-by-cluster-argocd标签添加到指定命名空间中:- 进入 Administration → Namespaces,再点击 Create Namespace。
在 Create Namespace 对话框中,提供 Name 并点 Create。
例如,若要创建
dev目标命名空间,请在 Name 字段中输入dev。您可以重复前面的步骤来创建app-team-1和app-team-2目标命名空间。Namespaces 页面显示创建的目标命名空间。
-
点目标命名空间并进入 YAML 选项卡,以验证 Operator 添加的
argocd.argoproj.io/managed-by-cluster-argocd标签。
验证您的用户定义的集群范围的 Argo CD 实例是否已配置有集群角色来管理集群范围的资源:
- 进入 User Management → Roles,然后从 Filter 列表中选择 Cluster-wide Roles。
使用 Search by name 字段搜索创建的集群角色。例如,
example-spring-petclinic-argocd-application-controller和example-spring-petclinic-argocd-server。Roles 页面显示创建的集群角色。
验证 GitOps Operator 创建了以下基于角色的访问控制(RBAC)资源:
Expand Name Kind 用途 <argocd_name>-<argocd_namespace>-argocd-application-controllerClusterRole和ClusterRoleBinding对于 Argo CD
ApplicationController,在集群级别监视和列出应用程序资源<argocd_name>-<argocd_namespace>-argocd-serverClusterRole和ClusterRoleBinding对于 Argo CD 服务器,在集群级别监视和列出
应用程序资源<argocd_name>-<target_namespace>Role和RoleBinding要让 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 或更高版本。
流程
在
openshift-gitopscontrol plane 命名空间中创建和配置用户定义的AppProject实例,以便在.spec.sourceNamespaces字段中指定目标命名空间:-
从 Project 列表中,选择
openshift-gitops项目。 - 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators → Red Hat OpenShift GitOps,进入 AppProject 选项卡。
点 Create AppProject,然后在 YAML 视图中输入以下配置:
用户定义的
AppProject实例示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用户定义的
AppProject实例的名称。 - 2
- 要运行用户定义的
AppProject实例的 control plane 命名空间。 - 3
- 用于创建和管理应用程序资源的非 control plane 命名空间列表。
- 4
- Argo CD 服务器的目标命名空间名称,用于
创建和管理应用程序资源。 - 5
- 使用通配符(
*),指定与模式app-team suit 匹配的目标命名空间的名称,如app-team-1和app-team-2,用于 Argo CD 服务器来创建和管理应用程序资源。 - 6
- 对用户定义的
AppProject实例中的应用程序可以部署到的集群和命名空间的引用。 - 7
- 引用用户定义的
AppProject实例中应用程序可从中拉取清单的存储库。
点 Create。
AppProjects 页面显示创建的用户定义的
AppProject实例。
-
从 Project 列表中,选择
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 或更高版本。
流程
使用
metadata.namespace和.spec.project字段的参数创建和配置ApplicationCR,以引用目标命名空间和用户定义的AppProject实例:- 从 Project 列表中,选择目标命名空间。
- 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators → Red Hat OpenShift GitOps,进入 Application 选项卡。
点 Create Application,然后在 YAML 视图中输入以下配置:
用户定义的
AppProject实例示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点 Create。
Applications 页面显示创建的应用程序。
cluster-configsArgo CD 应用程序现在的状态为 Healthy 和 Synced。