在 Red Hat Advanced Cluster Management for Kubernetes 中,应用程序由多个应用程序资源组成。您可以使用频道、订阅和放置来帮助部署、更新和管理整个应用程序。
单集群和多集群应用程序使用相同的 Kubernetes 规格,但多集群应用程序涉及更多的部署和应用程序管理生命周期自动化。
Red Hat Advanced Cluster Management for Kubernetes 应用程序的所有应用程序组件资源都在 YAML 文件 spec 部分中定义。当需要创建或更新应用程序组件资源时,需要创建或编辑相应的部分,使其包含用于定义资源的标签。
查看以下与应用程序高级配置相关的内容:
默认情况下,当订阅将订阅的应用程序部署到目标集群时,即使应用程序资源与其他命名空间关联,应用程序也会部署到该订阅命名空间中。订阅 管理员可以更改默认行为,如 授予订阅管理员权限 所述。
另外,如果应用程序资源存在于集群中,且不是由订阅创建,订阅就不能在该现有资源上应用新资源。作为订阅管理员,请查看以下流程来更改默认设置。
需要的访问权限: 集群管理员
您需要在订阅时在资源 YAML 中指定 apiVersion
的完整组和版本。例如,如果订阅 apiVersion: v1
,订阅控制器无法验证订阅,您收到以下错误信息:Resource /v1, Kind=ImageStream is not supported
。
如果 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'
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
Copied!
Toggle word wrap
Toggle overflow
接下来,请参阅订阅管理员如何更改默认行为的更多示例。
在以下示例中,您以订阅管理员身份登录。
创建订阅以从 Git 存储库订阅示例资源 YAML 文件。示例文件包含位于以下不同命名空间中的订阅:
适用的频道类型: Git
如果订阅由其他用户创建,则所有 ConfigMap 都会在与订阅相同的命名空间中创建。
作为订阅管理员,您可能希望将所有应用程序资源部署到同一命名空间中。
您可以通过创建一个允许和拒绝列表作为订阅管理员 ,将所有应用程序资源部署到订阅命名空间中。
将 apps.open-cluster-management.io/current-namespace-scoped: true
注解添加到订阅 YAML。例如,当订阅管理员创建以下订阅时,上例中的所有三个 ConfigMap 都在 subscription-ns
命名空间中创建。
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: subscription-example
namespace: subscription-ns
annotations:
apps.open-cluster-management.io/git-path: sample-resources
apps.open-cluster-management.io/reconcile-option: merge
apps.open-cluster-management.io/current-namespace-scoped: "true"
spec:
channel: channel-ns/somechannel
placement:
placementRef:
name: dev-clusters
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : subscription- example
namespace : subscription- ns
annotations :
apps.open-cluster-management.io/git-path : sample- resources
apps.open-cluster-management.io/reconcile-option : merge
apps.open-cluster-management.io/current-namespace-scoped : "true"
spec :
channel : channel- ns/somechannel
placement :
placementRef :
name : dev- clusters
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
适用的频道类型: Git、ObjectBucket(控制台中的对象存储)
注: 资源覆盖选项不适用于 Git 存储库中的 helm
chart,因为 helm
chart 资源由 Helm 管理。
在本例中,目标集群中已存在以下 ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
name: user1
age: 19
apiVersion : v1
kind : ConfigMap
metadata :
name : test- configmap- 1
namespace : sub- ns
data :
name : user1
age : 19
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
从 Git 存储库订阅以下示例资源 YAML 文件,并替换现有的 ConfigMap。查看 data
规格中的变化:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
age: 20
apiVersion : v1
kind : ConfigMap
metadata :
name : test- configmap- 1
namespace : sub- ns
data :
age : 20
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
请参阅带有默认 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
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
Copied!
Toggle word wrap
Toggle overflow
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 会被合并,如下例所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
name: user1
age: 20
apiVersion : v1
kind : ConfigMap
metadata :
name : test- configmap- 1
namespace : sub- ns
data :
name : user1
age : 20
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
当使用 merge
选项时,订阅的资源中的条目会在现有资源中创建或更新。没有条目会从现有资源中删除。
重要: 如果要覆盖订阅的资源由其他操作员或控制器自动协调,资源配置由订阅以及控制器或操作员更新。在这种情况下不要使用这个方法。
使用 mergeAndOwn
时,订阅的资源中的条目会在现有资源中创建或更新。作为订阅管理员登录,并使用 apps.open-cluster-management.io/reconcile-option: mergeAndOwn
注解创建一个订阅。请参见以下示例:
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: mergeAndOwn
spec:
channel: channel-ns/somechannel
placement:
placementRef:
name: dev-clusters
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 : mergeAndOwn
spec :
channel : channel- ns/somechannel
placement :
placementRef :
name : dev- clusters
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 会被合并,如下例所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
annotations:
apps.open-cluster-management.io/hosting-subscription: sub-ns/subscription-example
data:
name: user1
age: 20
apiVersion : v1
kind : ConfigMap
metadata :
name : test- configmap- 1
namespace : sub- ns
annotations :
apps.open-cluster-management.io/hosting-subscription : sub- ns/subscription- example
data :
name : user1
age : 20
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
如前所述,当使用 mergeAndOwn
选项时,订阅的资源中的条目会在现有资源中创建或更新。没有条目会从现有资源中删除。它还添加了 apps.open-cluster-management.io/hosting-subscription
注解,以指示资源现在归订阅所有。删除订阅会删除 ConfigMap。
您可以以订阅管理员身份登录,并创建带有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
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
Copied!
Toggle word wrap
Toggle overflow
当此订阅由订阅管理员创建并订阅 ConfigMap 资源时,现有 ConfigMap 将替换为以下内容:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
age: 20
apiVersion : v1
kind : ConfigMap
metadata :
name : test- configmap- 1
namespace : sub- ns
data :
age : 20
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
您可以订阅特定 Git 分支、提交或标签。
multicloud-operators-subscription
仓库中包含的订阅 operator 订阅 Git 仓库的默认分支。如果要订阅到不同的分支,则需要在订阅中指定分支名称注解。
以下示例 YAML 文件演示了如何通过 apps.open-cluster-management.io/git-branch: <branch1>
指定不同的分支:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: git-mongodb-subscription
annotations:
apps.open-cluster-management.io/git-path: stable/ibm-mongodb-dev
apps.open-cluster-management.io/git-branch: <branch1>
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : git- mongodb- subscription
annotations :
apps.open-cluster-management.io/git-path : stable/ibm- mongodb- dev
apps.open-cluster-management.io/git-branch : <branch1>
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
multicloud-operators-subscription
仓库中包含的订阅 operator 默认订阅 Git 仓库的指定分支的最新提交。如果要订阅特定提交,则需要使用订阅中的提交散列(commit hash)指定所需的提交注解。
在以下示例中,YAML 文件演示了如何通过 apps.open-cluster-management.io/git-desired-commit: <full commit number>
指定不同的提交:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: git-mongodb-subscription
annotations:
apps.open-cluster-management.io/git-path: stable/ibm-mongodb-dev
apps.open-cluster-management.io/git-desired-commit: <full commit number>
apps.open-cluster-management.io/git-clone-depth: 100
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : git- mongodb- subscription
annotations :
apps.open-cluster-management.io/git-path : stable/ibm- mongodb- dev
apps.open-cluster-management.io/git-desired-commit : <full commit number>
apps.open-cluster-management.io/git-clone-depth : 100
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
git-clone-depth
注解是可选的,默认设置为 20
。这意味着订阅控制器会从 Git 存储库检索前 20 个提交历史记录。如果您指定了一个旧的 git-desired-commit
,则需要为所需的提交相应地指定 git-clone-depth
。
multicloud-operators-subscription
仓库中包含的订阅 operator 默认订阅 Git 仓库的指定分支的最新提交。如果要订阅特定标签,则需要在订阅中指定标签注解。
以下示例显示,YAML 文件显示如何通过 apps.open-cluster-management.io/git-tag: <v1.0>
指定不同的标签:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: git-mongodb-subscription
annotations:
apps.open-cluster-management.io/git-path: stable/ibm-mongodb-dev
apps.open-cluster-management.io/git-tag: <v1.0>
apps.open-cluster-management.io/git-clone-depth: 100
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : git- mongodb- subscription
annotations :
apps.open-cluster-management.io/git-path : stable/ibm- mongodb- dev
apps.open-cluster-management.io/git-tag : <v1.0>
apps.open-cluster-management.io/git-clone-depth : 100
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
注: 如果 Git 所需的提交和标签注解都被指定,标签将被忽略。
git-clone-depth
注解是可选的,默认设置为 20
。这意味着订阅控制器从 Git 仓库检索前 20
个提交历史记录。如果指定了旧的 git-tag
,则需要为标签的所需提交相应地指定 git-clone-depth
。
了解如何授予订阅管理员访问权限。订阅管理员 可以更改默认行为。在以下过程中了解更多信息:
从控制台登录到 Red Hat OpenShift Container Platform 集群。
创建一个或多个用户。有关创建用户的信息,请参阅准备用户 。您还可以准备组或服务帐户。
您创建的用户是 app.open-cluster-management.io/subscription
应用程序的管理员。在 OpenShift Container Platform 中,订阅 管理员可以更改默认行为。您可以将这些用户组成一个组来代表订阅管理组群(在稍后会进行演示)。
在终端中登录 Red Hat Advanced Cluster Management 集群。
如果 open-cluster-management:subscription-admin
ClusterRoleBinding 不存在,您需要创建它。请参见以下示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: open-cluster-management:subscription-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: open-cluster-management:subscription-admin
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRoleBinding
metadata :
name : open- cluster- management: subscription- admin
roleRef :
apiGroup : rbac.authorization.k8s.io
kind : ClusterRole
name : open- cluster- management: subscription- admin
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用以下命令在 open-cluster-management:subscription-admin
ClusterRoleBinding 中添加以下 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-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
- kind: ServiceAccount
name: my-service-account
namespace: my-service-account-namespace
- apiGroup: rbac.authorization.k8s.io
kind: User
name: 'system:serviceaccount:my-service-account-namespace:my-service-account'
subjects :
- apiGroup : rbac.authorization.k8s.io
kind : User
name : example- name
- apiGroup : rbac.authorization.k8s.io
kind : Group
name : example- group- name
- kind : ServiceAccount
name : my- service- account
namespace : my- service- account- namespace
- apiGroup : rbac.authorization.k8s.io
kind : User
name : 'system:serviceaccount:my-service-account-namespace:my-service-account'
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
服务帐户
可用作用户主题。
作为订阅管理员,您可以从 Git 存储库应用程序订阅创建应用程序,该订阅中包含一个允许
列表只允许部署指定 Kubernetes kind
资源。您还可以在应用程序订阅中创建 deny
列表,以拒绝部署特定 Kubernetes kind
资源。
默认情况下,policy.open-cluster-management.io/v1
资源不会被应用程序订阅部署。为避免这种默认行为,应用程序订阅需要由订阅管理员部署。
请参阅以下 allow
和 deny
规格示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
annotations:
apps.open-cluster-management.io/github-path: sub2
name: demo-subscription
namespace: demo-ns
spec:
channel: demo-ns/somechannel
allow:
- apiVersion: policy.open-cluster-management.io/v1
kinds:
- Policy
- apiVersion: v1
kinds:
- Deployment
deny:
- apiVersion: v1
kinds:
- Service
- ConfigMap
placement:
local: true
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
annotations :
apps.open-cluster-management.io/github-path : sub2
name : demo- subscription
namespace : demo- ns
spec :
channel : demo- ns/somechannel
allow :
- apiVersion : policy.open- cluster- management.io/v1
kinds :
- Policy
- apiVersion : v1
kinds :
- Deployment
deny :
- apiVersion : v1
kinds :
- Service
- ConfigMap
placement :
local : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下应用程序订阅 YAML 指定当应用程序从源存储库的 myapplication
目录部署时,它将仅部署 v1/Deployment
资源,即使源存储库中有其他资源:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
annotations:
apps.open-cluster-management.io/github-path: myapplication
name: demo-subscription
namespace: demo-ns
spec:
channel: demo-ns/somechannel
deny:
- apiVersion: v1
kinds:
- Service
- ConfigMap
placement:
placementRef:
name: demo-placement
kind: Placement
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
annotations :
apps.open-cluster-management.io/github-path : myapplication
name : demo- subscription
namespace : demo- ns
spec :
channel : demo- ns/somechannel
deny :
- apiVersion : v1
kinds :
- Service
- ConfigMap
placement :
placementRef :
name : demo- placement
kind : Placement
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
这个示例应用程序订阅 YAML 指定 v1/Service
和 v1/ConfigMap
资源以外的所有有效资源部署。您可以添加 "*"
来允许或拒绝 API 组中的所有资源类型,而不是列出 API 组中单独资源类型。
您可以在单个资源中使用 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
注解,则资源将在目标集群中合并,其他资源则在替换其他资源时合并。
您可以选择在频道配置中选择协调频率选项: 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
示例:
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
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
Copied!
Toggle word wrap
Toggle overflow
在上例中,所有使用 sample/git-channel
的订阅都被分配了 low
协调频率。
当订阅协调率被设置为 low
时,订阅的应用程序资源最多可能需要一小时才能完成协调。在单个应用程序视图的卡上,单击 Sync 以手动协调。如果设为 off
,则永远不会协调。
无论频道中的 reconcile-rate
设置是什么,订阅都可以通过在 Subscription
自定义资源中指定
apps.open-cluster-management.io/reconcile-rate: off
注解来关闭自动协调。
请参阅以下 git-channel
示例:
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
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
Copied!
Toggle word wrap
Toggle overflow
git-subscription
部署的资源永远不会自动协调,即使 reconcile-rate
在频道中被设置为 high
。
每 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
示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: helm-channel
namespace: sample
annotations:
apps.open-cluster-management.io/reconcile-rate: low
spec:
type: HelmRepo
pathname: <Helm repo URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: helm-subscription
spec:
channel: sample/helm-channel
name: nginx-ingress
packageOverrides:
- packageName: nginx-ingress
packageAlias: nginx-ingress-simple
packageOverrides:
- path: spec
value:
defaultBackend:
replicaCount: 3
placement:
local: true
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : helm- channel
namespace : sample
annotations :
apps.open-cluster-management.io/reconcile-rate : low
spec :
type : HelmRepo
pathname : <Helm repo URL>
---
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : helm- subscription
spec :
channel : sample/helm- channel
name : nginx- ingress
packageOverrides :
- packageName : nginx- ingress
packageAlias : nginx- ingress- simple
packageOverrides :
- path : spec
value :
defaultBackend :
replicaCount : 3
placement :
local : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在本例中,所有使用 sample/helm-channel
的订阅都会被分配一个 low
协调频率。
无论频道中的 reconcile-rate 设置是什么,订阅都可以通过在 Subscription
自定义资源中指定 apps.open-cluster-management.io/reconcile-rate: off
注解来关闭
自动协调,如下例所示:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: helm-channel
namespace: sample
annotations:
apps.open-cluster-management.io/reconcile-rate: high
spec:
type: HelmRepo
pathname: <Helm repo URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: helm-subscription
annotations:
apps.open-cluster-management.io/reconcile-rate: "off"
spec:
channel: sample/helm-channel
name: nginx-ingress
packageOverrides:
- packageName: nginx-ingress
packageAlias: nginx-ingress-simple
packageOverrides:
- path: spec
value:
defaultBackend:
replicaCount: 3
placement:
local: true
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : helm- channel
namespace : sample
annotations :
apps.open-cluster-management.io/reconcile-rate : high
spec :
type : HelmRepo
pathname : <Helm repo URL>
---
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : helm- subscription
annotations :
apps.open-cluster-management.io/reconcile-rate : "off"
spec :
channel : sample/helm- channel
name : nginx- ingress
packageOverrides :
- packageName : nginx- ingress
packageAlias : nginx- ingress- simple
packageOverrides :
- path : spec
value :
defaultBackend :
replicaCount : 3
placement :
local : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在本例中,helm-subscription
部署的资源永远不会自动协调,即使 reconcile-rate
在频道中被设置为 high
。
借助 LeaderElection
,您可以更改控制器如何在出现故障时请求选择新领导,这样可保证一次仅处理协调。您可以增加或减少控制器获取 LeaderElection
所需的时间。随着时间减少,故障期间会更快地选择新的领导。
注: 更改控制器的默认值可能会影响该任务中的系统性能。您可以通过更改 leaseDuration
、renewDeadline
或 retryPeriod
控制器的默认值来减少 etcd
负载。
需要的访问权限: 集群管理员
要配置 LeaderElection
,您可以更改以下默认值:
leader-election-lease-duration: 137 seconds
renew-deadline: 107 seconds
retry-period: 26 seconds
请参阅以下步骤来更改 multicluster-operators-application
、multicluster-operators-channel
、multicluster-operators-standalone-subscription
或 multicluster-operators-hub-subscription
控制器:
运行以下命令以暂停 multiclusterhub
:
oc annotate mch -n open-cluster-management multiclusterhub mch-pause=true --overwrite=true
oc annotate mch -n open-cluster-management multiclusterhub mch-pause=true --overwrite=true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
通过在 oc edit
命令中添加控制器名称来编辑 deployment
文件。请参见以下示例命令:
oc edit deployment -n open-cluster-management multicluster-operators-hub-subscription
oc edit deployment -n open-cluster-management multicluster-operators-hub-subscription
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
通过搜索 - command
来查找控制器命令标志。
在控制器中的 containers 部分中,插入 - command
标记。例如,插入 RetryPeriod
。
保存该文件。控制器会自动重启以应用标志。
对您要更改的每个控制器重复此步骤。
运行以下命令以恢复 multiclusterhub
:
oc annotate mch -n open-cluster-management multiclusterhub mch-pause=false --overwrite=true
oc annotate mch -n open-cluster-management multiclusterhub mch-pause=false --overwrite=true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
请参阅以下成功编辑到 -command
的输出示例,其中 retryPeriod
标志会将前面提到的默认时间加倍到 52
,这被分配来重试合并 leaderElection
:
command:
- /usr/local/bin/multicluster-operators-subscription
- --sync-interval=60
- --retry-period=52
command:
- /usr/local/bin/multicluster-operators-subscription
- --sync-interval=60
- --retry-period=52
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Git 频道和订阅通过 HTTPS 或 SSH 连接到指定的 Git 存储库。以下应用程序频道配置可用于安全 Git 连接:
您可以使用频道和订阅连接到 Git 服务器。有关连接到具有用户和访问令牌的私有存储库,请参阅以下步骤:
在与频道相同的命名空间中创建 secret。将 user
字段设置为 Git 用户 ID,将 accessToken
字段设置为 Git 个人访问令牌。值应该采用 base64 编码。请参阅以下填充的用户和 accessToken 示例:
apiVersion: v1
kind: Secret
metadata:
name: my-git-secret
namespace: channel-ns
data:
user: dXNlcgo=
accessToken: cGFzc3dvcmQK
apiVersion : v1
kind : Secret
metadata :
name : my- git- secret
namespace : channel- ns
data :
user : dXNlcgo=
accessToken : cGFzc3dvcmQK
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用 secret 配置频道。请参阅以下带有 secretRef
填充的示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: sample-channel
namespace: channel-ns
spec:
type: Git
pathname: <Git HTTPS URL>
secretRef:
name: my-git-secret
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : sample- channel
namespace : channel- ns
spec :
type : Git
pathname : <Git HTTPS URL>
secretRef :
name : my- git- secret
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
您可以使用开发环境中的以下连接方法使用由自定义或自签名证书颁发机构签名的 SSL 证书,连接到私有托管 Git 服务器。但是,不建议在生产环境中使用这个步骤:
在频道规格中指定 insecureSkipVerify: true
。否则,与 Git 服务器的连接会失败,并显示类似如下的错误:
x509: certificate is valid for localhost.com, not localhost
x509: certificate is valid for localhost.com, not localhost
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
关于这个方法,请查看以下频道规格添加的示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
labels:
name: sample-channel
namespace: sample
spec:
type: GitHub
pathname: <Git HTTPS URL>
insecureSkipVerify: true
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
labels :
name : sample- channel
namespace : sample
spec :
type : GitHub
pathname : <Git HTTPS URL>
insecureSkipVerify : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
您可以使用这个连接方法使用由自定义或自签名证书认证机构签名的 SSL 证书安全地连接到托管的 Git 服务器。
创建包括 PEM 格式的 Git 服务器 root 和中间 CA 证书的 ConfigMap。ConfigMap 必须与频道 CR 位于同一命名空间中。字段名称必须是 caCerts
并使用 |
。在以下示例中,可以注意到 caCerts
可包含多个证书,如 root 和中间 CA:
apiVersion: v1
kind: ConfigMap
metadata:
name: git-ca
namespace: channel-ns
data:
caCerts: |
# Git server root CA
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
# Git server intermediate CA 1
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
# Git server intermediate CA 2
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
apiVersion: v1
kind: ConfigMap
metadata:
name: git-ca
namespace: channel-ns
data:
caCerts: |
# Git server root CA
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
# Git server intermediate CA 1
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
# Git server intermediate CA 2
-----BEGIN CERTIFICATE-----
MIIF5DCCA8wCCQDInYMol7LSDTANBgkqhkiG9w0BAQsFADCBszELMAkGA1UEBhMC
Q0ExCzAJBgNVBAgMAk9OMRAwDgYDVQQHDAdUb3JvbnRvMQ8wDQYDVQQKDAZSZWRI
YXQxDDAKBgNVBAsMA0FDTTFFMEMGA1UEAww8Z29ncy1zdmMtZGVmYXVsdC5hcHBz
LnJqdW5nLWh1YjEzLmRldjA2LnJlZC1jaGVzdGVyZmllbGQuY29tMR8wHQYJKoZI
hvcNAQkBFhByb2tlakByZWRoYXQuY29tMB4XDTIwMTIwMzE4NTMxMloXDTIzMDky
MzE4NTMxMlowgbMxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJPTjEQMA4GA1UEBwwH
VG9yb250bzEPMA0GA1UECgwGUmVkSGF0MQwwCgYDVQQLDANBQ00xRTBDBgNVBAMM
PGdvZ3Mtc3ZjLWRlZmF1bHQuYXBwcy5yanVuZy1odWIxMy5kZXYwNi5yZWQtY2hl
c3RlcmZpZWxkLmNvbTEfMB0GCSqGSIb3DQEJARYQcm9rZWpAcmVkaGF0LmNvbTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM3nPK4mOQzaDAo6S3ZJ0Ic3
U9p/NLodnoTIC+cn0q8qNCAjf13zbGB3bfN9Zxl8Q5fv+wYwHrUOReCp6U/InyQy
6OS3gj738F635inz1KdyhKtlWW2p9Ye9DUtx1IlfHkDVdXtynjHQbsFNIdRHcpQP
upM5pwPC3BZXqvXChhlfAy2m4yu7vy0hO/oTzWIwNsoL5xt0Lw4mSyhlEip/t8lU
xn2y8qhm7MiIUpXuwWhSYgCrEVqmTcB70Pc2YRZdSFolMN9Et70MjQN0TXjoktH8
PyASJIKIRd+48yROIbUn8rj4aYYBsJuoSCjJNwujZPbqseqUr42+v+Qp2bBj1Sjw
+SEZfHTvSv8AqX0T6eo6njr578+DgYlwsS1A1zcAdzp8qmDGqvJDzwcnQVFmvaoM
gGHCdJihfy3vDhxuZRDse0V4Pz6tl6iklM+tHrJL/bdL0NdfJXNCqn2nKrM51fpw
diNXs4Zn3QSStC2x2hKnK+Q1rwCSEg/lBawgxGUslTboFH77a+Kwu4Oug9ibtm5z
ISs/JY4Kiy4C2XJOltOR2XZYkdKaX4x3ctbrGaD8Bj+QHiSAxaaSXIX+VbzkHF2N
aD5ijFUopjQEKFrYh3O93DB/URIQ+wHVa6+Kvu3uqE0cg6pQsLpbFVQ/I8xHvt9L
kYy6z6V/nj9ZYKQbq/kPAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAKZuc+lewYAv
jaaSeRDRoToTb/yN0Xsi69UfK0aBdvhCa7/0rPHcv8hmUBH3YgkZ+CSA5ygajtL4
g2E8CwIO9ZjZ6l+pHCuqmNYoX1wdjaaDXlpwk8hGTSgy1LsOoYrC5ZysCi9Jilu9
PQVGs/vehQRqLV9uZBigG6oZqdUqEimaLHrOcEAHB5RVcnFurz0qNbT+UySjsD63
9yJdCeQbeKAR9SC4hG13EbM/RZh0lgFupkmGts7QYULzT+oA0cCJpPLQl6m6qGyE
kh9aBB7FLykK1TeXVuANlNU4EMyJ/e+uhNkS9ubNJ3vuRuo+ECHsha058yi16JC9
NkZqP+df4Hp85sd+xhrgYieq7QGX2KOXAjqAWo9htoBhOyW3mm783A7WcOiBMQv0
2UGZxMsRjlP6UqB08LsV5ZBAefElR344sokJR1de/Sx2J9J/am7yOoqbtKpQotIA
XSUkATuuQw4ctyZLDkUpzrDzgd2Bt+aawF6sD2YqycaGFwv2YD9t1YlD6F4Wh8Mc
20Qu5EGrkQTCWZ9pOHNSa7YQdmJzwbxJC4hqBpBRAJFI2fAIqFtyum6/8ZN9nZ9K
FSEKdlu+xeb6Y6xYt0mJJWF6mCRi4i7IL74EU/VNXwFmfP6IadliUOST3w5t92cB
M26t73UCExXMXTCQvnp0ki84PeR1kRk4
-----END CERTIFICATE-----
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用此 ConfigMap 配置频道。参阅上一步中的 git-ca
名称的以下示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: my-channel
namespace: channel-ns
spec:
configMapRef:
name: git-ca
pathname: <Git HTTPS URL>
type: Git
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : my- channel
namespace : channel- ns
spec :
configMapRef :
name : git- ca
pathname : <Git HTTPS URL>
type : Git
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在 data
的 sshKey
字段中创建一个 secret 来包含您的私有 SSH 密钥。如果密钥需要使用密码短语进行保护,在 passphrase
字段中指定密码。此 secret 必须与频道 CR 位于同一命名空间中。使用 oc
命令创建此 secret,以创建 secret generic git-ssh-key --from-file=sshKey=./.ssh/id_rsa
,然后添加以 base64 编码的 passphrase
。请参见以下示例:
apiVersion: v1
kind: Secret
metadata:
name: git-ssh-key
namespace: channel-ns
data:
sshKey: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQ21GbGN6STFOaTFqZEhJQUFBQUdZbU55ZVhCMEFBQUFHQUFBQUJDK3YySHhWSIwCm8zejh1endzV3NWODMvSFVkOEtGeVBmWk5OeE5TQUgcFA3Yk1yR2tlRFFPd3J6MGIKOUlRM0tKVXQzWEE0Zmd6NVlrVFVhcTJsZWxxVk1HcXI2WHF2UVJ5Mkc0NkRlRVlYUGpabVZMcGVuaGtRYU5HYmpaMmZOdQpWUGpiOVhZRmd4bTNnYUpJU3BNeTFLWjQ5MzJvOFByaDZEdzRYVUF1a28wZGdBaDdndVpPaE53b0pVYnNmYlZRc0xMS1RrCnQwblZ1anRvd2NEVGx4TlpIUjcwbGVUSHdGQTYwekM0elpMNkRPc3RMYjV2LzZhMjFHRlMwVmVXQ3YvMlpMOE1sbjVUZWwKSytoUWtxRnJBL3BUc1ozVXNjSG1GUi9PV25FPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K
passphrase: cGFzc3cwcmQK
type: Opaque
apiVersion : v1
kind : Secret
metadata :
name : git- ssh- key
namespace : channel- ns
data :
sshKey : LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQ21GbGN6STFOaTFqZEhJQUFBQUdZbU55ZVhCMEFBQUFHQUFBQUJDK3YySHhWSIwCm8zejh1endzV3NWODMvSFVkOEtGeVBmWk5OeE5TQUgcFA3Yk1yR2tlRFFPd3J6MGIKOUlRM0tKVXQzWEE0Zmd6NVlrVFVhcTJsZWxxVk1HcXI2WHF2UVJ5Mkc0NkRlRVlYUGpabVZMcGVuaGtRYU5HYmpaMmZOdQpWUGpiOVhZRmd4bTNnYUpJU3BNeTFLWjQ5MzJvOFByaDZEdzRYVUF1a28wZGdBaDdndVpPaE53b0pVYnNmYlZRc0xMS1RrCnQwblZ1anRvd2NEVGx4TlpIUjcwbGVUSHdGQTYwekM0elpMNkRPc3RMYjV2LzZhMjFHRlMwVmVXQ3YvMlpMOE1sbjVUZWwKSytoUWtxRnJBL3BUc1ozVXNjSG1GUi9PV25FPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K
passphrase : cGFzc3cwcmQK
type : Opaque
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用 secret 配置频道。请参见以下示例:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: my-channel
namespace: channel-ns
spec:
secretRef:
name: git-ssh-key
pathname: <Git SSH URL>
type: Git
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : my- channel
namespace : channel- ns
spec :
secretRef :
name : git- ssh- key
pathname : <Git SSH URL>
type : Git
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
订阅控制器使用提供的 Git 主机名执行 ssh-keyscan
来构建 known_hosts
列表,以防止 SSH 连接中的 Man-in-the-middle(MITM)攻击。如果要跳过此步骤并使用不安全的连接,请在频道配置中使用 insecureSkipVerify: true
。这不是最佳方案,特别是在生产环境中。
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: my-channel
namespace: channel-ns
spec:
secretRef:
name: git-ssh-key
pathname: <Git SSH URL>
type: Git
insecureSkipVerify: true
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : my- channel
namespace : channel- ns
spec :
secretRef :
name : git- ssh- key
pathname : <Git SSH URL>
type : Git
insecureSkipVerify : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
如果 Git 频道连接配置需要更新,如 CA 证书、凭证或 SSH 密钥,则需要在同一命名空间中创建新 secret 和 ConfigMap,并更新频道以引用新的 secret 和 ConfigMap。如需更多信息,请参阅使用自定义 CA 证书进行安全 HTTPS 连接 。
默认情况下,当订阅将订阅的 Helm 资源部署到目标集群时,应用程序资源会被监视。您可以配置 Helm 频道类型来监视命名空间范围的资源。启用后,会恢复对这些监视命名空间范围的资源的手动更改。
如果需要只在特定时间部署新的 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 这个时间段外随时应用与安全相关的更新。
您可以为订阅定义多个时间窗,如在每周一和周三定义时间窗。
为订阅中所订阅的 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
1
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
1
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
查看可以用来构建文件的示例和 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
有关您可以部署的应用程序示例,请参阅 stolostron
存储库。
以下 YAML 结构显示频道的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含一些必需字段和值。根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具和产品控制台编写您自己的 YAML 内容。
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name:
namespace: # Each channel needs a unique namespace, except Git channel.
spec:
sourceNamespaces:
type:
pathname:
secretRef:
name:
gates:
annotations:
labels:
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name :
namespace :
spec :
sourceNamespaces :
type :
pathname :
secretRef :
name :
gates :
annotations :
labels:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Expand 字段 可选或必需的 描述
apiVersion
必填
将值设为 apps.open-cluster-management.io/v1
。
kind
必填
将值设为 Channel
以表示资源是频道。
metadata.name
必填
频道的名称。
metadata.namespace
必填
频道的命名空间;除 Git 频道外,每个频道都需要一个唯一的命名空间。
spec.sourceNamespaces
选填
标识频道控制器监控的命名空间,看是否有新的或已更新的可部署资源以检索并提升到频道。
spec.type
必填
频道类型。支持的类型有: HelmRepo
、Git
和 ObjectBucket
(控制台中的对象存储)
spec.pathname
对于 HelmRepo
、Git
、ObjectBucket
频道是必需的
对于 HelmRepo
频道,将值设置为 Helm 仓库的 URL。对于 ObjectBucket
频道,将值设置为对象存储的 URL。对于 Git
频道,将值设置为 Git 仓库的 HTTPS URL。
spec.secretRef.name
选填
标识用于身份验证的 Kubernetes Secret 资源,如用于访问仓库或 chart。您只能对 HelmRepo
、ObjectBucket
和 Git
类型的频道使用 secret 进行身份验证。
spec.gates
选填
定义在频道中提升可部署资源的要求。如果没有设置任何要求,则会将添加到频道命名空间或源的任何可部署资源提升到频道。gates
值仅适用于 ObjectBucket
频道类型,不适用于 HelmRepo
和 Git
频道类型。
spec.gates.annotations
选填
频道注解。可部署资源必须具有匹配的注解才能包含在频道中。
metadata.labels
选填
频道的标签。
spec.insecureSkipVerify
选填
默认值为 false
,如果设置 true
,则通过跳过身份验证来构建频道连接
Show more
频道的定义结构类似以下 YAML 内容:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: predev-ch
namespace: ns-ch
labels:
app: nginx-app-details
spec:
type: HelmRepo
pathname: https://kubernetes-charts.storage.googleapis.com/
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : predev- ch
namespace : ns- ch
labels :
app : nginx- app- details
spec :
type : HelmRepo
pathname : https: //kubernetes- charts.storage.googleapis.com/
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下示例频道定义将对象存储桶抽象为频道:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: dev
namespace: ch-obj
spec:
type: ObjectBucket
pathname: [http://9.28.236.243:xxxx/dev] # URL is appended with the valid bucket name, which matches the channel name.
secretRef:
name: miniosecret
gates:
annotations:
dev-ready: true
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : dev
namespace : ch- obj
spec :
type : ObjectBucket
pathname : [ http: //9.28.236.243: xxxx/dev]
secretRef :
name : miniosecret
gates :
annotations :
dev-ready : true
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下示例频道定义将 Helm 仓库抽象为频道:
弃用备注: 对于 2.9,在频道 ConfigMap
引用中指定 insecureSkipVerify: "true"
来跳过 Helm repo SSL 证书已被弃用。请参阅以下示例,它使用 spec.insecureSkipVerify: true
进行替换:
apiVersion: v1
kind: Namespace
metadata:
name: hub-repo
---
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: Helm
namespace: hub-repo
spec:
pathname: [https://9.21.107.150:8443/helm-repo/charts] # URL points to a valid chart URL.
insecureSkipVerify: true
type: HelmRepo
apiVersion : v1
kind : Namespace
metadata :
name : hub- repo
---
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : Helm
namespace : hub- repo
spec :
pathname : [ https: //9.21.107.150: 8443/helm- repo/charts]
insecureSkipVerify : true
type : HelmRepo
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下频道定义显示了 Helm 仓库频道的另一个示例:
注: 对于 Helm, Helm chart 中包含的所有 Kubernetes 资源必须具有标签发行版本{{ .Release.Name }}
才能正确显示应用程序拓扑。
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: predev-ch
namespace: ns-ch
labels:
app: nginx-app-details
spec:
type: HelmRepo
pathname: https://kubernetes-charts.storage.googleapis.com/
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : predev- ch
namespace : ns- ch
labels :
app : nginx- app- details
spec :
type : HelmRepo
pathname : https: //kubernetes- charts.storage.googleapis.com/
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下示例频道定义显示了 Git 仓库的频道示例。在以下示例中,secretRef
是指用于访问 pathname
中指定的 Git 仓库的用户身份。如果您有一个公共存储库,则不需要 secretRef
标签和值:
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: hive-cluster-gitrepo
namespace: gitops-cluster-lifecycle
spec:
type: Git
pathname: https://github.com/open-cluster-management/gitops-clusters.git
secretRef:
name: github-gitops-clusters
---
apiVersion: v1
kind: Secret
metadata:
name: github-gitops-clusters
namespace: gitops-cluster-lifecycle
data:
user: dXNlcgo= # Value of user and accessToken is Base 64 coded.
accessToken: cGFzc3dvcmQ
apiVersion : apps.open- cluster- management.io/v1
kind : Channel
metadata :
name : hive- cluster- gitrepo
namespace : gitops- cluster- lifecycle
spec :
type : Git
pathname : https: //github.com/open- cluster- management/gitops- clusters.git
secretRef :
name : github- gitops- clusters
---
apiVersion : v1
kind : Secret
metadata :
name : github- gitops- clusters
namespace : gitops- cluster- lifecycle
data :
user : dXNlcgo=
accessToken : cGFzc3dvcmQ
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
查看可以用来构建文件的示例和 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
以下 YAML 结构显示订阅的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含某些必需字段和值。
根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具编写您自己的 YAML 内容:
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name:
namespace:
labels:
spec:
sourceNamespace:
source:
channel:
name:
packageFilter:
version:
labelSelector:
matchLabels:
package:
component:
annotations:
packageOverrides:
- packageName:
packageAlias:
- path:
value:
placement:
local:
clusters:
name:
clusterSelector:
placementRef:
name:
kind: Placement
overrides:
clusterName:
clusterOverrides:
path:
value:
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name :
namespace :
labels :
spec :
sourceNamespace :
source :
channel :
name :
packageFilter :
version :
labelSelector :
matchLabels :
package :
component :
annotations :
packageOverrides :
- packageName :
packageAlias :
- path :
value :
placement :
local :
clusters :
name :
clusterSelector :
placementRef :
name :
kind : Placement
overrides :
clusterName :
clusterOverrides :
path :
value:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Expand 字段 必需/可选 描述
apiVersion
必填
将值设为 apps.open-cluster-management.io/v1
。
kind
必填
将值设为 Subscription
以表示资源是订阅。
metadata.name
必填
用于标识订阅的名称。
metadata.namespace
必填
用于订阅的命名空间资源。
metadata.labels
选填
订阅的标签。
spec.channel
选填
为订阅定义频道的命名空间名称("Namespace/Name")。定义 channel
、source
或 sourceNamespace
字段。通常,使用 channel
字段来指向频道,而不要使用 source
或 sourceNamespace
字段。如果定义了多个字段,则会使用定义的第一个字段。
spec.sourceNamespace
选填
将可部署资源存储在 hub 集群上的源命名空间。仅将该字段用于命名空间频道。定义 channel
、source
或 sourceNamespace
字段。通常,使用 channel
字段来指向频道,而不要使用 source
或 sourceNamespace
字段。
spec.source
选填
存储可部署资源的 Helm 仓库的路径名称 ("URL")。仅将该字段用于 Helm 仓库频道。定义 channel
、source
或 sourceNamespace
字段。通常,使用 channel
字段来指向频道,而不要使用 source
或 sourceNamespace
字段。
spec.name
对于 HelmRepo
类型的频道是必需的,但对于 ObjectBucket
类型的频道是可选的
目标 Helm chart 或可部署资源在频道中的具体名称。对于该字段为可选的频道类型,如果没有定义 name
或 packageFilter
,则会找到所有可部署资源,并检索每个可部署资源的最新版本。
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
可防止在订阅中订阅指定频道中的任何资源。
当集群属于独立集群或您将要直接管理此集群时,请使用此字段。如果您的集群是多集群的一部分,并且不想直接管理集群,则只使用 clusters
、clusterSelector
或 placementRef
中的一个来定义您的订阅要放置的位置。如果您的集群是多集群的 Hub,而您想要直接管理集群,则在订阅 operator 可以在本地订阅资源前,必需将 Hub 注册为受管集群。
spec.placement.clusters
选填
定义要放置订阅的集群。仅使用 clusters
、clusterSelector
或 placementRef
中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 hub 集群的独立集群,您也可以使用 本地集群
。
spec.placement.clusters.name
可选,但在定义订阅集群时是必需的
订阅集群的一个或多个名称。
spec.placement.clusterSelector
选填
定义标签选择器,用于标识要放置订阅的集群。仅使用 clusters
、clusterSelector
或 placementRef
中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 hub 集群的独立集群,您也可以使用 本地集群
。
spec.placement.placementRef
选填
定义用于订阅的放置规则。仅使用 clusters
、clusterSelector
或 placementRef
中的一个来为多集群定义要在哪里放置订阅。如果集群是一个不属于 Hub 集群的独立集群,您也可以使用 本地集群
。
spec.placement.placementRef.name
可选,但在使用放置规则时是必需的
订阅的放置规则名称。
spec.placement.placementRef.kind
可选,但在使用放置规则时是必需的。
将值设为 Placement
以表示将放置规则用于通过订阅进行部署。
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 。
Show more
备注:
您的订阅类似以下 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: Placement
name: towhichcluster
overrides:
- clusterName: "/"
clusterOverrides:
- path: "metadata.namespace"
value: default
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 : Placement
name : towhichcluster
overrides :
- clusterName : "/"
clusterOverrides :
- path : "metadata.namespace"
value : default
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
有关您可以部署的应用程序示例,请参阅 stolostron
存储库。
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
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
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
如果存在镜像的频道(应用程序源存储库),您可以在订阅 YAML 中指定 secondaryChannel
。当应用程序订阅无法使用主频道连接到仓库服务器时,它会使用二级频道连接到仓库服务器。确保存储在二级频道中的应用程序清单与主频道同步。请参阅以下使用 secondaryChannel
的订阅 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
secondaryChannel: ns-ch-2/predev-ch-2
name: nginx-ingress
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
secondaryChannel : ns- ch- 2/predev- ch- 2
name : nginx- ingress
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下示例订阅包含多个配置的时间窗。每个周一、周三和周五的 10:20 AM 到 10:30 AM 之间有一个时间窗。一个时间窗也在每周、周三和周五的 12:40 PM 到 1:40 PM 之间发生。订阅只在这 6 个每周时间窗内开始部署。
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: Placement
name: towhichcluster
timewindow:
windowtype: "active"
location: "America/Los_Angeles"
daysofweek: ["Monday", "Wednesday", "Friday"]
hours:
- start: "10:20AM"
end: "10:30AM"
- start: "12:40PM"
end: "1:40PM"
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 : Placement
name : towhichcluster
timewindow :
windowtype : "active"
location : "America/Los_Angeles"
daysofweek : [ "Monday" , "Wednesday" , "Friday" ]
hours :
- start : "10:20AM"
end : "10:30AM"
- start : "12:40PM"
end : "1:40PM"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
对于 timewindow
,请输入 active
或 blocked
,具体取决于类型的目的。
以下示例包含软件包覆盖,以定义 Helm chart 的 Helm 发行版本的不同版本名称。软件包覆盖设置用于将名称 my-nginx-ingress-releaseName
设置为 nginx-ingress
Helm 发行版本的不同发行版本名称。
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: simple
namespace: default
spec:
channel: ns-ch/predev-ch
name: nginx-ingress
packageOverrides:
- packageName: nginx-ingress
packageAlias: my-nginx-ingress-releaseName
packageOverrides:
- path: spec
value:
defaultBackend:
replicaCount: 3
placement:
local: false
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : simple
namespace : default
spec :
channel : ns- ch/predev- ch
name : nginx- ingress
packageOverrides :
- packageName : nginx- ingress
packageAlias : my- nginx- ingress- releaseName
packageOverrides :
- path : spec
value :
defaultBackend :
replicaCount : 3
placement :
local : false
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
以下订阅会自动拉取版本 1.36.x
的最新 nginx
Helm 发行版本。当源 Helm 仓库中有新版本可用时,Helm 发行版本可部署资源会放置在 my-development-cluster-1
集群上。
spec.packageOverrides
部分显示了用于覆盖 Helm 发行版本值的可选参数。覆盖值合并到 Helm 发行版本 values.yaml
文件中,用于检索 Helm 发行版本的可配置变量。
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:
clusters:
- name: my-development-cluster-1
packageOverrides:
- packageName: my-server-integration-prod
packageOverrides:
- path: spec
value:
persistence:
enabled: false
useDynamicProvisioning: false
license: accept
tls:
hostname: my-mcm-cluster.icp
sso:
registrationImage:
pullSecret: hub-repo-docker-secret
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 :
clusters :
- name : my- development- cluster- 1
packageOverrides :
- packageName : my- server- integration- prod
packageOverrides :
- path : spec
value :
persistence :
enabled : false
useDynamicProvisioning : false
license : accept
tls :
hostname : my- mcm- cluster.icp
sso :
registrationImage :
pullSecret : hub- repo- docker- secret
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: sample-subscription
namespace: default
annotations:
apps.open-cluster-management.io/git-path: sample_app_1/dir1
apps.open-cluster-management.io/git-branch: branch1
spec:
channel: default/sample-channel
placement:
placementRef:
kind: Placement
name: dev-clusters
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : sample- subscription
namespace : default
annotations :
apps.open-cluster-management.io/git-path : sample_app_1/dir1
apps.open-cluster-management.io/git-branch : branch1
spec :
channel : default/sample- channel
placement :
placementRef :
kind : Placement
name : dev- clusters
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在本示例订阅中,注解 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
资源。此资源是内部应用管理资源,可以安全地忽略。
您可以在 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
文件。
如果订阅的 Git 文件夹中有 kustomization.yaml
或 kustomization.yml
文件,则会应用 kustomize。您可以使用 spec.packageOverrides
在订阅部署时覆盖 kustomization
。
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: example-subscription
namespace: default
spec:
channel: some/channel
packageOverrides:
- packageName: kustomization
packageOverrides:
- value: |
patchesStrategicMerge:
- patch.yaml
apiVersion : apps.open- cluster- management.io/v1
kind : Subscription
metadata :
name : example- subscription
namespace : default
spec :
channel : some/channel
packageOverrides :
- packageName : kustomization
packageOverrides :
- value : |
patchesStrategicMerge :
- patch.yaml
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
为了覆盖 kustomization.yaml
文件,需要在 packageOverrides
中使用 packageName: kustomization
。覆盖操作会添加新条目或更新现有条目。它不会移除现有的条目。
默认情况下,Git 频道订阅每分钟克隆频道中指定的 Git 仓库,并在提交 ID 发生更改时应用更改。另外,您还可以将订阅配置为仅在 Git 仓库发送存储库 PUSH 和 PULL webhook 事件通知时应用更改。
要在 Git 仓库中配置 webhook,需要一个目标 webhook 有效负载 URL 和可选的 secret。
在 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
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
然后,使用 oc get route multicluster-operators-subscription -n open-cluster-management
命令查找外部可访问的主机名。
webhook 有效负载 URL 是 https://<externally-reachable hostname>/webhook
。
Webhook secret 是可选的。在频道命名空间中创建 Kubernetes secret。secret 必须包含 data.secret
。
请参见以下示例:
apiVersion: v1
kind: Secret
metadata:
name: my-github-webhook-secret
data:
secret: BASE64_ENCODED_SECRET
apiVersion : v1
kind : Secret
metadata :
name : my- github- webhook- secret
data :
secret : BASE64_ENCODED_SECRET
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
data.secret
的值是您要使用的 base-64 编码 WebHook secret。
最佳实践: 为每个 Git 仓库使用唯一的 secret。
使用有效负载 URL 和 webhook secret 在 Git 仓库中配置 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"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
如果您使用了一个 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>"
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
订阅中不需要特定于 webhook 的配置。
弃用: PlacementRule
已被弃用。改为使用 Placement
。
放置规则 (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
以下 YAML 结构显示放置规则的必需字段,以及一些常见可选字段。您的 YAML 结构需要包含一些必需字段和值。根据应用程序管理要求,您可能需要包含其他可选字段和值。您可以使用任何工具和产品控制台编写您自己的 YAML 内容
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name:
namespace:
resourceVersion:
labels:
app:
chart:
release:
heritage:
selfLink:
uid:
spec:
clusterSelector:
matchLabels:
datacenter:
environment:
clusterReplicas:
clusterConditions:
ResourceHint:
type:
order:
Policies:
apiVersion : apps.open- cluster- management.io/v1
kind : PlacementRule
metadata :
name :
namespace :
resourceVersion :
labels :
app :
chart :
release :
heritage :
selfLink :
uid :
spec :
clusterSelector :
matchLabels :
datacenter :
environment :
clusterReplicas :
clusterConditions :
ResourceHint :
type :
order :
Policies:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Expand 字段 必需/可选 描述
apiVersion
必填
将值设为 apps.open-cluster-management.io/v1
。
kind
必填
将值设为 PlacementRule
以表示资源是放置规则。
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
选填
将值设为 cpu
以根据可用 CPU 内核选择集群,或者设为 memory
以根据可用内存资源选择集群。
spec.ResourceHint.order
选填
将值设为 asc
表示升序,或者设为 desc
表示降序。
spec.Policies
选填
放置规则的策略过滤器。
Show more
有关您可以部署的应用程序示例,请参阅 stolostron
存储库。
现有放置规则可以包括以下字段来指示放置规则的状态。此状态部分附加在规则的 YAML 结构中的 spec
部分后面。
status:
decisions:
clusterName:
clusterNamespace:
status :
decisions :
clusterName :
clusterNamespace:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Expand 字段 描述
status
放置规则的状态信息。
status.decisions
定义放置可部署资源的目标集群。
status.decisions.clusterName
目标集群的名称
status.decisions.clusterNamespace
目标集群的命名空间。
Show more
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name: gbapp-gbapp
namespace: development
labels:
app: gbapp
spec:
clusterSelector:
matchLabels:
environment: Dev
clusterReplicas: 1
status:
decisions:
- clusterName: local-cluster
clusterNamespace: local-cluster
apiVersion : apps.open- cluster- management.io/v1
kind : PlacementRule
metadata :
name : gbapp- gbapp
namespace : development
labels :
app : gbapp
spec :
clusterSelector :
matchLabels :
environment : Dev
clusterReplicas : 1
status :
decisions :
- clusterName : local- cluster
clusterNamespace : local- cluster
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name: towhichcluster
namespace: ns-sub-1
labels:
app: nginx-app-details
spec:
clusterReplicas: 1
clusterConditions:
- type: ManagedClusterConditionAvailable
status: "True"
clusterSelector:
matchExpressions:
- key: environment
operator: In
values:
- dev
apiVersion : apps.open- cluster- management.io/v1
kind : PlacementRule
metadata :
name : towhichcluster
namespace : ns- sub- 1
labels :
app : nginx- app- details
spec :
clusterReplicas : 1
clusterConditions :
- type : ManagedClusterConditionAvailable
status : "True"
clusterSelector :
matchExpressions :
- key : environment
operator : In
values :
- dev
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
查看可以用来构建文件的示例和 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
要编写用于创建或更新应用程序资源的应用程序定义 YAML 内容,YAML 结构需要包含一些必需字段和值。根据应用程序要求或应用程序管理要求,您可能需要包含其他可选字段和值。
以下 YAML 结构显示应用程序的必需字段,以及一些常见可选字段。
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
name:
namespace:
spec:
selector:
matchLabels:
label_name: label_value
apiVersion : app.k8s.io/v1beta1
kind : Application
metadata :
name :
namespace :
spec :
selector :
matchLabels :
label_name : label_value
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Expand 字段 值 描述
apiVersion
app.k8s.io/v1beta1
必需
kind
Application
必需
metadata
name
:用于标识应用程序资源的名称。
必需
namespace
:用于应用程序的命名空间资源。
spec
selector.matchLabels
key:value
对,这是此应用程序关联的订阅或订阅上找到的 Kubernetes 标签和值。该标签允许应用程序资源通过执行标签名称和值匹配来查找相关订阅。
必需
Show more
定义这些应用程序的 spec 是基于 Kubernetes 特别兴趣小组 (SIG) 提供的应用程序元数据描述符自定义资源定义。只有在表中显示的值才是必需的。
您可以使用此定义来帮助编写自己的应用程序 YAML 内容。有关此定义的更多信息,请参阅 Kubernetes SIG 应用程序 CRD 社区规格 。
有关您可以部署的应用程序示例,请参阅 stolostron
存储库。
应用程序的定义结构类似以下示例 YAML 内容:
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
name: my-application
namespace: my-namespace
spec:
selector:
matchLabels:
my-label: my-label-value
apiVersion : app.k8s.io/v1beta1
kind : Application
metadata :
name : my- application
namespace : my- namespace
spec :
selector :
matchLabels :
my-label : my- label- value
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow