APIの雛形作成

kubebuilder create apiコマンドを利用すると、カスタムリソースとカスタムコントローラーの実装の雛形を生成できます。

以下のコマンドを実行して、MarkdownViewを表現するためのカスタムリソースと、MarkdownViewを扱うカスタムコントローラーを生成してみましょう。

カスタムリソースとコントローラーのソースコードを生成するかどうか聞かれるので、今回はどちらもyと回答します。

$ kubebuilder create api --group view --version v1 --kind MarkdownView
Create Resource [y/n]
y
Create Controller [y/n]
y
$ make manifests

--group,--version, --kindオプションは、生成するカスタムリソースのGVKを指定します。

  • --kind: 作成するリソースの名前を指定します。
  • --group: リソースが属するグループ名を指定します。
  • --version: 適切なバージョンを指定します。今後仕様が変わる可能性がありそうならv1alpha1v1beta1を指定し、安定版のリソースを作成するのであればv1を指定します。

コマンドの実行に成功すると、下記のようなファイルが新たに生成されます。

├── api
│    └── v1
│        ├── groupversion_info.go
│        ├── markdownview_types.go
│        └── zz_generated.deepcopy.go
├── config
│    ├── crd
│    │    ├── bases
│    │    │    └── view.zoetrope.github.io_markdownviews.yaml
│    │    ├── kustomization.yaml
│    │    ├── kustomizeconfig.yaml
│    │    └── patches
│    │        ├── cainjection_in_markdownviews.yaml
│    │        └── webhook_in_markdownviews.yaml
│    ├── rbac
│    │    └── role.yaml
│    └── samples
│        ├── kustomization.yaml
│        └── view_v1_markdownview.yaml
└── internal
    └── controller
        ├── markdownview_controller.go
        └── suite_test.go

それぞれのファイルの内容をみていきましょう。

api/v1

markdownview_types.goは、MarkdownViewリソースをGo言語のstructで表現したものです。 今後、MarkdownViewリソースの定義を変更する場合にはこのファイルを編集していくことになります。

groupversion_info.goは初期生成後に編集する必要はありません。 zz_generated.deepcopy.gomarkdownview_types.goの内容から自動生成されるファイルなので編集する必要はありません。

internal/controllers

markdownview_controller.goは、カスタムコントローラーのメインロジックになります。 今後、カスタムコントローラーの処理は基本的にこのファイルに書いていくことになります。

suite_test.goはテストコードです。詳細はコントローラのテストで解説します。

cmd/main.go

cmd/main.goには、下記のようなコントローラーの初期化処理が追加されています。

main.go

if err = (&controller.MarkdownViewReconciler{
    Client: mgr.GetClient(),
    Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
    setupLog.Error(err, "unable to create controller", "controller", "MarkdownView")
    os.Exit(1)
}

config

configディレクトリ下には、いくつかのファイルが追加されています。

crd

crdディレクトリにはCRD(Custom Resource Definition)のマニフェストが追加されています。

これらのマニフェストはapi/v1/markdownView_types.goから自動生成されるものなので、基本的に手動で編集する必要はありません。 ただし、Conversion Webhookを利用したい場合は、cainjection_in_markdownViews.yamlwebhook_in_markdownViews.yamlのパッチを利用するようにkustomization.yamlを書き換えてください。

rbac

role.yamlには、MarkdownViewリソースを扱うための権限が追加されています。

samples

カスタムリソースのサンプルマニフェストです。 テストで利用したり、ユーザー向けに提供できるように記述しておきましょう。

results matching ""

    No results matching ""