1.3. 管理应用程序资源

通过控制台,您可以使用 Git 仓库、Helm 仓库和对象存储库创建应用程序。

重要:Git 频道可以与所有其他频道类型共享命名空间:Helm、对象存储和其他 Git 命名空间。

请参阅以下主题以开始管理应用程序:

1.3.1. 使用 Git 存储库管理应用程序

当您使用应用程序部署 Kubernetes 资源时,这些资源位于特定的存储库中。了解如何在以下流程中从 Git 存储库部署资源。如需了解更多有关应用程序模型的信息,请参阅应用程序模型和定义

用户需要的访问权限:可创建应用的用户角色。您只能执行分配了相关角色的操作。如需更多关于访问要求的信息,请参阅基于角色的访问控制文档。

  1. 在控制台导航菜单中点 Manage application
  2. Create application

    对于以下步骤,选择 YAML:在 上,在控制台中创建应用程序时查看 YAML。请参阅后面的 YAML 示例。

  3. 在正确的字段中输入以下值:

    • name:输入应用程序的有效 Kubernetes 名称。
    • Namespace:从列表中选择一个命名空间。如果分配了正确的访问角色,您还可以使用有效的 Kubernetes 名称创建命名空间。
  4. 从可以使用的存储库列表中选择 Git
  5. 输入所需的 URL 路径或选择现有路径。

    如果选择了现有的 Git 存储库路径,则不需要指定连接信息(如果这是私有存储库)。连接信息是预先设置的,您不需要查看这些值。

    如果输入了新的 Git 存储库路径,则可以选择性地输入 Git 连接信息(如果这是一个私有 Git 存储库)。

  6. 输入可选字段的值,如分支和文件夹。
  7. 设置任何可选的部署前和部署后的任务。

    技术预览:如果您有要在订阅部署应用程序资源之前或之后运行的 Ansible Tower 作业,则设置 Ansible Tower secret。定义 Ansible 作业的 Ansible Tower 任务必须放置在此存储库的 prehook 和 posthook 文件夹中。

    如果在应用程序命名空间中创建了 secret,可以从下拉菜单中选择 Ansible Tower secret。在这个实例中,连接信息是预先设置的,您不需要查看这些值。

    如果输入了新的 Ansible Tower secret 名称以创建新 secret,则需要输入 Ansible Tower 主机和令牌。

  8. Select clusters to deploy 中,您可以更新应用程序的放置规则信息。从中选择:

    • 在本地集群中部署
    • 部署到所有在线集群和本地集群
    • 仅在与指定标签匹配的集群上部署应用程序资源
    • 如果在现有的、并已定义了放置规则的命名空间中创建应用程序,则可以选择 Select existing placement configuration 选项。
  9. Settings 中,您可以指定应用程序的行为。要在指定时间窗内阻止或激活对部署的更改,为 Deployment window 和您的 Time window configuration 选择一个选项。
  10. 您可以选择另一个存储库或点 Save
  11. 您会被重定向到 Overiew 页,可以在其中查看详情和拓扑。

1.3.1.1. YAML 示例

以下示例频道定义显示了 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

备注:要查看 REST API,请使用 API

1.3.1.2. 应用程序 Git Ops

使用 local-cluster 放置规则,您可以使用订阅向 hub 集群提供与配置相关的资源。

这些资源可以是用来配置应用程序和策略、运行 Ansible 作业、在置备或导入后配置集群的订阅。

1.3.1.2.1. GitOps 的 Repo 示例

在以下示例仓库中,您会看到每个 hub 集群的文件夹。您还可以为每个 hub 集群或每个 hub 集群创建一个仓库。

在 hub 集群上定义的单个订阅将拉取所有其他配置资源,如 hub 集群配置、策略和将配置和部署到 hub 和受管集群的通用应用程序。

用于存储这类信息的 Git 仓库类似以下示例文件和目录结构。参阅 root 路径、受管集群和 hub 集群部分:

1.3.1.2.2. GitOps 根路径

仓库根路径中的这些文件会创建一个订阅,该订阅会引用此 Git 仓库并应用所有 YAML,但 .kubernetesignore 中指定的除外。它包括这四个订阅文件和 ./managed-cluster-common 目录。

 /   # Repository root directory

  # The subscription that delivers all the previous content to the hub cluster:

  hub-application.yaml   # This represents the hub cluster configuration in the console
  hub-channels.yaml      # This points to `rhacm-hub-cluster` Git repository
  hub-subscriptions.yaml # This defines the time window, branch to be used, and defines which directories containing appropriate configs, such as `hub-policies`, should be used (can be all)
  hub-placement.yaml     # Points back to the `local-cluster` (hub cluster that is managed)
  .kubernetesignore      # Tells the subscription to ignore hub-application.yaml, hub-channels.yaml, hub-subscription.yaml & hub-placement.yaml
1.3.1.2.3. 受管集群的 GitOps 应用程序

以下目录包含了将应用程序应用到 managed 集群的订阅。这些订阅通过 root 目录中的订阅应用到 hub 集群。

在以下示例中,您会看到一个订阅到另一个订阅的订阅:

common-managed/
    apps/
      app-name-0/
        application.yaml
        subscription.yaml
        channel.yaml        # This points to a repository named `app-name-0`, of type Git, Helm, or Object Storage
        placementrule.yaml
      app-name-1/
        application.yaml
        subscription.yaml
        channel.yaml        # This points to a repository named `app-name-0`, of type Git, Helm, or Object Storage
        placementrule.yaml
    config/
      application.yaml      # named: `day2-config`
      subscription.yaml     # Points to the `managed-cluster-common/config` parent directory
      channel.yaml          # Can point to this Git repository or a different repository with the day-two configuration
      placementrule.yaml    # Defines the clusters to target
managed-cluster-common/
  configs/                  # These configurations are referenced through the `config` subscription
    certmanagement.yaml
    auth-oidc.yaml
    autoscaler.yaml
    descheduler.yaml
1.3.1.2.4. hub 集群的 GitOps 应用程序

以下策略应用于 hub 集群,为 hub 集群以及远程集群提供策略配置。

这些是通过 root 订阅交付的,如下例所示:

managed-cluster-common/
  policies/
    policy-0.yaml
    policy-1.yaml
  hub-policies/
    policy-0.yaml
    vault.yaml
    operators.yaml
1.3.1.2.5. 应用 GitOps

使用前面的组合示例,您可以指定以下内容:

  1. 可使用 CLI 命令应用一个根订阅。根订阅将返回此仓库,将所有 YAML 应用到 hub 集群。
  2. 第 1 步中的订阅,它会应用应用程序并从 common-managed/ 配置订阅。
  3. 第 2 步的配置订阅,它应用 managed-cluster-common/ 中定义的资源。
  4. managed-cluster-common/ 中定义的策略也由第 1 步的订阅应用到 hub 集群。这些策略包括针对 hub 集群的策略,以及那些针对受管集群的策略。