12.8. 附录

12.8.1. Operator 项目构建布局

Operator-sdk CLI 会为每个 Operator 项目生成大量软件包。以下部分描述每个生成的文件和目录的基本概要。

12.8.1.1. 基于 Go 的项目

使用 operator-sdk new 命令生成的基于 Go 的 Operator 项目(默认类型)包含以下目录和文件:

文件/文件夹用途

cmd/

包含 manager/main.go 文件,该文件是 Operator 的主程序。这将实例化一个新管理器,它会在 pkg/apis/ 下注册所有自定义资源定义,并启动 pkg/controllers/ 下的所有控制器。

pkg/apis/

包含定义自定义资源定义 (CRD) 的 API 的目录树。用户需要编辑 pkg/apis/<group>/<version>/<kind>_types.go 文件,为每个资源类型定义 API,并在控制器中导入这些软件包以监视这些资源类型。

pkg/controller

pkg 包含控制器实现。用户需要编辑 pkg/controller/<kind>/<kind>_controller.go 文件,以定义控制器处理指定 kind 资源类型的协调逻辑。

build/

包含用于构建 Operator 的 Dockerfile 和构建脚本。

deploy/

包含各种 YAML 清单,用于注册 CRD、设置 RBAC 和将 Operator 部署为 Deployment。

Gopkg.toml
Gopkg.lock

描述该 Operator 外部依赖项的 Go Dep 清单。

vendor/

golang vendor 文件夹,包含满足此项目导入内容的外部依赖项的本地副本。Go Dep 可直接管理 vendor。

12.8.1.2. 基于 Helm 的项目

使用 operator-sdk new --type helm 命令生成的基于 Helm 的 Operator 项目(默认类型)包含以下目录和文件:

文件/文件夹用途

deploy/

包含各种 YAML 清单,用于注册 CRD、设置 RBAC 和将 Operator 部署为 Deployment。

helm-charts/<kind>

包含使用 helm create 对等命令初始化的 Helm Chart。

build/

包含用于构建 Operator 的 Dockerfile 和构建脚本。

watches.yaml

包含 GroupVersionKind 和 Helm Chart 位置。