1.5. 应用程序高级配置
在 Red Hat Advanced Cluster Management for Kubernetes 中,应用程序由多个应用程序资源组成。您可以使用频道、订阅、放置和放置规则资源来帮助部署、更新和管理整个应用程序。
单集群和多集群应用程序使用相同的 Kubernetes 规格,但多集群应用程序涉及更多的部署和应用程序管理生命周期自动化。
Red Hat Advanced Cluster Management for Kubernetes 应用程序的所有应用程序组件资源都在 YAML 文件 spec 部分中定义。当需要创建或更新应用程序组件资源时,需要创建或编辑相应的部分,使其包含用于定义资源的标签。
查看以下与应用程序高级配置相关的内容:
1.5.1. 订阅 Git 资源
默认情况下,当订阅将订阅的应用程序部署到目标集群时,即使应用程序资源与其他命名空间关联,应用程序也会部署到该订阅命名空间中。订阅管理员可以更改默认行为,如 授予订阅管理员权限所述。
另外,如果应用程序资源存在于集群中,且不是由订阅创建,订阅就不能在该现有资源上应用新资源。作为订阅管理员,请查看以下流程来更改默认设置。
需要的访问权限:集群管理员
1.5.1.1. 在 Git 中创建应用程序资源
						您需要在订阅时在资源 YAML 中指定 apiVersion 的完整组和版本。例如,如果订阅 apiVersion: v1,订阅控制器无法验证订阅,您收到以下错误信息:Resource /v1, Kind=ImageStream is not supported。
					
						如果 apiVersion 被改为 image.openshift.io/v1,如以下示例所示,它会在订阅控制器中传递验证,并且资源被成功应用。
					
接下来,请参阅订阅管理员如何更改默认行为的更多示例。
1.5.1.2. 应用程序命名空间示例
在以下示例中,您以订阅管理员身份登录。
1.5.1.2.1. 应用到不同的命名空间
创建订阅以从 Git 存储库订阅示例资源 YAML 文件。示例文件包含位于以下不同命名空间中的订阅:
适用的频道类型: Git
- 
									ConfigMap test-configmap-1在multins命名空间中创建。
- 
									ConfigMap test-configmap-2在default命名空间中创建。
- ConfigMap - test-configmap-3在- subscription命名空间中创建。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
如果订阅由其他用户创建,则所有 ConfigMap 都会在与订阅相同的命名空间中创建。
1.5.1.2.2. 应用到同一命名空间
作为订阅管理员,您可能希望将所有应用程序资源部署到同一命名空间中。
您可以通过创建一个允许和拒绝列表作为订阅管理员,将所有应用程序资源部署到订阅命名空间中。
							将 apps.open-cluster-management.io/current-namespace-scoped: true 注解添加到订阅 YAML。例如,当订阅管理员创建以下订阅时,上例中的所有三个 ConfigMap 都在 subscription-ns 命名空间中创建。
						
1.5.1.3. 资源覆盖示例
适用的频道类型: Git、ObjectBucket(控制台中的对象存储)
						注: 资源覆盖选项不适用于 Git 存储库中的 helm chart,因为 helm chart 资源由 Helm 管理。
					
在本例中,目标集群中已存在以下 ConfigMap。
						从 Git 存储库订阅以下示例资源 YAML 文件,并替换现有的 ConfigMap。查看 data 规格中的变化:
					
1.5.1.3.1. 默认合并选项
							请参阅带有默认 apps.open-cluster-management.io/reconcile-option: merge 注解的 Git 存储库中的以下示例资源 YAML 文件。请参见以下示例:
						
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 会被合并,如下例所示:
							当使用 merge 选项时,订阅的资源中的条目会在现有资源中创建或更新。没有条目会从现有资源中删除。
						
重要: 如果要覆盖订阅的资源由其他操作员或控制器自动协调,资源配置由订阅以及控制器或操作员更新。在这种情况下不要使用这个方法。
1.5.1.3.2. mergeAndOwn 选项
							使用 mergeAndOwn 时,订阅的资源中的条目会在现有资源中创建或更新。作为订阅管理员登录,并使用 apps.open-cluster-management.io/reconcile-option: mergeAndOwn 注解创建一个订阅。请参见以下示例:
						
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 会被合并,如下例所示:
							如前所述,当使用 mergeAndOwn 选项时,订阅的资源中的条目会在现有资源中创建或更新。没有条目会从现有资源中删除。它还添加了 apps.open-cluster-management.io/hosting-subscription 注解,以指示资源现在归订阅所有。删除订阅会删除 ConfigMap。
						
1.5.1.3.3. 替换选项
							您可以以订阅管理员身份登录,并创建带有apps.open-cluster-management.io/reconcile-option: replace 注解的订阅。请参见以下示例:
						
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 将替换为以下内容:
1.5.1.4. 订阅特定的 Git 元素
您可以订阅特定 Git 分支、提交或标签。
1.5.1.4.1. 订阅特定分支
							multicloud-operators-subscription 仓库中包含的订阅 operator 订阅 Git 仓库的默认分支。如果要订阅到不同的分支,则需要在订阅中指定分支名称注解。
						
							以下示例 YAML 文件演示了如何通过 apps.open-cluster-management.io/git-branch: <branch1> 指定不同的分支:
						
1.5.1.4.2. 订阅特定提交
							multicloud-operators-subscription 仓库中包含的订阅 operator 默认订阅 Git 仓库的指定分支的最新提交。如果要订阅特定提交,则需要使用订阅中的提交散列(commit hash)指定所需的提交注解。
						
							在以下示例中,YAML 文件演示了如何通过 apps.open-cluster-management.io/git-desired-commit: <full commit number> 指定不同的提交:
						
							git-clone-depth 注解是可选的,默认设置为 20。这意味着订阅控制器会从 Git 存储库检索前 20 个提交历史记录。如果您指定了一个旧的 git-desired-commit,则需要为所需的提交相应地指定 git-clone-depth。
						
1.5.1.4.3. 订阅特定标签
							multicloud-operators-subscription 仓库中包含的订阅 operator 默认订阅 Git 仓库的指定分支的最新提交。如果要订阅特定标签,则需要在订阅中指定标签注解。
						
							以下示例显示,YAML 文件显示如何通过 apps.open-cluster-management.io/git-tag: <v1.0> 指定不同的标签:
						
注: 如果 Git 所需的提交和标签注解都被指定,标签将被忽略。
							git-clone-depth 注解是可选的,默认设置为 20。这意味着订阅控制器从 Git 仓库检索前 20 个提交历史记录。如果指定了旧的 git-tag,则需要为标签的所需提交相应地指定 git-clone-depth。
						
1.5.2. 授予订阅管理员权限
了解如何授予订阅管理员访问权限。订阅管理员可以更改默认行为。在以下过程中了解更多信息:
- 从控制台登录到 Red Hat OpenShift Container Platform 集群。
- 创建一个或多个用户。有关创建用户的信息,请参阅准备用户。您还可以准备组或服务帐户。 - 您创建的用户是 - app.open-cluster-management.io/subscription应用程序的管理员。在 OpenShift Container Platform 中,订阅管理员可以更改默认行为。您可以将这些用户组成一个组来代表订阅管理组群(在稍后会进行演示)。
- 在终端中登录 Red Hat Advanced Cluster Management 集群。
- 如果 - open-cluster-management:subscription-adminClusterRoleBinding 不存在,您需要创建它。请参见以下示例:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用以下命令在 - open-cluster-management:subscription-adminClusterRoleBinding 中添加以下 subjects 内容:- oc edit clusterrolebinding open-cluster-management:subscription-admin - oc edit clusterrolebinding open-cluster-management:subscription-admin- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 注: 在初始情况下, - open-cluster-management:subscription-adminClusterRoleBinding 没有 subject。- 您的 subject 可能如下所示: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.3. 以订阅管理员身份创建允许和拒绝列表
					作为订阅管理员,您可以从 Git 存储库应用程序订阅创建应用程序,该订阅中包含一个允许列表只允许部署指定 Kubernetes kind 资源。您还可以在应用程序订阅中创建 deny 列表,以拒绝部署特定 Kubernetes kind 资源。
				
					默认情况下,policy.open-cluster-management.io/v1 资源不会被应用程序订阅部署。为避免这种默认行为,应用程序订阅需要由订阅管理员部署。
				
					请参阅以下 allow 和 deny 规格示例:
				
					以下应用程序订阅 YAML 指定当应用程序从源存储库的 myapplication 目录部署时,它将仅部署 v1/Deployment 资源,即使源存储库中有其他资源:
				
					这个示例应用程序订阅 YAML 指定 v1/Service 和 v1/ConfigMap 资源以外的所有有效资源部署。您可以添加 "*" 来允许或拒绝 API 组中的所有资源类型,而不是列出 API 组中单独资源类型。
				
1.5.4. 添加协调选项
					您可以在单个资源中使用 apps.open-cluster-management.io/reconcile-option 注解来覆盖订阅级别的协调选项。
				
					例如,如果您在订阅中添加 apps.open-cluster-management.io/reconcile-option: replace 注解,在订阅的 Git 仓库的一个资源 YAML 中添加 apps.open-cluster-management.io/reconcile-option: merge 注解,则资源将在目标集群中合并,其他资源则在替换其他资源时合并。
				
1.5.4.1. 协调频率 Git 频道
						您可以选择在频道配置中选择协调频率选项: high、medium、low 和 off,以避免不必要的资源协调,并因此防止订阅 operator 的超载。
					
需要的访问权限: 管理员和集群管理员
						请参阅以下的 settings:attribute:<value> 定义:
					
- 
								Off:不自动协调部署的资源。Subscription自定义资源的更改会启动协调。您可以添加或更新标签或注解。
- 
								Low:部署的资源会每小时自动协调,即使源 Git 存储库没有改变。
- 
								Medium:这是默认设置。订阅 operator 每 3 分钟将当前部署的提交 ID 与源存储库的最新提交 ID 进行比较,并将更改应用到目标集群。每 15 分钟,所有资源都会从源 Git 存储库重新应用到目标集群,即使存储库没有改变。
- 
								High:部署的资源每两分钟自动协调,即使源 Git 存储库没有改变。
						您可以使用订阅引用的频道自定义资源中的 apps.open-cluster-management.io/reconcile-rate 注解进行设置。
					
						请参阅以下 name: git-channel 示例:
					
						在上例中,所有使用 sample/git-channel 的订阅都被分配了 low 协调频率。
					
- 
								当订阅协调率被设置为 low时,订阅的应用程序资源最多可能需要一小时才能完成协调。在单个应用程序视图的卡上,单击 Sync 以手动协调。如果设为off,则永远不会协调。
						无论频道中的 reconcile-rate 设置是什么,订阅都可以通过在 Subscription 自定义资源中指定 apps.open-cluster-management.io/reconcile-rate: off 注解来关闭自动协调。
					
						请参阅以下 git-channel 示例:
					
						git-subscription 部署的资源永远不会自动协调,即使 reconcile-rate 在频道中被设置为 high。
					
1.5.4.2. 协调频率 Helm 频道
每 15 分钟,订阅 operator 将当前部署 Helm chart 的哈希值与源仓库的哈希值进行比较。更改被应用到目标集群。资源协调的频率会影响其他应用程序部署和更新的性能。
例如,如果存在数百个应用程序订阅,并且您希望更频繁地协调所有订阅,则协调的响应时间会较慢。
根据应用程序的 Kubernetes 资源,适当的协调频率可以提高性能。
- 
								Off:不自动协调部署的资源。Subscription 自定义资源的更改会启动协调。您可以添加或更新标签或注解。
- 
								Low:订阅 operator 每小时将当前部署的哈希值与源存储库的哈希进行比较,并在发生更改时对目标集群应用更改。
- 
								Medium:这是默认设置。订阅 operator 每 15 分钟将当前部署的哈希值与源存储库的哈希进行比较,并在发生更改时对目标集群应用更改。
- 
								High:订阅 operator 每 2 分钟将当前部署的哈希值与源存储库的哈希进行比较,并在有更改时对目标集群应用更改。
						您可以使用订阅引用的 Channel 自定义资源中的 apps.open-cluster-management.io/reconcile-rate 注解进行设置。请参阅以下 helm-channel 示例:
					
						请参阅以下 helm-channel 示例:
					
						在本例中,所有使用 sample/helm-channel 的订阅都会被分配一个 low 协调频率。
					
						无论频道中的 reconcile-rate 设置是什么,订阅都可以通过在 Subscription 自定义资源中指定 apps.open-cluster-management.io/reconcile-rate: off 注解来关闭自动协调,如下例所示:
					
						在本例中,helm-subscription 部署的资源永远不会自动协调,即使 reconcile-rate 在频道中被设置为 high。
					
1.5.5. 为安全 Git 连接配置应用程序频道和订阅
Git 频道和订阅通过 HTTPS 或 SSH 连接到指定的 Git 存储库。以下应用程序频道配置可用于安全 Git 连接:
1.5.5.1. 使用用户和访问令牌连接到私有仓库
您可以使用频道和订阅连接到 Git 服务器。有关连接到具有用户和访问令牌的私有存储库,请参阅以下步骤:
- 在与频道相同的命名空间中创建 secret。将 - user字段设置为 Git 用户 ID,将- accessToken字段设置为 Git 个人访问令牌。值应该采用 base64 编码。请参阅以下填充的用户和 accessToken 示例:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用 secret 配置频道。请参阅以下带有 - secretRef填充的示例:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.5.2. 将不安全的 HTTPS 连接至 Git 服务器
您可以使用开发环境中的以下连接方法使用由自定义或自签名证书颁发机构签名的 SSL 证书,连接到私有托管 Git 服务器。但是,不建议在生产环境中使用这个步骤:
						在频道规格中指定 insecureSkipVerify: true。否则,与 Git 服务器的连接会失败,并显示类似如下的错误:
					
x509: certificate is valid for localhost.com, not localhost
x509: certificate is valid for localhost.com, not localhost关于这个方法,请查看以下频道规格添加的示例:
1.5.5.3. 在安全 HTTPS 连接中使用自定义 CA 证书
您可以使用这个连接方法使用由自定义或自签名证书认证机构签名的 SSL 证书安全地连接到托管的 Git 服务器。
- 创建包括 PEM 格式的 Git 服务器 root 和中间 CA 证书的 ConfigMap。ConfigMap 必须与频道 CR 位于同一命名空间中。字段名称必须是 - caCerts并使用- |。在以下示例中,可以注意到- caCerts可包含多个证书,如 root 和中间 CA:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用此 ConfigMap 配置频道。参阅上一步中的 - git-ca名称的以下示例:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.5.4. 生成到 Git 服务器的 SSH 连接
- 在 - data的- sshKey字段中创建一个 secret 来包含您的私有 SSH 密钥。如果密钥需要使用密码短语进行保护,在- passphrase字段中指定密码。此 secret 必须与频道 CR 位于同一命名空间中。使用- oc命令创建此 secret,以创建 secret generic- git-ssh-key --from-file=sshKey=./.ssh/id_rsa,然后添加以 base64 编码的- passphrase。请参见以下示例:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用 secret 配置频道。请参见以下示例: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 订阅控制器使用提供的 Git 主机名执行 - ssh-keyscan来构建- known_hosts列表,以防止 SSH 连接中的 Man-in-the-middle(MITM)攻击。如果要跳过此步骤并使用不安全的连接,请在频道配置中使用- insecureSkipVerify: true。这不是最佳方案,特别是在生产环境中。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.5.5. 更新证书和 SSH 密钥
如果 Git 频道连接配置需要更新,如 CA 证书、凭证或 SSH 密钥,则需要在同一命名空间中创建新 secret 和 ConfigMap,并更新频道以引用新的 secret 和 ConfigMap。如需更多信息,请参阅使用自定义 CA 证书进行安全 HTTPS 连接。
1.5.6. 设置 Ansible Tower 任务
					Red Hat Advanced Cluster Management 与 Ansible Tower 自动化集成,以便您可以为 Git 订阅应用程序管理创建 prehook 和 posthook AnsibleJob 实例。通过 Ansible Tower 作业,您可以自动完成任务并与外部服务(如 Slack 和 PagerDuty 服务)集成。您的 Git 仓库资源根路径将包含用于部署应用程序、更新应用程序或从集群中删除应用程序一部分的 Ansible Tower 作业的 prehook 和 posthook 目录。
				
需要的访问权限:集群管理员
1.5.6.1. 先决条件
- OpenShift Container Platform 4.6 或更高版本
- 已安装 Ansible Tower 版本 3.7.3 或更高版本。安装最新版本的 Ansible Tower 是最佳实践方案。如需更多详细信息,请参阅 Red Hat AnsibleTower 文档。
- 安装 Ansible Automation Platform Resource Operator,将 Ansible 作业连接到 Git 订阅的生命周期。为了获得最佳结果,在使用 AnsibleJob 启动 Ansible Tower 作业时,Ansible Tower 作业模板在运行时应该是等价的。
						在 INVENTORY 和 EXTRA VARIABLES 模板中检查 PROMPT ON LAUNCH。如需更多信息,请参阅 作业模板。
					
- 登录您的 OpenShift Container Platform 集群控制台。
- 在控制台导航中点 OperatorHub。
- 搜索并安装 Ansible Automation Platform Resource Operator。注: 要提交 prehook 和 posthook - AnsibleJobs,请使用不同 OpenShift Container Platform 版本中的相应版本安装 Ansible Automation Platform(AAP)资源 Operator:- OpenShift Container Platform 4.6 需要(AAP)资源 Operator early-access
- OpenShift Container Platform 4.7 需要(AAP)资源 Operator early-access、stable-2.1
- OpenShift Container Platform 4.8 需要(AAP)Resource Operator early-access、stable-2.1、stable-2.2
- OpenShift Container Platform 4.9 需要(AAP)Resource Operator early-access、stable-2.1、stable-2.2
- OpenShift Container Platform 4.10 需要(AAP)Resource Operator stable-2.1, stable-2.2
 
1.5.6.3. 设置凭证
您可以从控制台的 Credentials 页面创建所需的凭证。点 Add credential,或者从导航中访问该页面。如需更多信息,请参阅为 Ansible Automation Platform 创建凭证。
1.5.6.4. Ansible 集成
您可以将 Ansible Tower 任务集成到 Git 订阅中。例如,对于数据库前端和后端应用程序,数据库需要使用带有 Ansible 作业的 Ansible Tower 进行实例化,应用程序由 Git 订阅安装。在使用订阅部署前端和后端应用程序 前,数据库会被实例化。
						应用程序订阅 Operator 被改进,以定义两个子文件夹: prehook 和 posthook。这两个文件夹都位于 Git 仓库资源根路径中,并分别包含所有 prehook 和 posthook Ansible 作业。
					
创建 Git 订阅时,所有 pre AnsibleJob 和 post AnsibleJob 资源都会作为对象解析并存储在内存中。应用程序订阅控制器决定何时创建 AnsibleJob 实例。
1.5.6.5. Ansible Operator 组件
						在创建订阅 CR 时,Git-branch 和 Git-path 会指向 Git 存储库根位置。在 Git root 位置中,两个子文件夹 prehook 和 posthook 应该至少包含一个 Kind:AnsibleJob 资源。
					
1.5.6.5.1. Prehook
							应用程序订阅控制器在 prehook 文件夹中搜索所有 Kind:AnsibleJob CR,作为 prehook AnsibleJob 对象,然后生成新的 prehook AnsibleJob 实例。新实例名称是 prehook AnsibleJob 对象名称和随机后缀字符串。
						
							一个实例名称示例: database-sync-1-2913063。
						
							应用程序订阅控制器在 1 分钟循环中再次对协调请求进行队列,它会在 prehook AnsibleJob status.anisibleJobResult 中检查。当 prehook status.ansibleJobResult.status 的状态为 successful 时,应用程序订阅将继续部署主订阅。
						
1.5.6.5.2. Posthook
							更新应用程序订阅状态时,如果订阅状态被订阅或传播到订阅状态的所有目标集群,应用程序订阅控制器会将 posthook 文件夹中的所有 AnsibleJob Kind CR 搜索为 posthook AnsibleJob 对象。然后,它会生成新的 posthook AnsibleJob 实例。新实例名称是 posthook AnsibleJob 对象名称以及一个随机的后缀字符串。
						
							一个实例名称示例: service-ticket-1-2913849。
						
1.5.6.5.3. Ansible 放置规则
通过有效的 prehook AnsibleJob,订阅会启动 prehook AnsibleJob 而不受放置规则的影响。例如,您可以有一个 prehook AnsibleJob,它无法传递放置规则订阅。当放置规则更改时,会创建新的 prehook 和 posthook AnsibleJob 实例。
1.5.6.6. Ansible 配置
您可以使用以下任务配置 Ansible Tower 配置:
1.5.6.6.1. Ansible secret
您必须在同一订阅命名空间中创建一个 Ansible Tower secret CR。Ansible Tower secret 仅限于相同的订阅命名空间。
							在控制台的 Ansible Tower secret name 部分填充相关的数据来创建 secret。要使用终端创建 secret,编辑并应用以下 yaml:
						
运行以下命令来添加 YAML 文件:
oc apply -f
oc apply -f请参见以下 YAML 示例:
							注: namespace 与订阅命名空间相同。stringData:token 和 host 来自 Ansible Tower。
						
							当应用程序订阅控制器创建 prehook 和 posthook AnsibleJobs 时,如果 subscription spec.hooksecretref 中的 secret 可用,则会将其发送到 AnsibleJob CR spec.tower_auth_secret,AnsibleJob 可以访问 Ansible Tower。
						
1.5.6.7. 设置 secret 协调
对于带有 prehook 和 posthook AnsibleJobs 的主订阅,在 Git 存储库中更新所有 prehook 和 posthook AnsibleJobs 或主订阅后,应当协调主订阅。
Prehook AnsibleJobs 和主订阅持续协调并重新启动新的 AnsibleJob 实例。
- 完成 pre-AnsibleJob 后,重新运行主订阅。
- 如果主订阅中有任何规格更改,请重新部署订阅。应更新主要的订阅状态,使其与重新部署过程保持一致。
- 将 hub 订阅的状态重置为 - nil。订阅会与目标集群上的订阅部署一起刷新。- 当目标集群上的部署完成时,目标集群上的订阅状态会更新为 - "subscribed"或- "failed",并同步到 hub 集群订阅状态。
- 完成主订阅后,重新启动一个新的 AnsibleJob 实例。
- 验证 DONE 订阅已更新。请参见以下输出: - 
										subscription.status == "subscribed"
- 
										subscription.status == "propagated"带有所有目标集群"subscribed"
 
- 
										subscription.status == 
						创建 AnsibleJob CR 时,会创建一个 Kubernetes 作业 CR,通过与目标 Ansible Tower 通信来启动 Ansible Tower 作业。作业完成后,作业的最终状态将返回 AnsibleJob status.ansibleJobResult。
					
备注:
Ansible Job operator 保留 AnsibleJob status.conditions 以存储 Kubernetes 作业结果的创建。status.conditions 并不反映实际 Ansible Tower 作业状态。
						订阅控制器会根据 AnsibleJob.status.ansibleJobResult 而不是 AnsibleJob.status.conditions 检查 Ansible Tower 作业状态。
					
如 prehook 和 posthook AnsibleJob 工作流中所述,当 Git 存储库中更新了主订阅时,会创建一个新的 prehook 和 posthook AnsibleJob 实例。因此,一个主订阅可以链接到多个 AnsibleJob 实例。
subscription.status.ansibleJobs 中定义了四个字段:
- lastPrehookJobs:最新的 prehook AnsibleJobs
- prehookJobsHistory:所有 prehook AnsibleJobs 历史记录
- lastPosthookJobs:最近的 posthook AnsibleJobs
- posthookJobsHistory:所有 posthook AnsibleJobs 历史记录
1.5.6.8. Ansible YAML 示例
						请参阅 Git prehook 和 posthook 文件夹中的 AnsibleJob .yaml 文件示例:
					
1.5.7. 为 OpenShift GitOps operator 配置受管集群
要配置 GitOps,您可以将一个或多个 Red Hat Advanced Cluster Management for Kubernetes 受管集群的集合注册到 Red Hat OpenShift Container Platform GitOps operator 实例。注册后,您可以将应用程序部署到这些集群中。设置一个持续 GitOps 环境,以在开发、临时和生产环境中的集群间自动实现应用程序一致性。
1.5.7.1. 先决条件
- 您需要在 Red Hat Advanced Cluster Management for Kubernetes 上安装 Red Hat OpenShift GitOps Operator。
- 导入一个或多个受管集群。
1.5.7.2. 将受管集群注册到 GitOps
- 创建受管集群集,并将受管集群添加到这些受管集群集中。请参阅 multicloud-integrations managedclusterset 中的受管集群集示例。 - 如需更多信息,请参阅创建和管理 ManagedClusterSets 文档。 
- 创建受管集群集绑定到部署 Red Hat OpenShift Container Platform GitOps 的命名空间。 - 请参阅 multicloud-integrations managedclustersetbinding 命名空间中的示例,它绑定到 - openshift-gitops命名空间。- 如需更多信息,请参阅创建 ManagedClusterSetBinding 资源文档。 
- 在受管集群集绑定中使用的命名空间中,创建一个放置自定义资源来选择要注册到 OpenShift Container Platform GitOps operator 实例的一组受管集群。您可以在 multicloud-integration placement 中使用软件仓库中的示例 - 如需放置信息,请参阅使用 ManagedClusterSets with Placement。 - 注: 只有 OpenShift Container Platform 集群注册到 Red Hat OpenShift Container Platform GitOps operator 实例,而不是其他 Kubernetes 集群。 
- 创建 - GitOpsCluster自定义资源,将一组受管集群从放置决定注册到指定的 Red Hat OpenShift Container Platform GitOps 实例。这可让 Red Hat OpenShift Container Platform GitOps 实例将应用程序部署到任何 Red Hat Advanced Cluster Management 受管集群。- 使用 multicloud-integrations gitops cluster 中的软件仓库中的示例。 - 注:引用的 - 放置资源必须与- GitOpsCluster资源位于同一个命名空间中。- 请参阅以下示例, - placementRef.name是- all-openshift-clusters的示例,并指定为在- argoNamespace: openshift-gitops中安装的 GitOps 实例的目标集群。- argoServer.cluster规格需要- local-cluster值。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 保存您的更改。现在,您可以按照 GitOps 工作流来管理应用程序。请参阅关于 GitOps 以了解更多信息。
1.5.7.3. GitOps 令牌
						当您通过放置和 ManagedClusterSetBinding 自定义资源与 GitOps operator 集成时,会在命名空间中创建一个令牌来访问 ManagedCluster 命名空间。GitOps 控制器需要把资源同步到受管集群。当用户获得一个管理员访问 GitOps 命名空间以执行应用程序生命周期操作时,用户也获得了对受管集群的此 secret 和 admin 级别的访问权限。
					
						如果需要这样做,而不是将用户绑定到命名空间范围的 admin 角色,请使用更严格的自定义角色,以及与可创建和用于绑定用户的应用程序资源所需的权限。请参阅以下 ClusterRole 示例:
					
1.5.8. 调度部署
如果需要只在特定时间部署新的 Helm Chart 或其他资源,或更改 Helm Chart 或其他资源,您可以为这些资源定义订阅,以便只在特定时间才进行部署。另外,您可以限制部署。
例如,您可以把每周五的晚上 10 点到 11 点期间定义为调度的维护窗口期,只在此期间对集群应用补丁或进行其他应用程序的更新。
您可以限制或阻止在一个指定的时间窗期间开始部署,比如避免在商业高峰期内进行部署。例如,为了避免高峰期,您可以定义一个时间窗以避免在早上 8 点到下午 8 点间进行部署。
通过为订阅定义时间窗,您可以协调所有应用程序和集群的更新。例如,您可以定义订阅以只在 6:01 PM 和 11:59 PM 之间部署新的应用程序资源,并定义其他订阅仅在 12:00 AM 到 7:59 AM 之间部署这些资源的更新版本。
当为订阅定义一个时间窗时,则定义了订阅处于活跃变化的时间范围。作为定义时间窗的一部分,您可以指定在该窗口中订阅是 active(活跃) 或 blocked(阻止)状态。
只有在订阅处于活跃状态时,才会开始部署新的或更改的资源。无论订阅是活跃还是被阻止,订阅都会继续监控任何新的或被更改的资源。活跃和阻止的设置仅会影响到部署。
当检测到新的或更改的资源时,时间窗定义决定订阅的下一步操作。
- 
							对于 HelmRepo、ObjectBucket和Git类型的频道的订阅:
- 如果在订阅是 active 的时间范围内检测到资源,则开始部署资源。
- 如果在订阅无法运行部署时检测到资源,部署资源的请求会被缓存。当订阅在下一个活跃时间时,缓存的请求会被应用并开始相关的部署。
- 当时间窗为 blocked 时,之前由应用程序订阅部署的所有资源仍会保留。在窗口再次激活前,任何新的更新都会被阻止。
最终用户可能会错误地认为应用程序子时间窗被阻止,所有部署的资源都会被删除。当应用程序子时间窗再次处于活跃状态时,他们将返回。
如果部署在指定的时间窗内开始,并在定义的时间窗结束时仍在运行,部署将继续运行以完成。
要为订阅定义时间窗,您需要在订阅资源定义 YAML 中添加所需的字段和值。
- 作为定义时间窗的一部分,您可以使用天和小时定义时间窗。
- 您还可以定义时间窗类型,这决定了部署可以开始的时间窗是在指定的时间段内还是在指定的时间段外。
- 
							如果时间窗类型是 active,则部署只能在指定的时间范围内开始。当希望部署只在特定的维护窗口中进行时,您可以使用此设置。
- 
							如果时间窗类型是 block,则部署不能在指定的时间范围内启动,但可以在任何其他时间开始。当您有需要的关键更新,同时需要避免在指定时间范围内进行部署,则可以使用这个设置。例如,您可以使用这个设置类型来定义一个时间窗,允许在 10 AM 到 2:00 PM 这个时间段外随时应用与安全相关的更新。
- 您可以为订阅定义多个时间窗,如在每周一和周三定义时间窗。
1.5.9. 配置软件包覆盖
为订阅中所订阅的 Helm chart 或 Kubernetes 资源的订阅覆盖值配置软件包覆盖。
					要配置软件包覆盖,请将 Kubernetes 资源 spec 中要覆盖的字段指定为 path 字段的值。将替换值指定为 value 字段的值。
				
					例如,如果您需要在订阅的 Helm Chart 的 Helm 发行版本的 spec 中覆盖 values 字段,则需要将订阅定义中的 path 字段的值设置为 spec。
				
packageOverrides:
- packageName: nginx-ingress
  packageOverrides:
  - path: spec
    value: my-override-values
packageOverrides:
- packageName: nginx-ingress
  packageOverrides:
  - path: spec
    value: my-override-values
					value 字段的内容用于覆盖 Helm spec 的 spec 字段中的值。
				
- 
							在 Helm 发行版本中,spec字段的覆盖值合并到发行版本values.yaml文件中,以覆盖现有的值。此文件用于检索 Helm 发行版本的可配置变量。
- 如果您需要覆盖 Helm 发行版本的发行版本名称,请在定义中包含 - packageOverride部分。通过包含以下字段为 Helm 发行版本定义- packageAlias:- 
									用于标识 Helm chart 的 packageName。
- 用于表示您将覆盖发行版本名称的 - packageAlias。- 默认情况下,如果没有指定 Helm 发行版本名称,则使用 Helm chart 名称来标识该发行版本。在某些情况下,比如有多个发行版本订阅了同一 chart 时,可能会发生冲突。发行版本名称在命名空间中的不同订阅之间必须是唯一的。如果您创建的订阅的发行版本名称不是唯一的,则会出现错误。您必须通过定义 - packageOverride为您的订阅设置不同的发行版本名称。如果要在现有订阅中更改名称,必须首先删除该订阅,然后使用首选发行版本名称重新创建订阅。
 - packageOverrides: - packageName: nginx-ingress packageAlias: my-helm-release-name - packageOverrides: - packageName: nginx-ingress packageAlias: my-helm-release-name- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
									用于标识 Helm chart 的 
1.5.10. 频道示例概述
					查看可以用来构建文件的示例和 YAML 定义。频道 (channel.apps.open-cluster-management.io) 为您提供改进的持续集成以及持续交付功能,以便创建和管理 Red Hat Advanced Cluster Management for Kubernetes 应用程序。
				
要使用 OpenShift CLI 工具,请参阅以下流程:
- 使用您首选的编辑工具编写并保存您的应用程序 YAML 文件。
- 运行以下命令,将文件应用到 API 服务器。将 - filename替换为您的文件名称:- oc apply -f filename.yaml - oc apply -f filename.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令验证您的应用程序资源是否已创建: - oc get application.app - oc get application.app- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.10.1. 频道 YAML 结构
						有关您可以部署的应用程序示例,请参阅 stolostron 存储库。
					
以下 YAML 结构显示频道的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含一些必需字段和值。根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具和产品控制台编写您自己的 YAML 内容。
1.5.10.2. 频道 YAML 表
| 字段 | 描述 | 
|---|---|
| apiVersion | 
										必需。将值设为  | 
| kind | 
										必需。将值设为  | 
| metadata.name | 必需。频道的名称。 | 
| metadata.namespace | 必需。频道的命名空间;除 Git 频道外,每个频道都需要一个唯一的命名空间。 | 
| spec.sourceNamespaces | 可选。标识频道控制器监控的命名空间,看是否有新的或已更新的可部署资源以检索并提升到频道。 | 
| spec.type | 
										必需。频道类型。支持的类型有:  | 
| spec.pathname | 
										对于  | 
| spec.secretRef.name | 
										可选。标识用于身份验证的 Kubernetes Secret 资源,如用于访问仓库或 chart。您只能对  | 
| spec.gates | 
										可选。定义在频道中提升可部署资源的要求。如果没有设置任何要求,则会将添加到频道命名空间或源的任何可部署资源提升到频道。 | 
| spec.gates.annotations | 可选。频道注解。可部署资源必须具有匹配的注解才能包含在频道中。 | 
| metadata.labels | 可选。频道的标签。 | 
| spec.insecureSkipVerify | 
										可选。默认值为  | 
频道的定义结构类似以下 YAML 内容:
1.5.10.3. Object storage bucket (ObjectBucket) 频道
以下示例频道定义将对象存储桶抽象为频道:
1.5.10.4. Helm 仓库 (HelmRepo) 频道
以下示例频道定义将 Helm 仓库抽象为频道:
						弃用备注: 对于 2.5,在频道 ConfigMap 引用中指定 insecureSkipVerify: "true" 来跳过 Helm repo SSL 证书已被弃用。请参阅以下示例,它使用 spec.insecureSkipVerify: true 进行替换:
					
以下频道定义显示了 Helm 仓库频道的另一个示例:
						注: 对于 Helm, Helm chart 中包含的所有 Kubernetes 资源必须具有标签发行版本{{ .Release.Name }} 才能正确显示应用程序拓扑。
					
1.5.10.5. Git(Git)仓库频道
						以下示例频道定义显示了 Git 仓库的频道示例。在以下示例中,secretRef 是指用于访问 pathname 中指定的 Git 仓库的用户身份。如果您有一个公共存储库,则不需要 secretRef 标签和值:
					
1.5.11. 订阅示例概述
					查看可以用来构建文件的示例和 YAML 定义。和频道一样,订阅 (subscription.apps.open-cluster-management.io) 为您提供改进的持续集成和持续交付功能以用于应用程序管理。
				
要使用 OpenShift CLI 工具,请参阅以下流程:
- 使用您首选的编辑工具编写并保存您的应用程序 YAML 文件。
- 运行以下命令,将您的 文件应用到 api 服务器。将 - filename替换为您的文件名称:- oc apply -f filename.yaml - oc apply -f filename.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令验证您的应用程序资源是否已创建: - oc get application.app - oc get application.app- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.11.1. 订阅 YAML 结构
以下 YAML 结构显示订阅的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含某些必需字段和值。
根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具编写您自己的 YAML 内容:
1.5.11.2. 订阅 YAML 表
| 字段 | 描述 | 
|---|---|
| apiVersion | 
										必需。将值设为  | 
| kind | 
										必需。将值设为  | 
| metadata.name | 必需。用于标识订阅的名称。 | 
| metadata.namespace | 必需。用于订阅的命名空间资源。 | 
| metadata.labels | 可选。订阅的标签。 | 
| spec.channel | 
										可选。为订阅定义频道的命名空间名称("Namespace/Name")。定义  | 
| spec.sourceNamespace | 
										可选。将可部署资源存储在 hub 集群上的源命名空间。仅将该字段用于命名空间频道。定义  | 
| spec.source | 
										可选。存储可部署资源的 Helm 仓库的路径名称 ("URL")。仅将该字段用于 Helm 仓库频道。定义  | 
| spec.name | 
										对于  | 
| spec.packageFilter | 可选。定义用来查找目标可部署资源或一个可部署资源子集的参数。如果定义了多个过滤器条件,则可部署资源必须满足所有过滤器条件。 | 
| spec.packageFilter.version | 
										可选。可部署资源的一个或多个版本。您可以使用  | 
| spec.packageFilter.annotations | 可选。可部署资源的注解。 | 
| spec.packageOverrides | 可选。用于为订阅中所订阅的 Kubernetes 资源(如 Helm chart、可部署资源或频道中的其他 Kubernetes 资源)定义覆盖的部分。 | 
| spec.packageOverrides.packageName | 可选,但在设置覆盖时是必需的。标识将被覆盖的 Kubernetes 资源。 | 
| spec.packageOverrides.packageAlias | 可选。为将被覆盖的 Kubernetes 资源指定别名。 | 
| spec.packageOverrides.packageOverrides | 可选。用于覆盖 Kubernetes 资源的参数和替换值配置。 | 
| spec.placement | 必需。标识需要放置可部署资源的订阅集群,或标识定义集群的放置规则。使用放置配置为多集群部署定义值。 | 
| spec.placement.local | 
										可选,但对于独立集群或者您想要直接管理的集群是必需的。定义是否必须在本地部署订阅。将值设为  | 
| spec.placement.clusters | 
										可选。定义要放置订阅的集群。仅使用  | 
| spec.placement.clusters.name | 可选,但在定义订阅集群时是必需的。订阅集群的一个或多个名称。 | 
| spec.placement.clusterSelector | 
										可选。定义标签选择器,用于标识要放置订阅的集群。仅使用  | 
| spec.placement.placementRef | 
										可选。定义用于订阅的放置规则。仅使用  | 
| spec.placement.placementRef.name | 可选,但在使用放置规则时是必需的。订阅的放置规则名称。 | 
| spec.placement.placementRef.kind | 
										可选,但在使用放置规则时是必需的。将值设为  | 
| spec.overrides | 可选。需要覆盖的任何参数和值,如特定于集群的设置。 | 
| spec.overrides.clusterName | 可选。参数和值将被覆盖的一个或多个集群的名称。 | 
| spec.overrides.clusterOverrides | 可选。要覆盖的参数和值的配置。 | 
| spec.timeWindow | 可选。定义用于在订阅处于活跃状态或受阻时配置时间窗的设置。 | 
| spec.timeWindow.type | 可选,但在配置时间窗时是必需的。表示订阅在配置的时间窗内是处于活跃状态还是受阻。只有在订阅处于活跃状态时才会进行订阅的部署。 | 
| spec.timeWindow.location | 可选,但在配置时间窗时是必需的。为时间窗配置的时间范围的时区。所有时区都必须使用 Time Zone (tz) 数据库名称格式。如需更多信息,请参阅Time Zone 数据库。 | 
| spec.timeWindow.daysofweek | 
										可选,但在配置时间窗时是必需的。表示当使用了时间范围来创建时间窗时的每周天数。每周天数列表必须定义为数组,如  | 
| spec.timeWindow.hours | 可选,但在配置时间窗时是必需的。定义时间窗的时间范围。必须为每个时间窗定义小时范围的开始时间和结束时间。您可以为订阅定义多个时间窗范围。 | 
| spec.timeWindow.hours.start | 
										可选,但在配置时间窗时是必需的。定义时间窗开始的时间戳。时间戳必须使用 Go 编程语言 Kitchen 格式  | 
| spec.timeWindow.hours.end | 
										可选,但在配置时间窗时是必需的。定义时间窗结束的时间戳。时间戳必须使用 Go 编程语言 Kitchen 格式  | 
备注:
- 
								在定义 YAML 时,订阅可以使用 packageFilters来指向多个 Helm chart、可部署资源或其他 Kubernetes 资源。但是,订阅只会部署一个 chart、可部署资源或其他资源的最新版本。
- 
								对于时间窗,当您定义一个时间窗的时间范围时,必须将开始时间设置在结束时间之前。如果您要为订阅定义多个时间窗,时间窗的时间范围不能重叠。实际时间范围基于 subscription-controller容器时间,可以设置为与您所在的时间和位置不同的时间和位置。
- 在订阅规格中,您还可以定义 Helm 发行版本的放置位置作为订阅定义的一部分。每个订阅都可以引用现有的放置规则,或者在订阅定义中直接定义放置规则。
- 
								当您要在 spec.placement部分中定义订阅的放置位置时,对于多集群环境仅使用cclusters、clusterSelector或placementRef中的一个。
- 如果您包含多个放置设置,则会使用一个设置,其他设置将被忽略。以下优先级用于决定订阅 operator 使用哪个设置: - 
										placementRef
- 
										clusters
- 
										clusterSelector
 
- 
										
您的订阅类似以下 YAML 内容:
1.5.11.3. 订阅文件示例
						有关您可以部署的应用程序示例,请参阅 stolostron 存储库。
					
1.5.11.4. 二级频道示例
						如果存在镜像的频道(应用程序源存储库),您可以在订阅 YAML 中指定 secondaryChannel。当应用程序订阅无法使用主频道连接到仓库服务器时,它会使用二级频道连接到仓库服务器。确保存储在二级频道中的应用程序清单与主频道同步。请参阅以下使用 secondaryChannel 的订阅 YAML 示例。
					
1.5.11.4.1. 订阅时间窗示例
以下示例订阅包含多个配置的时间窗。每个周一、周三和周五的 10:20 AM 到 10:30 AM 之间有一个时间窗。一个时间窗也在每周、周三和周五的 12:40 PM 到 1:40 PM 之间发生。订阅只在这 6 个每周时间窗内开始部署。
1.5.11.4.2. 带有覆盖的订阅示例
							以下示例包含软件包覆盖,以定义 Helm chart 的 Helm 发行版本的不同版本名称。软件包覆盖设置用于将名称 my-nginx-ingress-releaseName 设置为 nginx-ingress Helm 发行版本的不同发行版本名称。
						
1.5.11.4.3. Helm 仓库订阅示例
							以下订阅会自动拉取版本 1.36.x 的最新 nginx Helm 发行版本。当源 Helm 仓库中有新版本可用时,Helm 发行版本可部署资源会放置在 my-development-cluster-1 集群上。
						
							spec.packageOverrides 部分显示了用于覆盖 Helm 发行版本值的可选参数。覆盖值合并到 Helm 发行版本 values.yaml 文件中,用于检索 Helm 发行版本的可配置变量。
						
1.5.11.4.4. Git 仓库订阅示例
1.5.11.4.4.1. 订阅 Git 仓库的特定分支和目录
								在本示例订阅中,注解 apps.open-cluster-management.io/git-path 表示订阅中订阅了频道中指定的 Git 仓库 sample_app_1/dir1 目录中的所有 Helm chart 和 Kubernetes 资源。默认情况下会在订阅中订阅 master 分支(branch)。在本示例订阅中,指定了注解 apps.open-cluster-management.io/git-branch: branch1 来订阅仓库的 branch1 分支。
							
备注:
- 
										当您使用订阅 Helm chart 的 Git 频道订阅时,资源拓扑视图可能会显示额外的 Helmrelease资源。此资源是内部应用管理资源,可以安全地忽略。
1.5.11.4.4.2. 添加 .kubernetesignore 文件
								您可以在 Git 仓库根目录中,或者在订阅注解中指定的 apps.open-cluster-management.io/git-path 目录中包含 .kubernetesignore 文件。
							
								您可以使用此 .kubernetesignore 文件指定文件和/或子目录模式,以在订阅部署仓库中的 Kubernetes 资源或 Helm chart 时忽略它们。
							
								您还可以使用 .kubernetesignore 文件进行精细过滤,以选择性地应用 Kubernetes 资源。.kubernetesignore 文件的特征格式与 .gitignore 文件相同。
							
								如果没有定义 apps.open-cluster-management.io/git-path 注解,订阅会在仓库根目录中查找 .kubernetesignore 文件。如果定义了 apps.open-cluster-management.io/git-path 字段,订阅会在 apps.open-cluster-management.io/git-path 目录中查找 .kubernetesignore 文件。订阅不会在任何其他目录中搜索 .kubernetesignore 文件。
							
1.5.11.4.4.3. 应用 Kustomize
								如果订阅的 Git 文件夹中有 kustomization.yaml 或 kustomization.yml 文件,则会应用 kustomize。您可以使用 spec.packageOverrides 在订阅部署时覆盖 kustomization。
							
								为了覆盖 kustomization.yaml 文件,需要在 packageOverrides 中使用 packageName: kustomization。覆盖操作会添加新条目或更新现有条目。它不会移除现有的条目。
							
1.5.11.4.4.4. 启用 Git Webhook
默认情况下,Git 频道订阅每分钟克隆频道中指定的 Git 仓库,并在提交 ID 发生更改时应用更改。另外,您还可以将订阅配置为仅在 Git 仓库发送存储库 PUSH 和 PULL webhook 事件通知时应用更改。
要在 Git 仓库中配置 webhook,需要一个目标 webhook 有效负载 URL 和可选的 secret。
1.5.11.4.4.4.1. 有效负载(Payload) URL
在 hub 集群中创建路由(ingress),以公开订阅 operator 的 webhook 事件监听程序服务。
oc create route passthrough --service=multicluster-operators-subscription -n open-cluster-management
oc create route passthrough --service=multicluster-operators-subscription -n open-cluster-management
									然后,使用 oc get route multicluster-operators-subscription -n open-cluster-management 命令查找外部可访问的主机名。
								
									webhook 有效负载 URL 是 https://<externally-reachable hostname>/webhook。
								
1.5.11.4.4.4.2. Webhook secret
									Webhook secret 是可选的。在频道命名空间中创建 Kubernetes secret。secret 必须包含 data.secret。
								
请参见以下示例:
									data.secret 的值是您要使用的 base-64 编码 WebHook secret。
								
最佳实践:为每个 Git 仓库使用唯一的 secret。
1.5.11.4.4.4.3. 在 Git 仓库中配置 WebHook
使用有效负载 URL 和 webhook secret 在 Git 仓库中配置 WebHook。
1.5.11.4.4.4.4. 在频道中启用 WebHook 事件通知
为订阅频道添加注解。请参见以下示例:
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-enabled="true"
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-enabled="true"
									如果您使用了一个 secret 来配置 WebHook,也需要为频道添加该注解,其中 <the_secret_name> 是包含 webhook secret 的 kubernetes secret 名称。
								
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-secret="<the_secret_name>"
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-secret="<the_secret_name>"1.5.11.4.4.4.5. 启用了 webhook 的频道的订阅
订阅中不需要特定于 webhook 的配置。
1.5.12. 放置规则示例概述
					放置规则 (placementrule.apps.open-cluster-management.io) 定义的是可以部署可部署资源的目标集群。使用放置规则帮助您促进可部署资源的多集群部署。
				
要使用 OpenShift CLI 工具,请参阅以下流程:
- 使用您首选的编辑工具编写并保存您的应用程序 YAML 文件。
- 运行以下命令,将文件应用到 API 服务器。将 - filename替换为您的文件名称:- oc apply -f filename.yaml - oc apply -f filename.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令验证您的应用程序资源是否已创建: - oc get application.app - oc get application.app- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.12.1. 放置规则 YAML 结构
以下 YAML 结构显示放置规则的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含一些必需字段和值。根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具和产品控制台编写您自己的 YAML 内容
1.5.12.2. 放置规则 YAML 值表
| 字段 | 描述 | 
|---|---|
| apiVersion | 
										必需。将值设为  | 
| kind | 
										必需。将值设为  | 
| metadata.name | 必需。用于标识放置规则的名称。 | 
| metadata.namespace | 必需。用于放置规则的命名空间资源。 | 
| metadata.resourceVersion | 可选。放置规则资源的版本。 | 
| metadata.labels | 可选。放置规则的标签。 | 
| spec.clusterSelector | 可选。用于标识目标集群的标签 | 
| spec.clusterSelector.matchLabels | 可选。目标集群必须存在的标签。 | 
| spec.clusterSelector.matchExpressions | 可选。目标集群必须存在的标签。 | 
| status.decisions | 可选。定义放置可部署资源的目标集群。 | 
| status.decisions.clusterName | 可选。目标集群的名称 | 
| status.decisions.clusterNamespace | 可选。目标集群的命名空间。 | 
| spec.clusterReplicas | 可选。要创建的副本数量。 | 
| spec.clusterConditions | 可选。为集群定义任何条件。 | 
| spec.ResourceHint | 可选。如果多个集群与您在前面字段中提供的标签和值匹配,您可以指定特定于资源的条件来选择集群。例如,您可以选择包含最多可用 CPU 内核的集群。 | 
| spec.ResourceHint.type | 
										可选。将值设为  | 
| spec.ResourceHint.order | 
										可选。将值设为  | 
| spec.Policies | 可选。放置规则的策略过滤器。 | 
1.5.12.3. 放置规则示例文件
						有关您可以部署的应用程序示例,请参阅 stolostron 存储库。
					
						现有放置规则可以包括以下字段来指示放置规则的状态。此状态部分附加在规则的 YAML 结构中的 spec 部分后面。
					
status:
  decisions:
    clusterName:
    clusterNamespace:
status:
  decisions:
    clusterName:
    clusterNamespace:| 字段 | 描述 | 
|---|---|
| status | 放置规则的状态信息。 | 
| status.decisions | 定义放置可部署资源的目标集群。 | 
| status.decisions.clusterName | 目标集群的名称 | 
| status.decisions.clusterNamespace | 目标集群的命名空间。 | 
- 示例 1
- 示例 2
1.5.13. 应用程序示例
					查看可以用来构建文件的示例和 YAML 定义。Red Hat Advanced Cluster Management for Kubernetes 中的应用程序 (Application.app.k8s.io) 用于查看应用程序组件。
				
要使用 OpenShift CLI 工具,请参阅以下流程:
- 使用您首选的编辑工具编写并保存您的应用程序 YAML 文件。
- 运行以下命令,将文件应用到 API 服务器。将 - filename替换为您的文件名称:- oc apply -f filename.yaml - oc apply -f filename.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令验证您的应用程序资源是否已创建: - oc get application.app - oc get application.app- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.5.13.1. 应用程序 YAML 结构
要编写用于创建或更新应用程序资源的应用程序定义 YAML 内容,YAML 结构需要包含一些必需字段和值。根据应用程序要求或应用程序管理要求,您可能需要包含其他可选字段和值。
以下 YAML 结构显示应用程序的必需字段,以及一些常见可选字段。
1.5.13.2. 应用程序 YAML 表
| 字段 | 值 | 描述 | 
|---|---|---|
| apiVersion | 
										 | 必需 | 
| kind | 
										 | 必需 | 
| metadata | ||
| 
										 | 必需 | |
| 
										 | ||
| spec | ||
| selector.matchLabels | 
										 | 必需 | 
定义这些应用程序的 spec 是基于 Kubernetes 特别兴趣小组 (SIG) 提供的应用程序元数据描述符自定义资源定义。只有在表中显示的值才是必需的。
您可以使用此定义来帮助编写自己的应用程序 YAML 内容。有关此定义的更多信息,请参阅 Kubernetes SIG 应用程序 CRD 社区规格。
1.5.13.3. 应用程序文件示例
						有关您可以部署的应用程序示例,请参阅 stolostron 存储库。
					
应用程序的定义结构类似以下示例 YAML 内容: