更新时间:2022-09-16 GMT+08:00
分享

创建API和Controller

根据以上设计的CR,在项目工程中创建对应的CRD类型:

$ kubebuilder create api --group osctest --version v1 --kind Hwfka
Create Resource [y/n]
y
Create Controller [y/n]
y
Writing kustomize manifests for you to edit...
Writing scaffold for you to edit...
api/v1/hwfka_types.go
controllers/hwfka_controller.go
Update dependencies:
go mod tidy
Running make:
make generate
go: creating new go.mod: module tmp
Downloading sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0
go get: added sigs.k8s.io/controller-tools v0.7.0
/mnt/d/repository/Go/GOPATH/src/hwfka-operator/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:
make manifests

通过kubebuilder create api命令,可以发现在重复下载controller-gen的二进制文件,包括后续使用Makefile去编译operator的二进制文件及打包镜像时,都可能会重复下载使用controller-gen二进制文件,建议提前安装controller-gen二进制,并修改Makefile中有关这个命令为使用系统命令,而非每次通过go get下载并编译后使用。

该命令主要执行以下动作:

  1. 在PROJECT文件中增加API资源声明。
    domain: huawei.com
    layout:
    - go.kubebuilder.io/v3
    projectName: hwfka-operator
    repo: hwfka-operator
    resources:
    - api:
        crdVersion: v1
        namespaced: true
      controller: true
      domain: huawei.com
      group: osctest
      kind: Hwfka
      path: hwfka-operator/api/v1
      version: v1
    version: "3"
  2. 新增CRD及CR的描述文件。
    hwfka-operator
    └── config
        ├── crd
        │   ├── kustomization.yaml
        │   ├── kustomizeconfig.yaml
        │   └── patches
        │       ├── cainjection_in_hwfkas.yaml
        │       └── webhook_in_hwfkas.yaml
        ├── rbac # 增加文件
        │   ├── hwfka_editor_role.yaml
        │   └── hwfka_viewer_role.yaml
        └── samples
            └── osctest_v1_hwfka.yaml
  3. 新增api目录,包含CRD的类型定义。
    hwfka-operator
    └── api
        └── v1
            ├── groupversion_info.go
            ├── hwfka_types.go
            └── zz_generated.deepcopy.go
  4. 新增controllers目录,包含控制器的业务逻辑。
    hwfka-operator
    └── controllers
        ├── hwfka_controller.go
        └── suite_test.go
  5. 在main.go的Manager启动时,创建Controller。
    if err = (&controllers.HwfkaReconciler{
        Client: mgr.GetClient(),
        Scheme: mgr.GetScheme(),
    }).SetupWithManager(mgr); err != nil {
        setupLog.Error(err, "unable to create controller", "controller", "Hwfka")
        os.Exit(1)
    }

相关文档