Operator

目录

概述

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

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

  • OLM (olm-operator):管理 Operators 的完整生命周期,包括安装、升级和版本冲突检测。
  • Catalog Operator:管理 Operator 目录并生成相应的 InstallPlan。
  • CatalogSource:命名空间范围的 CRD,管理 Operator 目录源并提供 Operator 元数据(如版本信息、管理的 CRD)。平台提供 3 个默认 CatalogSource: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 提供三种安装模式:

  • 单命名空间 (Single Namespace)
  • 多命名空间 (Multi Namespace)
  • 集群级 (Cluster)

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

更新渠道

若 Operator 提供多个更新渠道,可选择订阅的渠道,例如 stable

审批策略

选项:自动 (Automatic)手动 (Manual)

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

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

安装位置

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

若多个 Operators 共享同一命名空间,其 Subscription 可能会合并为单个 InstallPlan:

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

通过 Web 控制台安装

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

  2. 进入 Marketplace > OperatorHub

  3. 若状态为 Absent

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

通过 YAML 安装

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

手动模式

harbor-ce-operator 来自 ,仅支持 手动 审批。
手动模式下,即使发布新版本,Operator 也不会自动升级,需手动 Approve 后 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,因平台提供的所有 catalogSource 均位于此命名空间。
  • .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 来自非 来源,其审批策略可设置为 自动 (Automatic)
自动模式下,发布新版本时 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 支持批量升级。