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:system、platform 和 custom。system 中的 Operators 不会在 OperatorHub 中显示。
- ClusterServiceVersion (CSV):命名空间范围的 CRD,描述 Operator 的特定版本,包括其所需的资源、CRD 和权限。
- Subscription:命名空间范围的 CRD,描述订阅的 Operator、其来源、获取渠道和升级策略。
- InstallPlan:命名空间范围的 CRD,描述实际执行的安装操作(如创建 Deployment、CRD、RBAC)。Operator 只有在 InstallPlan 被批准后才会安装或升级。
Operator 来源
为明确 OperatorHub 中不同 Operators 的生命周期策略,平台提供了 5 种来源类型:
-
由 提供和维护,包含完整的生命周期管理、安全更新、技术支持和 SLA 承诺。
-
Curated
从开源社区精选,版本与社区一致,无代码修改或重新编译。 提供指导和安全更新,但不保证 SLA 或生命周期管理。
-
Community
由开源社区提供,定期更新以保证可安装性,但不保证功能完整性;无 SLA 或 支持。
-
Marketplace
由通过 认证的第三方厂商提供和维护。 提供平台集成支持,核心维护由厂商负责。
-
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 控制台安装
-
登录 Web 控制台,切换至 管理员 视图。
-
进入 Marketplace > OperatorHub。
-
若状态为 Absent:
- 从 Custom Portal 下载 Operator 软件包或联系支持。
- 使用
violet
将软件包上传至目标集群(详见 CLI)。
- 在 Marketplace > Upload Packages 页面切换到 Operator 标签页,确认上传。
-
若状态为 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}'
示例输出:
表示 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:审批策略(
Manual
或 Automatic
),此处为 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.state:
UpgradePending
表示 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}'
示例输出:
表示 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
安装成功。
升级流程
-
上传新的 Operator 版本。
-
升级遵循 Subscription 中配置的策略:
-
自动升级:上传后自动升级。
-
手动升级:
- 批量升级:在 平台管理 > 集群管理 > 集群 > 功能 页面执行。
- 单个升级:在 OperatorHub 手动批准升级请求。
注意:仅 来源的 Operators 支持批量升级。