12.7. Operator SDK CLI 参考
本指南记录 Operator SDK CLI 命令及其语法:
$ operator-sdk <command> [<subcommand>] [<argument>] [<flags>]
12.7.1. build
operator-sdk build
命令编译代码并构建可执行文件。build
完成后,镜像会在 docker
本地构建。之后必须推送至远程 registry。
参数 | 描述 |
---|---|
|
要构建的容器镜像,如: |
标记 | 描述 |
---|---|
| 通过在镜像中添加测试二进制文件来启用集群内测试。 |
|
用于测试的命名空间资源清单的路径。默认值: |
|
测试位置。默认值: |
| 使用方法帮助输出。 |
如果设定了 --enable-tests
,build
命令还会构建测试二进制文件,将其添加到容器镜像中,并生成一个 deploy/test-pod.yaml
文件,允许用户在群集上作为 Pod 运行测试。
输出示例
$ operator-sdk build quay.io/example/operator:v0.0.1 building example-operator... building container quay.io/example/operator:v0.0.1... Sending build context to Docker daemon 163.9MB Step 1/4 : FROM alpine:3.6 ---> 77144d8c6bdc Step 2/4 : ADD tmp/_output/bin/example-operator /usr/local/bin/example-operator ---> 2ada0d6ca93c Step 3/4 : RUN adduser -D example-operator ---> Running in 34b4bb507c14 Removing intermediate container 34b4bb507c14 ---> c671ec1cff03 Step 4/4 : USER example-operator ---> Running in bd336926317c Removing intermediate container bd336926317c ---> d6b58a0fcb8c Successfully built d6b58a0fcb8c Successfully tagged quay.io/example/operator:v0.0.1
12.7.2. completion
operator-sdk completion
命令生成 shell completion,以便更迅速、更轻松地发出 CLI 命令。
子命令 | 描述 |
---|---|
| 生成 bash completion。 |
| 生成 zsh completion。 |
标记 | 描述 |
---|---|
| 使用方法帮助输出。 |
输出示例
$ operator-sdk completion bash # bash completion for operator-sdk -*- shell-script -*- ... # ex: ts=4 sw=4 et filetype=sh
12.7.3. print-deps
operator-sdk print-deps
命令打印 Operator 所需的最新 Golang 软件包和版本。默认以列示格式打印。
标记 | 描述 |
---|---|
|
以 |
输出示例
$ operator-sdk print-deps --as-file required = [ "k8s.io/code-generator/cmd/defaulter-gen", "k8s.io/code-generator/cmd/deepcopy-gen", "k8s.io/code-generator/cmd/conversion-gen", "k8s.io/code-generator/cmd/client-gen", "k8s.io/code-generator/cmd/lister-gen", "k8s.io/code-generator/cmd/informer-gen", "k8s.io/code-generator/cmd/openapi-gen", "k8s.io/gengo/args", ] [[override]] name = "k8s.io/code-generator" revision = "6702109cc68eb6fe6350b83e14407c8d7309fd1a" ...
12.7.4. generate
operator-sdk generate
命令调用特定生成器以便根据需要生成代码。
子命令 | 描述 |
---|---|
|
在 |
每次需要更新自定义资源类型的 API(spec
和 status
)时,便必须运行该命令。
输出示例
$ tree pkg/apis/app/v1alpha1/ pkg/apis/app/v1alpha1/ ├── appservice_types.go ├── doc.go ├── register.go $ operator-sdk generate k8s Running code-generation for Custom Resource (CR) group versions: [app:v1alpha1] Generating deepcopy funcs $ tree pkg/apis/app/v1alpha1/ pkg/apis/app/v1alpha1/ ├── appservice_types.go ├── doc.go ├── register.go └── zz_generated.deepcopy.go
12.7.5. olm-catalog
operator-sdk olm-catalog
是所有 Operator Lifecycle Manager (OLM) 目录相关命令的父命令。
12.7.5.1. gen-csv
使用 gen-csv
子命令可将 ClusterServiceVersion (CSV) 清单和(可选)自定义资源定义 (CRD) 文件写入 deploy/olm-catalog/<operator_name>/<csv_version>
中。
标记 | 描述 |
---|---|
| CSV 清单的语义版本。必需。 |
| CSV 清单的语义版本,用作新版本基础。 |
|
CSV 配置文件的路径。默认值: |
|
使用最新 CRD 清单更新 |
输出示例
$ operator-sdk olm-catalog gen-csv --csv-version 0.1.0 --update-crds INFO[0000] Generating CSV manifest version 0.1.0 INFO[0000] Fill in the following required fields in file deploy/olm-catalog/operator-name/0.1.0/operator-name.v0.1.0.clusterserviceversion.yaml: spec.keywords spec.maintainers spec.provider spec.labels INFO[0000] Created deploy/olm-catalog/operator-name/0.1.0/operator-name.v0.1.0.clusterserviceversion.yaml
12.7.6. new
使用 operator-sdk new
命令可创建新的 Operator 应用程序,并根据输入的 <project_name>
生成(或构建)默认项目目录布局。
参数 | 描述 |
---|---|
| 新项目的名称。 |
标记 | 描述 |
---|---|
|
以 |
|
生成 Ansible playbook 框架。与 |
|
包含所生成 Go 文件标题的文件路径。复制到 |
|
用现有 Helm Chart |
| 用于所请求 Helm Chart 的 Chart 存储库 URL。 |
| Helm Chart 的特定版本。(默认值:最新版本) |
| 使用方法和帮助输出。 |
|
CRD |
| 不要将目录初始化为 Git 存储库。 |
|
要初始化的 Operator 类型: |
从 Operator SDK v0.12.0 开始,删除了 --dep-manager
标签以及对基于 dep
的项目的支持。现在,Go 项目被构建为使用 Go 模块。
Go 项目使用方法示例
$ mkdir $GOPATH/src/github.com/example.com/ $ cd $GOPATH/src/github.com/example.com/ $ operator-sdk new app-operator
Ansible 项目使用方法示例
$ operator-sdk new app-operator \ --type=ansible \ --api-version=app.example.com/v1alpha1 \ --kind=AppService
12.7.7. add
使用 operator-sdk add
命令可为项目添加控制器或资源。该命令必须从 Operator 项目根目录运行。
子命令 | 描述 |
---|---|
|
在 |
|
在 |
|
添加 CRD 和 CR 文件。
|
标记 | 描述 |
---|---|
|
以 |
|
CRD |
add api
输出示例
$ operator-sdk add api --api-version app.example.com/v1alpha1 --kind AppService Create pkg/apis/app/v1alpha1/appservice_types.go Create pkg/apis/addtoscheme_app_v1alpha1.go Create pkg/apis/app/v1alpha1/register.go Create pkg/apis/app/v1alpha1/doc.go Create deploy/crds/app_v1alpha1_appservice_cr.yaml Create deploy/crds/app_v1alpha1_appservice_crd.yaml Running code-generation for Custom Resource (CR) group versions: [app:v1alpha1] Generating deepcopy funcs $ tree pkg/apis pkg/apis/ ├── addtoscheme_app_appservice.go ├── apis.go └── app └── v1alpha1 ├── doc.go ├── register.go ├── types.go
add controller
输出示例
$ operator-sdk add controller --api-version app.example.com/v1alpha1 --kind AppService Create pkg/controller/appservice/appservice_controller.go Create pkg/controller/add_appservice.go $ tree pkg/controller pkg/controller/ ├── add_appservice.go ├── appservice │ └── appservice_controller.go └── controller.go
add crd
输出示例
$ operator-sdk add crd --api-version app.example.com/v1alpha1 --kind AppService Generating Custom Resource Definition (CRD) files Create deploy/crds/app_v1alpha1_appservice_crd.yaml Create deploy/crds/app_v1alpha1_appservice_cr.yaml
12.7.8. test
operator-sdk test
命令可在本地测试 Operator。
12.7.8.1. local
通过 local
子命令,在本地运行使用 Operator SDK 测试框架构建的 Go 测试。
参数 | 描述 |
---|---|
|
e2e 测试文件的位置(如 |
标记 | 描述 |
---|---|
|
集群的 |
|
全局资源清单的路径。默认值: |
|
按测试的、命名空间资源的清单路径。默认将 |
|
如果非空,则为在其中运行测试的单个命名空间(如 |
|
要传递至 |
|
使用 |
| 禁用测试资源创建。 |
| 使用与命名空间清单中指定的镜像不同的 Operator 镜像。 |
| 使用方法帮助输出。 |
输出示例
$ operator-sdk test local ./test/e2e/ # Output: ok github.com/operator-framework/operator-sdk-samples/memcached-operator/test/e2e 20.410s
12.7.9. up
operator-sdk up
命令包含可通过多种方式启动 Operator 的子命令。
12.7.9.1. local
local
子命令通过构建 Operator 二进制文件来启动本地机器上的 Operator,该二进制文件可使用 kubeconfig
文件来访问 Kubernetes 集群。
参数 | 描述 |
---|---|
|
Kubernetes 配置文件的文件路径。默认值: |
|
Operator 监视是否发生变化的命名空间。默认值: |
|
本地 Operator 可能需要的标记。示例: |
| 使用方法帮助输出。 |
输出示例
$ operator-sdk up local \ --kubeconfig "mycluster.kubecfg" \ --namespace "default" \ --operator-flags "--flag1 value1 --flag2=value2"
以下示例使用默认 kubeconfig
,即默认的命名空间环境变量,并为 Operator 传递标记。要使用 Operator 标记,您的 Operator 必须知道如何处理该选项。例如,对于理解 resync-interval
标记的 Operator 来说:
$ operator-sdk up local --operator-flags "--resync-interval 10"
如果您计划使用与默认命名空间不同的命名空间,请使用 --namespace
标记来更改 Operator 监视要创建自定义资源 (CR) 的位置:
$ operator-sdk up local --namespace "testing"
要实现这一目的,您的 Operator 必须负责处理 WATCH_NAMESPACE
环境变量。这可通过使用 Operator 中的 utility 函数 k8sutil.GetWatchNamespace
来完成。