Operator

目录

概述

基于 OLM (Operator Lifecycle Manager) 框架,OperatorHub 提供了一个统一的界面,用于管理 Operators 的安装、升级和生命周期。管理员可以使用 OperatorHub 安装和管理 Operators,实现 Kubernetes 应用的全生命周期自动化,包括创建、更新和删除。

OLM 主要由以下组件和 CRD 组成:

  • OLM (olm-operator):管理 Operators 的完整生命周期,包括安装、升级和版本冲突检测。
  • Catalog Operator:管理 Operator 目录并生成相应的 InstallPlans。
  • CatalogSource:一个命名空间范围的 CRD,管理 Operator 目录源并提供 Operator 元数据(如版本信息、管理的 CRD)。平台提供了 3 个默认的 CatalogSources:systemplatformcustomsystem 中的 Operators 不会在 OperatorHub 中显示。
  • ClusterServiceVersion (CSV):一个命名空间范围的 CRD,描述 Operator 的特定版本,包括其所需的资源、CRD 和权限。
  • Subscription:一个命名空间范围的 CRD,描述订阅的 Operator、其来源、获取渠道和升级策略。
  • InstallPlan:一个命名空间范围的 CRD,描述实际执行的安装操作(如创建 Deployment、CRD、RBAC)。Operator 只有在 InstallPlan 被批准后才会安装或升级。

Operator 来源

为明确 OperatorHub 中不同 Operators 的生命周期策略,平台提供了 5 种来源类型:


  1. 提供和维护,包括全生命周期管理、安全更新、技术支持和 SLA 承诺。

  2. Curated
    从开源社区精选,版本与社区一致,无代码修改或重新编译。 提供指导和安全更新,但不保证 SLA 或生命周期管理。

  3. Community
    由开源社区提供,定期更新以保证可安装性,但不保证功能完整性;不提供 SLA 或 支持。

  4. Marketplace
    由通过 认证的第三方厂商提供和维护。 提供平台集成支持,核心维护由厂商负责。

  5. Custom
    由用户开发并上传,以满足自定义使用需求。

安装前准备

在安装 Operator 之前,需要了解以下关键参数:

安装模式

OLM 提供三种安装模式:

  • 单命名空间
  • 多命名空间
  • 集群级

推荐使用集群级模式(AllNamespaces)。 平台最终将升级至 OLM v1,仅支持 AllNamespaces 安装模式,因此应尽量避免使用 SingleNamespace 和 MultiNamespace。

更新通道

如果 Operator 提供多个更新通道,可以选择订阅其中一个通道,例如 stable

审批策略

选项:自动手动

  • 自动:当选定通道发布新版本时,OLM 会自动升级 Operator。
  • 手动:当有新版本时,OLM 会创建升级请求,必须由集群管理员手动批准后才会升级。

注意:来自 的 Operators 仅支持 手动 模式,否则安装会失败。

安装位置

建议为每个 Operator 创建独立的命名空间。

如果多个 Operators 共享同一命名空间,它们的 Subscriptions 可能会被合并为单个 InstallPlan:

  • 如果该命名空间中的 InstallPlan 需要手动审批且处于待审批状态,可能会阻塞同一 InstallPlan 中其他 Subscriptions 的自动升级。

通过 Web 控制台安装

  1. 登录 Web 控制台并切换到 管理员 视图。

  2. 进入 Marketplace > OperatorHub

  3. 如果状态为 Absent

    • 从 Custom Portal 下载 Operator 软件包或联系支持。
    • 使用 violet 将软件包上传至目标集群(详见 CLI)。
    • Marketplace > Upload Packages 页面切换到 Operator 标签页,确认上传。
  4. 如果状态为 Ready,点击 安装 并按照 Operator 用户指南操作。

通过 YAML 安装

以下示例演示了来自 (仅手动模式)和非 来源(手动或自动模式)的 Operator 安装方法。

INFO

与集群插件(使用 YAML 时必须始终安装在 global cluster)不同,Operator 是安装在希望运行它们的 目标集群 中。执行任何 YAML 清单前,请确保已连接到目标集群。

手动模式

harbor-ce-operator 来自 ,仅支持 手动 审批。
手动模式下,即使发布新版本,Operator 也不会自动升级,必须先手动 批准,OLM 才会执行升级。

1. 查看可用版本

(
  echo -e "CHANNEL\tNAME\tVERSION"
  kubectl get packagemanifest harbor-ce-operator -o json | jq -r '
    .status.channels[] |
    .name as $channel |
    .entries[] |
    [$channel, .name, .version] | @tsv
  '
) | column -t -s $'\t'

示例输出:

CHANNEL   NAME                         VERSION
harbor-2  harbor-ce-operator.v2.12.11  2.12.11
harbor-2  harbor-ce-operator.v2.12.10  2.12.10
stable    harbor-ce-operator.v2.12.11  2.12.11
stable    harbor-ce-operator.v2.12.10  2.12.10

字段说明:

  • CHANNEL:Operator 通道名称
  • NAME:CSV 资源名称
  • VERSION:Operator 版本

2. 确认 catalogSource

kubectl get packagemanifests harbor-ce-operator -ojsonpath='{.status.catalogSource}'

示例输出:

platform

表示 harbor-ce-operator 来自 platform catalogSource。

3. 创建命名空间

kubectl create namespace harbor-ce-operator

4. 创建 Subscription

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  annotations:
    cpaas.io/target-namespaces: ""
  name: harbor-ce-operator-subs
  namespace: harbor-ce-operator
spec:
  channel: stable
  installPlanApproval: Manual
  name: harbor-ce-operator
  source: platform
  sourceNamespace: cpaas-system
  startingCSV: harbor-ce-operator.v2.12.11

字段说明:

  • annotation cpaas.io/target-namespaces:建议设置为空,空表示集群范围安装。
  • .metadata.name:Subscription 名称(符合 DNS 规范,最长 253 字符)。
  • .metadata.namespace:Operator 安装的命名空间。
  • .spec.channel:订阅的 Operator 通道。
  • .spec.installPlanApproval:审批策略(ManualAutomatic),此处为 Manual,需手动批准安装/升级。
  • .spec.source:Operator catalogSource。
  • .spec.sourceNamespace:必须设置为 cpaas-system,因为平台提供的所有 catalogSources 均位于该命名空间。
  • .spec.startingCSV:指定安装的版本(手动审批时必填);为空则默认安装通道中最新版本。自动审批时不需要。

5. 查看 Subscription 状态

kubectl -n harbor-ce-operator get subscriptions harbor-ce-operator-subs -o yaml

关键输出:

  • .status.stateUpgradePending 表示 Operator 正在等待安装或升级。
  • Condition InstallPlanPending = True:等待手动批准。
  • .status.currentCSV:当前订阅的最新 CSV。
  • .status.installPlanRef:关联的 InstallPlan,必须批准后才能继续安装。

6. 批准 InstallPlan

kubectl -n harbor-ce-operator get installplan \
  "$(kubectl -n harbor-ce-operator get subscriptions harbor-ce-operator-subs -o jsonpath='{.status.installPlanRef.name}')"

示例输出:

NAME            CSV                           APPROVAL   APPROVED
install-27t29   harbor-ce-operator.v2.12.11   Manual     false

手动批准:

PLAN="$(kubectl -n harbor-ce-operator get subscription harbor-ce-operator-subs -o jsonpath='{.status.installPlanRef.name}')"
kubectl -n harbor-ce-operator patch installplan "$PLAN" --type=json -p='[{"op": "replace", "path": "/spec/approved", "value": true}]'

等待 CSV 创建,Phase 变为 Succeeded

kubectl -n harbor-ce-operator get csv

示例输出:

NAME                          DISPLAY                  VERSION   REPLACES                      PHASE
harbor-ce-operator.v2.12.11   Alauda Build of Harbor   2.12.11   harbor-ce-operator.v2.12.10   Succeeded

字段说明:

  • NAME:已安装的 CSV 名称
  • DISPLAY:Operator 显示名称
  • VERSION:Operator 版本
  • REPLACES:升级时被替换的 CSV
  • PHASE:安装状态(Succeeded 表示成功)

自动模式

clickhouse-operator 来自非 来源,其审批策略可设置为 自动
自动模式下,当发布新版本时,Operator 会自动升级,无需手动批准。

1. 查看可用版本

(
  echo -e "CHANNEL\tNAME\tVERSION"
  kubectl get packagemanifest clickhouse-operator -o json | jq -r '
    .status.channels[] |
    .name as $channel |
    .entries[] |
    [$channel, .name, .version] | @tsv
  '
) | column -t -s $'\t'

示例输出:

CHANNEL   NAME                           VERSION
stable    clickhouse-operator.v0.18.2    0.18.2

2. 确认 catalogSource

kubectl get packagemanifests clickhouse-operator -ojsonpath='{.status.catalogSource}'

示例输出:

community-operators

表示 clickhouse-operator 来自 community-operators catalogSource。

3. 创建命名空间

kubectl create namespace clickhouse-operator

4. 创建 Subscription

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  annotations:
    cpaas.io/target-namespaces: ""
  name: clickhouse-operator-subs
  namespace: clickhouse-operator
spec:
  channel: stable
  installPlanApproval: Automatic
  name: clickhouse-operator
  source: community-operators
  sourceNamespace: openshift-marketplace

字段说明同手动模式。

5. 查看 Subscription 状态

kubectl -n clickhouse-operator get subscriptions clickhouse-operator -oyaml

6. 验证 CSV

kubectl -n clickhouse-operator get csv

示例输出:

NAME                           DISPLAY                VERSION   PHASE
clickhouse-operator.v0.18.2    ClickHouse Operator    0.18.2    Succeeded

安装成功。

升级流程

  1. 上传新的 Operator 版本。

  2. 升级遵循 Subscription 中配置的策略:

    • 自动升级:上传后自动升级。

    • 手动升级

      • 批量升级:在 平台管理 > 集群管理 > 集群 > 功能 页面执行。
      • 单独升级:在 OperatorHub 中手动批准升级请求。

注意:仅 来源的 Operators 支持批量升级。