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

    • Customer Portal 下载 Operator 包,或联系支持。
    • 使用 violet 将包上传至目标集群(详见 CLI)。
    • Marketplace > Upload Packages 页面切换至 Operator 标签页,确认上传。
  4. 若状态为 Ready,点击 Install 并按照 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}'

示例输出:

platform

表示 clickhouse-operator 来自 platform 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: platform
  sourceNamespace: cpaas-system

字段说明同手动模式。

5. 查看 Subscription 状态

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

6. 验证 CSV

kubectl -n clickhouse-operator get csv

示例输出:

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

安装成功。

升级流程

升级流程从上传新的 Operator 版本开始。

上传完成后,等待约 10–15 分钟,平台同步新版本信息。

同步完成后,升级遵循 Subscription 中配置的策略:

  • 若 Operator 审批策略自动,则自动升级。

  • 若为 手动,则需手动批准升级请求。可选择以下升级方式:

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

注意:仅 提供的 Operators 支持批量升级。