1.4. 管理应用程序资源
通过控制台,您可以使用 Git 仓库、Helm 仓库和对象存储库创建应用程序。
重要: Git 频道可以与所有其他频道类型共享命名空间: Helm、对象存储和其他 Git 命名空间。
请参阅以下主题以开始管理应用程序:
1.4.1. 使用 Git 存储库管理应用程序
当您使用应用程序部署 Kubernetes 资源时,这些资源位于特定的存储库中。了解如何在以下流程中从 Git 存储库部署资源。如需了解更多有关应用程序模型的信息,请参阅应用程序模型和定义。
用户需要访问权限: 可以创建应用程序的用户角色。您只能执行分配了相关角色的操作。了解 基于角色的访问控制文档中的访问要求。
- 在控制台导航菜单中点 Applications 来查看列出的应用程序并创建新应用。
- 可选: 在选择要创建的应用程序类型后,您可以选择 YAML: On 在控制台上按照创建和编辑应用程序查看 YAML。请参阅后面的 YAML 示例。
从可以使用的存储库列表中选择 Git,并在正确的字段中输入值。按照控制台中的指南,根据您的输入查看 YAML 编辑器更改值。
备注:
- 如果选择了现有的 Git 存储库路径,则不需要指定连接信息(如果这是私有存储库)。连接信息是预先设置的,您不需要查看这些值。
- 如果输入了新的 Git 存储库路径,则可以选择性地输入 Git 连接信息(如果这是一个私有 Git 存储库)。
-
请注意协调选项。
merge
选项是默认选择,这代表要添加新字段,并在资源中更新现有字段。您可以选择replace
。使用replace
选项,现有资源被替换为 Git 源。当订阅协调率被设置为low
时,订阅的应用程序资源最多可能需要一小时才能完成协调。在单个应用程序视图的卡上,单击 Sync 以手动协调。如果设为off
,则永远不会协调。
-
设置任何可选的部署前和部署后的任务。如果您有要在订阅部署应用程序资源之前或之后运行的 Ansible Tower 作业,则设置 Ansible Tower secret。定义 Ansible 作业的 Ansible Tower 任务必须放置在此存储库的
prehook
和posthook
文件夹中。 - 如果需要使用控制台添加凭证,可以点 Add credential。按照控制台中的指示进行操作。请参阅管理凭证概述。
- 点 Create。
- 您会被重定向到 Overiew 页,可以在其中查看详情和拓扑。
1.4.1.1. GitOps pattern
了解规划 Git 存储库以管理集群的最佳实践。
1.4.1.1.1. GitOps 示例目录
本例中的文件夹已定义并命名,每个文件夹包含在受管集群中运行的应用程序或配置:
-
根文件夹
managed-subscriptions
:包含以common-managed
文件夹为目标的 订阅。 -
子文件夹
apps/
:用来订阅common-managed
文件夹中的应用程序,并将放置到managed-clusters
。 -
子文件夹
config/
:用于订阅common-managed
文件夹中的配置,并将放置到managed-clusters
。 -
子文件夹
policies/
:用于将放置策略应用到managed-clusters
。 -
文件夹
root-subscription/
:订阅managed-subscriptions
文件夹的 hub 集群的初始订阅。
请查看目录示例:
common-managed/ apps/ app-name-0/ app-name-1/ config/ config001/ config002/ managed-subscriptions apps/ config/ policies/ root-subscription/
1.4.1.1.2. GitOps 流
为以下订阅流创建的目录结构:root-subscription
> managed-subscriptions
> common-managed
。
-
root-subscription/
中的单个订阅从 CLI 终端应用到 hub 集群。 订阅和策略会从
managed-subscription
文件夹下载并应用到 hub 集群。-
然后,
managed-subscription
文件夹中的订阅和策略根据放置在受管集群上执行工作。 -
放置(Placement)决定每个订阅或策略会影响哪个
managed-cluster
。 - 订阅或策略定义了与放置匹配的集群中的内容。
-
然后,
-
订阅将
common-managed
文件夹中的内容应用到与放置规则匹配的managed-clusters
。这也适用于所有与放置规则匹配的managed-clusters
。
1.4.1.1.3. 更多示例
-
有关
root-subscription/
的示例,请参阅 application-subscribe-all。 - 有关指向同一仓库中其他文件夹的订阅示例,请参阅 subscribe-all。
-
请参阅 nginx-apps 存储库中带有应用程序工件的
common-managed
文件夹示例。 - 请参阅策略集合中的策略示例。
1.4.2. 使用 Helm 仓库管理应用程序
当您使用应用程序部署 Kubernetes 资源时,这些资源位于特定的存储库中。了解如何在以下流程中从 Helm 仓库部署资源。如需了解更多有关应用程序模型的信息,请参阅应用程序模型和定义。
用户需要访问权限: 可以创建应用程序的用户角色。您只能执行分配了相关角色的操作。了解 基于角色的访问控制文档中的访问要求。
- 在控制台导航菜单中点 Applications 来查看列出的应用程序并创建新应用。
- 可选: 在选择要创建的应用程序类型后,您可以选择 YAML: On 在控制台上按照创建和编辑应用程序查看 YAML。请参阅后面的 YAML 示例。
- 从可以使用的存储库列表中选择 Helm,并在正确的字段中输入值。按照控制台中的指南,根据您的输入查看 YAML 编辑器更改值。
- 点 Create。
- 您会被重定向到 Overiew 页,可以在其中查看详情和拓扑。
1.4.2.1. YAML 示例
以下示例频道定义将 Helm 仓库抽象为频道:
注: 对于 Helm,Helm chart 中包含的所有 Kubernetes 资源都必须具有标签发行版本。{{ .Release.Name }}`
用于正确显示应用程序拓扑。
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://kubernetes-charts.storage.googleapis.com/] # URL points to a valid chart URL. type: HelmRepo
以下频道定义显示了 Helm 仓库频道的另一个示例:
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/
注: 要查看 REST API,使用 API。
1.4.3. 使用对象存储存储库管理应用程序
当您使用应用程序部署 Kubernetes 资源时,这些资源位于特定的存储库中。如需了解更多有关应用程序模型的信息,请参阅应用程序模型和定义:
用户需要访问权限: 可以创建应用程序的用户角色。您只能执行分配了相关角色的操作。了解 基于角色的访问控制文档中的访问要求。
- 在控制台导航菜单中点 Applications 来查看列出的应用程序并创建新应用。
- 可选: 在选择要创建的应用程序类型后,您可以选择 YAML: On 在控制台上按照创建和编辑应用程序查看 YAML。请参阅后面的 YAML 示例。
- 从可以使用的存储库列表中选择 Object store,并在正确的字段中输入值。按照控制台中的指南,根据您的输入查看 YAML 编辑器更改值。
- 点 Create。
- 您会被重定向到 Overiew 页,可以在其中查看详情和拓扑。
1.4.3.1. YAML 示例
以下示例频道定义将对象存储抽象为频道:
apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: dev namespace: ch-obj spec: type: Object storage pathname: [http://sample-ip:#####/dev] # URL is appended with the valid bucket name, which matches the channel name. secretRef: name: miniosecret gates: annotations: dev-ready: true
注: 要查看 REST API,使用 API。
1.4.3.2. 创建 Amazon Web Services (AWS) S3 对象存储存储桶
您可以设置订阅来订阅在 Amazon Simple Storage Service (Amazon S3) 对象存储服务中定义的资源。请参见以下步骤:
- 使用您的 AWS 帐户、用户名和密码登录到 AWS 控制台。
- 进入 Amazon S3 > Buckets 到存储桶主页。
- 点击 Create Bucket 创建存储桶。
- 选择 AWS region,这对连接 AWS S3 对象存储桶至关重要。
- 创建存储桶访问令牌。
- 导航到导航栏中的用户名,然后从下拉菜单中选择 My Security Credentials。
- 进入 AWS IAM credentials 标签页中的 Access keys for CLI, SDK, & API access,点 Create access key。
- 保存您的 Access key ID、Secret access key。
- 将对象 YAML 文件上传到存储桶。
1.4.3.3. 订阅 AWS 存储桶中的对象
- 创建一个带有 secret 的对象存储桶类型频道,以指定用于连接 AWS bucket 的 AccessKeyID、SecretAccessKey 和 Region。创建 AWS 存储桶时会创建这三个字段。
添加 URL。如果 URL 包含
s3://
或s3 and aws
关键字,则 URL 用来标识 AWS S3 存储桶中的频道。例如,请查看以下所有存储桶 URL 都有 AWS s3 存储桶标识符:https://s3.console.aws.amazon.com/s3/buckets/sample-bucket-1 s3://sample-bucket-1/ https://sample-bucket-1.s3.amazonaws.com/
注: 不需要 AWS S3 对象存储桶 URL 来将存储桶与 AWS S3 API 连接。
1.4.3.4. AWS 订阅示例
请参阅以下完整的 AWS S3 对象存储桶频道示例 YAML 文件:
apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: object-dev namespace: ch-object-dev spec: type: ObjectBucket pathname: https://s3.console.aws.amazon.com/s3/buckets/sample-bucket-1 secretRef: name: secret-dev --- apiVersion: v1 kind: Secret metadata: name: secret-dev namespace: ch-object-dev stringData: AccessKeyID: <your AWS bucket access key id> SecretAccessKey: <your AWS bucket secret access key> Region: <your AWS bucket region> type: Opaque
您可以继续创建其他 AWS 订阅和放置规则对象,如以下带有添加了 kind: PlacementRule
和 kind: Subscription
的示例 YAML 所示:
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: towhichcluster namespace: obj-sub-ns spec: clusterSelector: {} --- apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: name: obj-sub namespace: obj-sub-ns spec: channel: ch-object-dev/object-dev placement: placementRef: kind: PlacementRule name: towhichcluster
您还可以订阅对象存储桶中特定子文件夹内的对象。将 subfolder
注解添加到订阅中,它会强制对象存储桶订阅仅应用子文件夹路径中的所有资源。
请参阅带有 subfolder-1
的注解作为 bucket-path
:
annotations: apps.open-cluster-management.io/bucket-path: <subfolder-1>
有关子文件夹,请参见以下完整示例:
apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: annotations: apps.open-cluster-management.io/bucket-path: subfolder1 name: obj-sub namespace: obj-sub-ns labels: name: obj-sub spec: channel: ch-object-dev/object-dev placement: placementRef: kind: PlacementRule name: towhichcluster