第 1 章 管理应用程序


查看以下主题以了解更多有关创建、部署和管理应用程序的信息。本指南假定您对 Kubernetes 概念和术语有一定的了解。Kubernetes 关键术语和组件在此文档中并没有详细定义。有关 Kubernetes 概念的更多信息,请参阅 Kubernetes 文档

应用程序管理功能为您提供了构建和部署应用程序及应用程序更新的统一和简化的选项。通过这些功能,开发人员和运维(DevOps)人员可通过基于频道和订阅的自动化功能在环境之间创建和管理应用程序。

重要:应用程序名称不能超过 37 个字符。

请参见以下主题:

1.1. 应用程序模型和定义

应用程序模型基于订阅一个或多个 Kubernetes 资源仓库(repository)(频道资源),其中包含部署在受管集群上的资源。单集群和多集群应用程序使用相同的 Kubernetes 规格,但多集群应用程序涉及更多的部署和应用程序管理生命周期自动化。

请参阅以下镜像以了解更多有关应用程序模型的信息:

Application model

查看以下应用程序资源部分:

1.1.1. 应用程序

Red Hat Advanced Cluster Management for Kubernetes 中的应用程序 (application.app.k8s.io) 用于对组成应用程序的 Kubernetes 资源进行分组。

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

您还可以使用发现的应用程序,它们是 OpenShift Container Platform GitOps 或集群中安装的 Argo CD Operator 的应用程序。共享同一存储库的应用程序在此视图中分组在一起。

1.1.2. 订阅

订阅(subscription.apps.open-cluster-management.io)允许集群订阅到一个源仓库(频道),它可以是以下类型:Git 仓库、Helm 发行 registry 或 Object Storage 仓库。

如果 hub 集群是自助管理的,订阅可以在本地将应用程序资源部署到 hub 集群。然后您可以在拓扑中查看 local-cluster (自管理的 hub 集群)订阅。资源要求可能会对 hub 集群性能造成负面影响。

订阅可以指向某个频道或存储位置,以标识新的或更新的资源模板。订阅 operator 可以在不先检查 hub 集群的情况下直接从存储位置下载并部署到目标受管集群。通过订阅,订阅 operator 可以监控该频道是否有新的或已更新的资源,而不是监控 Hub 集群。

请参阅以下订阅构架镜像:

Subscription model

1.1.2.1. Channels

频道(channel.apps.open-cluster-management.io)定义了集群可通过一个订阅来进行订阅的源仓库,它可以是以下类型:Git、Helm release 和 Object storage 仓库,以及 hub 集群上的资源模板。

如果您的应用程序需要的 Kubernetes 资源或 Helm chart 来自需要授权的频道,如授权 Git 仓库,您可以使用 secret 提供对这些频道的访问。您的订阅可以在保持数据安全的同时访问从这些频道部署的 Kubernetes 资源及 Helm chart。

频道使用 hub 集群中的一个命名空间,并指向存储了用于部署的资源的物理位置。集群可以到订阅频道,以标识要部署到每个集群的资源。

注: 最佳做法是在每个命名空间中创建一个频道。Git 频道可以与其他类型的频道(包括 Git、Helm 和 Object 存储)共享命名空间。

频道中的资源只能供订阅该频道的集群访问。

1.1.2.1.1. 支持的 Git 存储库服务器
  • GitHub
  • GitLab
  • Bitbucket
  • Gogs

1.1.2.2. 放置规则

放置规则(placementrule.apps.open-cluster-management.io)定义了可部署资源模板的目标集群。使用放置规则帮助您促进可部署资源的多集群部署。放置规则也用于监管和风险策略。有关如何的更多信息,请参阅监管

1.1.3. ApplicationSet

ApplicationSet 是 Argo CD 的子项目,由 GitOps Operator 支持。ApplicationSet 添加了对 Argo CD 应用程序的多集群支持。您可从 Red Hat Advanced Cluster Management 控制台创建应用程序设置。

注:有关部署 ApplicationSet 的先决条件的详情,请参阅将受管集群注册到 GitOps

OpenShift Container Platform GitOps 使用 Argo CD 来维护集群资源。Argo CD 是一个开源声明工具,用于应用程序的持续集成和持续部署(CI/CD)。OpenShift Container Platform GitOps 将 Argo CD 实现为一个控制器(OpenShift Container Platform GitOps Operator),以便持续监控 Git 仓库中定义的应用程序定义和配置。然后,Argo CD 将这些配置的指定状态与集群中的实时状态进行比较。

ApplicationSet 控制器通过 GitOps operator 实例在集群中安装,并通过添加额外的功能来补充它,从而支持集群管理员的场景。ApplicationSet 控制器提供以下功能:

  • 使用单个 Kubernetes 清单为使用 GitOps operator 的目标多个 Kubernetes 集群的功能。
  • 可以使用单个 Kubernetes 清单使用 GitOps operator 从一个或多个 Git 存储库部署多个应用程序。
  • 改进了对 monorepo 的支持,它位于 Argo CD 的上下文中,多个 Argo CD Application 资源在单个 Git 仓库中定义的多个 Argo CD Application 资源中。
  • 在多租户集群中,改进了单个集群租户使用 Argo CD 部署应用程序的能力,而无需涉及特权集群管理员启用目标集群/命名空间。

ApplicationSet operator 利用集群决策生成器来接口 Kubernetes 自定义资源,这些资源使用自定义资源特定逻辑来决定要部署到的受管集群。集群决策资源会生成受管集群列表,然后呈现到 ApplicationSet 资源的 template 字段。这使用 duck-typing 来完成,不需要了解所引用的 Kubernetes 资源的完整知识。

请参阅 ApplicationSet 中的 生成器.clusterDecisionResource 值示例:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: sample-application-set
  namespace: sample-gitops-namespace
spec:
  generators:
    - clusterDecisionResource:
        configMapRef: acm-placement
        labelSelector:
          matchLabels:
            cluster.open-cluster-management.io/placement: sample-application-placement
        requeueAfterSeconds: 180
  template:
    metadata:
      name: sample-application-{{name}}
    spec:
      project: default
      source:
        repoURL: https://github.com/sampleapp/apprepo.git
        targetRevision: main
        path: sample-application
      destination:
        namespace: sample-application
        server: "{{server}}"
      syncPolicy:
        syncOptions:
          - CreateNamespace=true
          - PruneLast=true
          - Replace=true
          - ApplyOutOfSyncOnly=true
          - Validate=false
        automated:
          prune: true
          allowEmpty: true
          selfHeal: true

请参阅以下放置

apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: sample-application-placement
  namespace: sample-gitops-namespace
spec:
  clusterSets:
    - sampleclusterset

如果要了解更多有关 ApplicationSets 的信息,请参阅 Cluster Decision Resource Generator

1.1.4. 应用程序文档

从以下文档了解更多相关信息:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.