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
创建应用程序:
$ oc create -f openshift-gitops-getting-started/argo/app.yaml
运行
oc get
命令以查看所创建的应用程序:$ oc get application -n openshift-gitops
在部署应用程序的命名空间中添加标签,以便
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
应用程序示例。
流程
-
在 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
通过修改集群上的部署并扩展到两个容器集来测试自我修复行为,同时在 OpenShift Container Platform Web 控制台中观察应用程序。
运行以下命令修改部署:
$ oc scale deployment spring-petclinic --replicas 2 -n spring-petclinic
- 在 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
argocd
CLI。 - 已登陆到 Argo CD 实例。
流程
获取 Argo CD 服务器的
admin
帐户密码:$ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
获取 Argo CD 服务器 URL:
$ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
使用
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
通过列出所有应用程序,验证您是否可以在默认模式下运行
argocd
命令:$ argocd app list
如果配置正确,则使用以下标头列出现有应用程序:
输出示例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
在默认模式中创建应用程序:
$ 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
将
spring-petclinic
目标命名空间标记为由openshif-gitops
Argo CD 实例管理:$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有
Healthy
和Synced
状态:$ 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。
流程
使用
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
检查
kubeconfig
文件中是否正确设置了上下文:$ oc config current-context
将当前上下文的默认命名空间设置为
openshift-gitops
:$ oc config set-context --current --namespace openshift-gitops
设置以下环境变量来覆盖 Argo CD 组件名称:
$ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
通过列出所有应用程序,验证您能够在
核心
模式下运行argocd
命令:$ argocd app list --core
如果配置正确,则使用以下标头列出现有应用程序:
输出示例
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
以
核心
模式创建应用程序:$ 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
将
spring-petclinic
目标命名空间标记为由openshif-gitops
Argo CD 实例管理:$ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
列出可用的应用程序,以确认应用程序已被成功创建并重复该命令,直到应用程序具有
Healthy
和Synced
状态:$ 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
命名空间。
流程
- 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators。
- 从 Project 列表中,选择安装用户定义的集群范围的 Argo CD 实例的项目。
- 从安装的 Operator 列表中选择 Red Hat OpenShift GitOps,再进入 Argo CD 选项卡。
- 点用户定义的集群范围的 Argo CD 实例。
使用目标命名空间配置用户定义的集群范围的 Argo CD 实例的
ArgoCD
CR:-
点 YAML 选项卡,并编辑
ArgoCD
CR 的 YAML 文件。 在
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
单击 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
-
点 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)资源:
Name Kind 用途 <argocd_name>-<argocd_namespace>-argocd-application-controller
ClusterRole
和ClusterRoleBinding
对于 Argo CD
Application
Controller,在集群级别监视和列出应用程序资源<argocd_name>-<argocd_namespace>-argocd-server
ClusterRole
和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-gitops
control plane 命名空间中创建和配置用户定义的AppProject
实例,以便在.spec.sourceNamespaces
字段中指定目标命名空间:-
从 Project 列表中,选择
openshift-gitops
项目。 - 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators → Red Hat OpenShift GitOps,进入 AppProject 选项卡。
点 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-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
字段的参数创建和配置Application
CR,以引用目标命名空间和用户定义的AppProject
实例:- 从 Project 列表中,选择目标命名空间。
- 在 Web 控制台的 Administrator 视角中,点 Operators → Installed Operators → Red Hat OpenShift GitOps,进入 Application 选项卡。
点 Create Application,然后在 YAML 视图中输入以下配置:
用户定义的
AppProject
实例示例kind: Application apiVersion: argoproj.io/v1alpha1 metadata: name: cluster-configs 1 namespace: dev 2 spec: project: project-one 3 # ...
点 Create。
Applications 页面显示创建的应用程序。
cluster-configs
Argo CD 应用程序现在的状态为 Healthy 和 Synced。