1.4. 应用程序高级配置


在 Red Hat Advanced Cluster Management for Kubernetes 中,应用程序由多个应用程序资源组成。您可以使用频道、订阅和放置规则资源来帮助部署、更新和管理整个应用程序。

单集群和多集群应用程序使用相同的 Kubernetes 规格,但多集群应用程序涉及更多的部署和应用程序管理生命周期自动化。

Red Hat Advanced Cluster Management for Kubernetes 应用程序的所有应用程序组件资源都在 YAML 文件 spec 部分中定义。当需要创建或更新应用程序组件资源时,需要创建或编辑正确的 spec 部分,使其包含用于定义资源的标签。

查看以下与应用程序高级配置相关的内容:

1.4.1. 订阅 Git 资源

默认情况下,当订阅将订阅的应用程序部署到目标集群时,即使应用程序资源与其他命名空间关联,应用程序也会部署到该订阅命名空间中。订阅管理员可以更改默认行为,如下所述。

另外,如果应用程序资源存在于集群中,且不是由订阅创建,订阅就不能在该现有资源上应用新资源。作为订阅管理员,请查看以下流程来更改默认设置。

需要的访问权限:集群管理员

1.4.1.1. 授予用户和组订阅管理员特权

了解如何授予订阅管理员访问权限。

  1. 从控制台登录到 Red Hat OpenShift Container Platform 集群。
  2. 创建一个或多个用户。有关创建用户的信息,请参阅准备用户

    您创建的用户是 app.open-cluster-management.io/subscription 应用程序的管理员。在 OpenShift Container Platform 中,订阅管理员可以更改默认行为。您可以将这些用户组成一个组来代表订阅管理组群(在稍后会进行演示)。

  3. 在终端中登录 Red Hat Advanced Cluster Management 集群。
  4. 使用以下命令在 open-cluster-management:subscription-admin ClusterRoleBinding 中添加以下 subjects 内容:

    oc edit clusterrolebinding open-cluster-management:subscription-admin
    Copy to Clipboard Toggle word wrap

    备注:最初,open -cluster-management:subscription-admin ClusterRoleBinding 没有 subject。

    您的 subject 可能如下所示:

    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: User
      name: example-name
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: example-group-name
    Copy to Clipboard Toggle word wrap

1.4.1.2. 在 Git 中创建应用程序资源

您需要在订阅时在资源 YAML 中指定 apiVersion 的完整组和版本。例如,如果您订阅 apiVersion: v1,订阅控制器无法验证订阅,您会收到错误:不支持资源 /v1、Kind=ImageStream

如果 apiVersion 被改为 image.openshift.io/v1,如以下示例所示,它会在订阅控制器中传递验证,并且资源被成功应用。

apiVersion: `image.openshift.io/v1`
kind: ImageStream
metadata:
  name: default
  namespace: default
spec:
  lookupPolicy:
    local: true
  tags:
    - name: 'latest'
      from:
        kind: DockerImage
        name: 'quay.io/repository/open-cluster-management/multicluster-operators-subscription:community-latest'
Copy to Clipboard Toggle word wrap

接下来,请参阅订阅管理员如何更改默认行为的更多示例。

1.4.1.3. 应用程序命名空间示例

在这个示例中,以订阅管理员身份登录。创建订阅以从 Git 存储库订阅示例资源 YAML 文件。示例文件包含位于以下不同命名空间中的订阅:

适用的频道类型:Git

  • ConfigMap test-configmap-1multins 命名空间中创建。
  • ConfigMap test-configmap-2default 命名空间中创建。
  • ConfigMap test-configmap-3subscription 命名空间中创建。

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: multins
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: test-configmap-1
      namespace: multins
    data:
      path: resource1
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: test-configmap-2
      namespace: default
    data:
      path: resource2
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: test-configmap-3
    data:
      path: resource3
    Copy to Clipboard Toggle word wrap

如果订阅由其他用户创建,则所有 ConfigMap 都会在与订阅相同的命名空间中创建。

1.4.1.4. 资源覆盖示例

适用的频道类型:Git、ObjectBucket(控制台中的对象存储)

在本例中,目标集群中已存在以下 ConfigMap。

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap-1
  namespace: sub-ns
data:
  name: user1
  age: 19
Copy to Clipboard Toggle word wrap

从 Git 存储库订阅以下示例资源 YAML 文件,并替换现有的 ConfigMap。查看 data 规格中的变化:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap-1
  namespace: sub-ns
data:
  age: 20
Copy to Clipboard Toggle word wrap
1.4.1.4.1. 默认合并选项

请参阅带有默认 apps.open-cluster-management.io/reconcile-option: merge 注解的 Git 存储库中的以下示例资源 YAML 文件。请参见以下示例:

apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: subscription-example
  namespace: sub-ns
  annotations:
    apps.open-cluster-management.io/git-path: sample-resources
    apps.open-cluster-management.io/reconcile-option: merge
spec:
  channel: channel-ns/somechannel
  placement:
    placementRef:
      name: dev-clusters
Copy to Clipboard Toggle word wrap

当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 会被合并,如下例所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap-1
  namespace: sub-ns
data:
  name: user1
  age: 20
Copy to Clipboard Toggle word wrap

当使用 merge 选项时,订阅的资源中的条目会在现有资源中创建或更新。没有条目会从现有资源中删除。

重要:如果要覆盖订阅的现有资源由另一个操作员或控制器自动协调,资源配置由订阅以及控制器或操作员更新。在这种情况下不要使用这个方法。

1.4.1.4.2. 替换选项

您可以以订阅管理员身份登录,并创建带有apps.open-cluster-management.io/reconcile-option: replace 注解的订阅。请参见以下示例:

apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: subscription-example
  namespace: sub-ns
  annotations:
    apps.open-cluster-management.io/git-path: sample-resources
    apps.open-cluster-management.io/reconcile-option: replace
spec:
  channel: channel-ns/somechannel
  placement:
    placementRef:
      name: dev-clusters
Copy to Clipboard Toggle word wrap

当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 将替换为以下内容:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap-1
  namespace: sub-ns
data:
  age: 20
Copy to Clipboard Toggle word wrap
1.4.1.4.3. 协调选项

您还可以在单个资源中使用 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.4.1.4.3.1. 协调频率

现在,您可以选择在频道配置中选择协调频率选项: highmediumlowoff,以避免不必要的资源协调,并因此防止订阅 operator 的超载。

需要的访问权限:管理员和集群管理员

请参阅以下的 settings:attribute:<value> 定义:

  • Off:部署的资源不会被自动协调。订阅自定义资源的更改会触发协调。您可以添加或更新标签或注解。
  • :部署的资源会每小时自动协调,即使源 Git 存储库没有改变。
  • :这是默认的设置。订阅 operator 每 3 分钟将当前部署的提交 ID(commit ID)与源存储库的最新提交 ID 进行比较,当有更改时对目标集群应用更改。每 15 分钟,所有资源都会从源 Git 存储库重新应用到目标集群,即使存储库没有改变。
  • :部署的资源每两分钟自动协调一次,即使源 Git 存储库没有改变。

您可以使用订阅引用的频道自定义资源中的 apps.open-cluster-management.io/reconcile-rate 注解进行设置。

请参见以下示例:

apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
  name: git-channel
  namespace: sample
  annotations:
    apps.open-cluster-management.io/reconcile-rate: <value from the list>
spec:
  type: GitHub
  pathname: <Git URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: git-subscription
  annotations:
    apps.open-cluster-management.io/git-path: <application1>
    apps.open-cluster-management.io/git-branch: <branch1>
spec:
  channel: sample/git-channel
  placement:
    local: true
Copy to Clipboard Toggle word wrap

在上例中,所有使用 sample/git-channel 的订阅都有 low 协调频率。

无论频道中的 reconcile-rate 设置是什么,订阅都可以通过在订阅 CR 中指定 apps.open-cluster-management.io/reconcile-rate: off 注解来关闭(off)自动协调。

请参见以下示例:

apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
  name: git-channel
  namespace: sample
  annotations:
    apps.open-cluster-management.io/reconcile-rate: high
spec:
  type: GitHub
  pathname: <Git URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: git-subscription
  annotations:
    apps.open-cluster-management.io/git-path: application1
    apps.open-cluster-management.io/git-branch: branch1
    apps.open-cluster-management.io/reconcile-rate: "off"
spec:
  channel: sample/git-channel
  placement:
    local: true
Copy to Clipboard Toggle word wrap

git-subscription 部署的资源永远不会自动协调,即使 reconcile-rate 在频道中被设置为 high

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部