APIの雛形作成

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

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

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

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

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

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

また、以下のコマンドを実行することでCRDやRBACなどのマニフェストを自動生成することができます。

$ make manifests

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

.
├── 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
│    ├── rbac
│    │    ├── markdownview_editor_role.yaml
│    │    └── markdownview_viewer_role.yaml
│    └── samples
│        ├── kustomization.yaml
│        └── view_v1_markdownview.yaml
└── internal
     └── controller
         ├── markdownview_controller.go
         ├── markdownview_controller_test.go
         └── suite_test.go

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

api/v1

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

groupversion_info.goは初期生成後に編集する必要はありません。 zz_generated.deepcopy.gomarkdownview_types.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から自動生成されるものなので、基本的に手動で編集する必要はありません。

rbac

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

また、MarkdownViewリソースを扱うためのRoleを定義したマニフェストとして、markdownview_editor_role.yamlmarkdownview_viewer_role.yamlが追加されています。

samples

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

internal/controller

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

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

results matching ""

    No results matching ""