1.4.6.2. 订阅 YAML 表

字段描述

apiVersion

必需。将值设为 apps.open-cluster-management.io/v1

kind

必需。将值设为 Subscription 以表示资源是订阅。

metadata.name

必需。用于标识订阅的名称。

metadata.namespace

必需。用于订阅的命名空间资源。

metadata.labels

可选。订阅的标签。

spec.channel

可选。为订阅定义频道的命名空间名称("Namespace/Name")。定义 channelsourcesourceNamespace 字段。通常,使用 channel 字段来指向频道,而不要使用 sourcesourceNamespace 字段。如果定义了多个字段,则会使用定义的第一个字段。

spec.sourceNamespace

可选。将可部署资源存储在 hub 集群上的源命名空间。仅将该字段用于命名空间频道。定义 channelsourcesourceNamespace 字段。通常,使用 channel 字段来指向频道,而不要使用 sourcesourceNamespace 字段。

spec.source

可选。存储可部署资源的 Helm 仓库的路径名称 ("URL")。仅将该字段用于 Helm 仓库频道。定义 channelsourcesourceNamespace 字段。通常,使用 channel 字段来指向频道,而不要使用 sourcesourceNamespace 字段。

spec.name

对于 HelmRepo 类型的频道是必需的,但对于 ObjectBucket 类型的频道是可选的。目标 Helm chart 或可部署资源在频道中的具体名称。对于该字段为可选的频道类型,如果没有定义 namepackageFilter,则会找到所有可部署资源,并检索每个可部署资源的最新版本。

spec.packageFilter

可选。定义用来查找目标可部署资源或一个可部署资源子集的参数。如果定义了多个过滤器条件,则可部署资源必须满足所有过滤器条件。

spec.packageFilter.version

可选。可部署资源的一个或多个版本。您可以使用 >1.0<3.0 的形式来指定版本范围。默认情况下会使用带有最新 "creationTimestamp" 值的版本。

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

可选,但对于独立集群或者您想要直接管理的集群是必需的。定义是否必须在本地部署订阅。将值设为 true 可将订阅与指定频道进行同步。将值设为 false 可防止在订阅中订阅指定频道中的任何资源。当集群属于独立集群或您将要直接管理此集群时,请使用此字段。如果您的集群是多集群的一部分,并且不想直接管理集群,则只使用 clustersclusterSelectorplacementRef 中的一个来定义您的订阅要放置的位置。如果您的集群是多集群的 Hub,而您想要直接管理集群,则在订阅 operator 可以在本地订阅资源前,必需将 Hub 注册为受管集群。

spec.placement.clusters

可选。定义要放置订阅的集群。仅使用 clustersclusterSelectorplacementRef 中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 hub 集群的独立集群,您也可以使用 本地集群

spec.placement.clusters.name

可选,但在定义订阅集群时是必需的。订阅集群的一个或多个名称。

spec.placement.clusterSelector

可选。定义标签选择器,用于标识要放置订阅的集群。仅使用 clustersclusterSelectorplacementRef 中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 hub 集群的独立集群,您也可以使用 本地集群

spec.placement.placementRef

可选。定义用于订阅的放置规则。仅使用 clustersclusterSelectorplacementRef 中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 Hub 集群的独立集群,您也可以使用 本地集群

spec.placement.placementRef.name

可选,但在使用放置规则时是必需的。订阅的放置规则名称。

spec.placement.placementRef.kind

可选,但在使用放置规则时是必需的。将值设为 PlacementRule 以表示将使用放置规则以通过订阅进行部署。

spec.overrides

可选。需要覆盖的任何参数和值,如特定于集群的设置。

spec.overrides.clusterName

可选。参数和值将被覆盖的一个或多个集群的名称。

spec.overrides.clusterOverrides

可选。要覆盖的参数和值的配置。

spec.timeWindow

可选。定义用于在订阅处于活跃状态或受阻时配置时间窗的设置。

spec.timeWindow.type

可选,但在配置时间窗时是必需的。表示订阅在配置的时间窗内是处于活跃状态还是受阻。只有在订阅处于活跃状态时才会进行订阅的部署。

spec.timeWindow.location

可选,但在配置时间窗时是必需的。为时间窗配置的时间范围的时区。所有时区都必须使用 Time Zone (tz) 数据库名称格式。如需更多信息,请参阅Time Zone 数据库

spec.timeWindow.daysofweek

可选,但在配置时间窗时是必需的。表示当使用了时间范围来创建时间窗时的每周天数。每周天数列表必须定义为数组,如 daysofweek: ["Monday", "Wednesday", "Friday"]

spec.timeWindow.hours

可选,但在配置时间窗时是必需的。定义时间窗的时间范围。必须为每个时间窗定义小时范围的开始时间和结束时间。您可以为订阅定义多个时间窗范围。

spec.timeWindow.hours.start

可选,但在配置时间窗时是必需的。定义时间窗开始的时间戳。时间戳必须使用 Go 编程语言 Kitchen 格式 "hh:mmpm"。如需更多信息,请参阅 Constants

spec.timeWindow.hours.end

可选,但在配置时间窗时是必需的。定义时间窗结束的时间戳。时间戳必须使用 Go 编程语言 Kitchen 格式 "hh:mmpm"。如需更多信息,请参阅 Constants

备注:

  • 在定义 YAML 时,订阅可以使用 packageFilters 来指向多个 Helm chart、可部署资源或其他 Kubernetes 资源。但是,订阅只会部署一个 chart、可部署资源或其他资源的最新版本。
  • 对于时间窗,当您定义一个时间窗的时间范围时,必须将开始时间设置在结束时间之前。如果您要为订阅定义多个时间窗,时间窗的时间范围不能重叠。实际时间范围基于 subscription-controller 容器时间,可以设置为与您所在的时间和位置不同的时间和位置。
  • 在订阅 spec 中,您还可以定义 Helm 发行版本的放置位置作为订阅定义的一部分。每个订阅都可以引用现有的放置规则,或者在订阅定义中直接定义放置规则。
  • 当您要在 spec.placement 部分中定义订阅的放置位置时,对于多集群环境仅使用 cclustersclusterSelectorplacementRef 中的一个。
  • 如果您包含多个放置设置,则会使用一个设置,其他设置将被忽略。以下优先级用于决定订阅 operator 使用哪个设置:

    1. placementRef
    2. clusters
    3. clusterSelector

您的订阅类似以下 YAML 内容:

apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: nginx
  namespace: ns-sub-1
  labels:
    app: nginx-app-details
spec:
  channel: ns-ch/predev-ch
  name: nginx-ingress
  packageFilter:
    version: "1.36.x"
  placement:
    placementRef:
      kind: PlacementRule
      name: towhichcluster
  overrides:
  - clusterName: "/"
    clusterOverrides:
    - path: "metadata.namespace"
      value: default