5.14. 基于 Go 的 Operator 的对象修剪工具
operator-lib
修剪工具使基于 Go 的 Operator 清理或修剪对象(当不再需要时)。Operator 作者也可以使用实用程序创建自定义 hook 和策略。
红帽支持的 Operator SDK CLI 工具版本,包括 Operator 项目的相关构建和测试工具已被弃用,计划在以后的 OpenShift Dedicated 发行版本中删除。红帽将在当前发行生命周期中提供对这个功能的程序错误修复和支持,但此功能将不再获得改进,并将在以后的 OpenShift Dedicated 版本中删除。
对于创建新 Operator 项目,不建议使用红帽支持的 Operator SDK 版本。现有 Operator 项目的 Operator 作者可使用 OpenShift Dedicated 4 发布的 Operator SDK CLI 工具版本来维护其项目,并创建针对较新版本的 OpenShift Dedicated 的 Operator 发行版本。
以下与 Operator 项目相关的基础镜像 没有被弃用。这些基础镜像的运行时功能和配置 API 仍然会有程序错误修复和并提供对相关 CVE 的解决方案。
- 基于 Ansible 的 Operator 项目的基础镜像
- 基于 Helm 的 Operator 项目的基础镜像
有关 Operator SDK 不支持的、社区维护版本的信息,请参阅 Operator SDK (Operator Framework)。
5.14.1. 关于 operator-lib 修剪工具
对象(如作业或 pod)作为 Operator 生命周期的一个普通部分创建。如果具有 dedicated-admin
角色或 Operator 的管理员没有删除这些对象,他们可以保留在集群中并消耗资源。
在以前的版本中,可以使用以下选项修剪不必要的对象:
- Operator 作者必须为其 Operator 创建唯一的修剪解决方案。
- 集群管理员必须自行清理对象。
operator-lib
pruning(修剪)工具可为给定的命名空间从 Kubernetes 集群中删除对象。该程序库被添加到 operator-lib
库的 0.9.0
版本中,作为 Operator Framework 的一部分。
5.14.2. 修剪工具配置
operator-lib
修剪工具使用 Go 编写,包括基于 Go 的 Operator 的通用修剪策略。
配置示例
cfg = Config{ log: logf.Log.WithName("prune"), DryRun: false, Clientset: client, LabelSelector: "app=<operator_name>", Resources: []schema.GroupVersionKind{ {Group: "", Version: "", Kind: PodKind}, }, Namespaces: []string{"<operator_namespace>"}, Strategy: StrategyConfig{ Mode: MaxCountStrategy, MaxCountSetting: 1, }, PreDeleteHook: myhook, }
修剪工具配置文件通过使用以下字段定义修剪操作:
配置字段 | 描述 |
---|---|
| 用于处理库日志消息的日志记录器。 |
|
确定是否应删除资源的布尔值。如果设置为 |
| 用于 Kubernetes API 调用的 client-go Kubernetes ClientSet。 |
| 用于查找要修剪的资源的 Kubernetes 标签选择器表达式。 |
|
Kubernetes 资源类型. |
| 用于搜索资源的 Kubernetes 命名空间列表。 |
| 要运行的策略。 |
|
目前支持 |
|
|
|
Go |
| 制作可传递到自定义策略函数的值映射。 |
| 可选:在修剪资源前调用 Go 功能。 |
| 可选:实现自定义修剪策略的 Go 功能 |
修剪执行
您可以通过在修剪配置上运行 execute 功能来调用修剪操作。
err := cfg.Execute(ctx)
您还可以使用 cron 软件包或通过触发器的事件调用修剪程序来调用修剪操作。