operator summary

概念

Operator 是一组软件,可用于降低运行其他软件的操作复杂程度,从技术上讲,Operator 是一种打包、部署和管理 Kubernetes 应用程序的方法。
operator可以:

  • 重复安装和升级
  • 持续对每个系统组件执行运行状况检查
  • 汇总现场工程师了解的情况并将其传输给所有用户,而非一两个用户
    operator与servie broker相比:
  • Service Broker 朝着实现应用程序的编程式发现和部署的目标前进了一步。但它并非一个长时间运行的进程,所以无法执行第 2 天操作,如升级、故障转移或扩展。它在安装时提供对可调参数的自定义和参数化,而 Operator 则可持续监控集群的当前状态。非集群服务仍非常适合于 Service Broker,但也存在合适于这些服务的 Operator

operator framework

  • operator SDK 辅助开发者根据自身专业知识,引导,构建,测试和包装其operator
  • Operator Lifecycle Manager 控制集群中operator的安装,升级和基于角色的访问控制(RBAC)
  • Operator Registry 存储CSV和CRD以便在集群中创建,并存储有关软件包和频道的operator元数据
  • OperatorHub
  • Operator Metering

常用术语

  • bundle 在bndle fromat中,bundle是CSV,manifests以及metadata的集合
  • CatalogSource 定义应用程序的CSV CRD和软件包仓库
  • channel channel为 Operator 定义更新流,用于为订阅者推出更新。channel head指向该channel的最新版本。例如,stable channel中会包含 Operator 的所有稳定版本,按由旧到新的顺序排列
  • CSV CSV是利用operator的manifest创建的YAML清单,可辅助olm在集群中运行operator。附带的manifest还可用于在用户界面填充徽标 描述和版本信息。此外,CSV 还是运行 Operator 所需的技术信息来源,类似于其需要的 RBAC 规则及其管理或依赖的自定义资源 (CR)。
  • InstallPlan ip是一个列出了为自动安装或升级 CSV 而需创建的资源的计算列表
  • OperatorGroup og将部署在同一命名空间中的所有 Operator 配置为og对象,以便在一系列命名空间或集群范围内监视其 CR。
  • Subscription sub通过跟踪软件包中的频道来保持 CSV 最新。

Operator Lifecycle Manager

olm可帮助用户安装 更新和管理所有operator的生命周期

  1. olm资源
    • 由olm oerator和catalog oerator管理的CRD
      • CSV OLM 需要与 Operator 相关的元数据,以确保它可以在集群中安全运行,并在发布新版 Operator 时提供有关如何应用更新的信息。此外,CSV 还是运行 Operator 所需的技术信息来源,例如其管理或依赖的自定义资源 (CR)、RBAC 规则、集群要求和安装策略。此信息告诉 OLM 如何创建所需资源并将 Operator 设置为 Deployment。
      • catalogsource CatalogSource 代表 OLM 可查询的元数据存储,以发现和安装 Operator 及其依赖项。
        catsrc有三种sourceTypes:
        - 带有image引用的grpc:OLM拉取镜像并运行pod
        - 带有address引用的grpc:OLM会尝试给定地址的gRPC API
        - internalconfigmap: OLM 解析 ConfigMap 数据,并运行一个可以为其提供 gRPC API 的 pod
      • Subscription 将 Operator 与 CatalogSource 关联的自定义资源,Subscription 描述了要订阅 Operator 软件包的哪个频道,以及是自动还是手动执行更新。如果设置为自动,Subscription 会确保由 OLM 管理并升级 Operator,以确保集群中始终运行最新版本。
      • InstallPlan ip定义了要创建的一组资源,用于安装或升级到 CSV 定义的 ClusterService 的特定版本。
      • OperatorGroup 为 OLM 安装的 Operator 提供多租户配置。OperatorGroup 选择目标命名空间,在其中为其成员 Operator 生成所需的 RBAC 访问权限。
  2. olm架构
    由olm operator和catalog operator管理的CRD:csv,ip,catsrc,sub,og
    由olm operator创建的资源:sa,clusterRoles,clusterRoleBindings
    由catalog operator创建的资源 CRD CSV
    • Catalog Operator
      Catalog Operator 负责解析和安装 CSV 及其指定的所需资源。另外还负责监视频道中的 CatalogSource 中是否有软件包更新,并将其升级(可选择自动)至最新可用版本。
      用户可创建 Subscription 资源,该资源将配置所需软件包、频道和 CatalogSource,以便从中拉取更新。找到更新后,便会代表用户将适当 InstallPlan 写入命名空间。
      catalog operator工作流:
      1. 连接到集群中的每个 CatalogSource
      2. 监视是否有用户创建的未解析 InstallPlan,如果有:
        • 查找与请求名称相匹配的 CSV,并将此 CSC 添加为已解析的资源。
        • 对于每个受管或所需 CRD,将其添加为已解析的资源。
        • 对于每个所需 CRD,找到管理相应 CRD 的 CSV。
      3. 监视是否有已解析的 InstallPlan 并为其创建已发现的所有资源(用户批准或自动)。
      4. 监视 CatalogSource 和 Subscription,并根据它们创建 InstallPlan。
    • OLM operator
      集群中存在 CSV 中指定需要的资源后,OLM Operator 将负责部署由 CSV 资源定义的应用程序。OLM Operator 不负责创建所需资源, Catalog Operator 来创建这些资源
      OLM operator工作流:
      1. 监视命名空间中的 ClusterServiceVersion (CSV),并检查是否满足要求
      2. 满足要求,运行CSV安装策略
      > CSV必须为og的活跃成员才可运行该安装策略
      
    • Catalog Registry
      Catalog Registry 存储 CSV 和 CRD 以便在集群中创建,并存储有关软件包和频道的元数据。
  3. OG
    • og成员资格,满足以下任一条件:
      1. Operator 的 CSV 与 OperatorGroup 存在于同一命名空间中。
      2. Operator 的 CSV InstallMode 支持 OperatorGroup 所针对的命名空间集。
        InstallMode和受支持的og
        • OwnNamespace:Operator 可以是选择其自有命名空间的 OperatorGroup 的成员。
        • SingleNamespace:Operator 可以是选择某一个命名空间的 OperatorGroup 的成员。
        • MultiNamespace:Operator 可以是选择多个命名空间的 OperatorGroup 的成员。
        • AllNamespaces:Operator 可以是选择所有命名空间的 OperatorGroup 的成员(目标命名空间集为空字符串 "")
          全局 OperatorGroup 的 status.namespace 包含空字符串 (""),而该字符串会向正在使用的 Operator 发出信号,要求其监视所有命名空间。
          OLM 会在每个 OperatorGroup 的目标命名空间中复制 OperatorGroup 的所有活跃成员 CSV。复制 CSV 的目的在于告诉目标命名空间的用户,特定 Operator 已配置为监视在此创建的资源。
  • 基于角色的访问控制
    创建 OperatorGroup 时,会生成三个 ClusterRole。每个 ClusterRole 均包含一个 AggregationRule,后者设置了 ClusterRoleSelector 以匹配标签,
    • <operatorgroup_name>-admin (olm.opgroup.permissions/aggregate-to-admin: <operatorgroup_name>)
    • <operatorgroup_name>-edit (olm.opgroup.permissions/aggregate-to-edit: <operatorgroup_name>)
    • <operatorgroup_name>-view (olm.opgroup.permissions/aggregate-to-view: <operatorgroup_name>)
      CSV 成为 OperatorGroup 的活跃成员时,只要该 CSV 正在使用 AllNamespaces InstallMode 来监视所有命名空间,且没有因 InterOperatorGroupOwnerConflict 原因处于故障状态,便会生成以下 RBAC 资源。
    • 来自 CRD 的每个 API 资源的 ClusterRole (<kind>.<group>-<version>-admin <kind>.<group>-<version>-edit <kind>.<group>-<version>-view <kind>.<group>-<version>-view-crdview)
    • 来自APIService,针对每个 API 资源生成的 ClusterRole (<kind>.<group>-<version>-admin <kind>.<group>-<version>-edit <kind>.<group>-<version>-view)
    • 额外的role和rolebinding
  • og交集
    如果两个 OperatorGroup 的目标命名空间集的交集不是空集,且根据 olm.providedAPIs 注解的定义,所提供的 API 集的交集也不是空集,则称这两个 OperatorGroup 的提供的 API 有交集。
  • og故障
    1. 如果一个命名空间中存在多个 OperatorGroup,则在该命名空间中创建的所有 CSV 均会变成故障状态,故障原因为:TooManyOperatorGroups。一旦命名空间中 OperatorGroup 的数量变成 1,因该原因处于故障状态的 CSV 将转变为等待处理状态。
    2. 如果 CSV 的 InstallMode 不支持其命名空间中 OperatorGroup 的目标命名空间选择,CSV 将变为故障状态,故障原因为 UnsupportedOperatorGroup。一旦 OperatorGroup 的目标命名空间选择变为受支持的配置,或 CSV 的 InstallMode 经修改后支持 OperatorGroup 的目标命名空间选择,因该原因处于故障状态的 CSV 将转变为等待处理状态。