云原生服务中心 OSC-创建API和Controller

时间:2023-11-01 16:15:34

创建API和Controller

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

$ kubebuilder create api --group osctest --version v1 --kind HwfkaCreate Resource [y/n]yCreate Controller [y/n]yWriting kustomize manifests for you to edit...Writing scaffold for you to edit...api/v1/hwfka_types.gocontrollers/hwfka_controller.goUpdate dependencies:go mod tidyRunning make:make generatego: creating new go.mod: module tmpDownloading sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0go 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.comlayout:- go.kubebuilder.io/v3projectName: hwfka-operatorrepo: hwfka-operatorresources:- api:    crdVersion: v1    namespaced: true  controller: true  domain: huawei.com  group: osctest  kind: Hwfka  path: hwfka-operator/api/v1  version: v1version: "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)}
support.huaweicloud.com/devg-osc/osc_ss_0024.html