プロジェクトの雛形作成

それではさっそくkubebuilder initコマンドを利用して、プロジェクトの雛形を生成しましょう。

$ mkdir markdown-view
$ cd markdown-view
$ kubebuilder init --domain zoetrope.github.io --repo github.com/zoetrope/markdown-view

--domainで指定した名前は、これから作成するカスタムリソースのグループ名に使われます。 他の人の作ったカスタムリソースと衝突しないように、あなたが保持するドメインなどを利用してユニークな名前を指定してください。

--repoにはgo modulesのmodule名を指定します。 GitHubにリポジトリを作る場合はgithub.com/<user_name>/<product_name>を指定します。

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

.
├── cmd
│    └── main.go
├── config
│    ├── default
│    │    ├── kustomization.yaml
│    │    ├── manager_metrics_patch.yaml
│    │    └── metrics_service.yaml
│    ├── manager
│    │    ├── kustomization.yaml
│    │    └── manager.yaml
│    ├── prometheus
│    │    ├── kustomization.yaml
│    │    └── monitor.yaml
│    └── rbac
│        ├── kustomization.yaml
│        ├── leader_election_role_binding.yaml
│        ├── leader_election_role.yaml
│        ├── metrics_auth_role_binding.yaml
│        ├── metrics_auth_role.yaml
│        ├── metrics_reader_role.yaml
│        ├── role_binding.yaml
│        ├── role.yaml
│        └── service_account.yaml
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│    └── boilerplate.go.txt
├── Makefile
├── PROJECT
├── README.md
└── test
    ├── e2e
    │    ├── e2e_suite_test.go
    │    └── e2e_test.go
    └── utils
        └── utils.go

それでは生成されたファイルをそれぞれ見ていきましょう。

Makefile

コード生成やコントローラーのビルドなどをおこなうためのMakefileです。

make helpでターゲットの一覧を確認してみましょう。

$ make help

Usage:
  make <target>

General
  help             Display this help.

Development
  manifests        Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
  generate         Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
  fmt              Run go fmt against code.
  vet              Run go vet against code.
  test             Run tests.
  lint             Run golangci-lint linter
  lint-fix         Run golangci-lint linter and perform fixes

Build
  build            Build manager binary.
  run              Run a controller from your host.
  docker-build     Build docker image with the manager.
  docker-push      Push docker image with the manager.
  docker-buildx    Build and push docker image for the manager for cross-platform support
  build-installer  Generate a consolidated YAML with CRDs and deployment.

Deployment
  install          Install CRDs into the K8s cluster specified in ~/.kube/config.
  uninstall        Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion.
  deploy           Deploy controller to the K8s cluster specified in ~/.kube/config.
  undeploy         Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion.

Dependencies
  kustomize        Download kustomize locally if necessary.
  controller-gen   Download controller-gen locally if necessary.
  envtest          Download setup-envtest locally if necessary.
  golangci-lint    Download golangci-lint locally if necessary.

PROJECT

ドメイン名やリポジトリのURLや生成したAPIの情報などが記述されています。 基本的にこのファイルを編集することはあまりないでしょう。

hack/boilerplate.go.txt

自動生成されるソースコードの先頭に挿入されるボイラープレートです。

デフォルトではApache 2 Licenseの文面が記述されているので、必要に応じて書き換えてください。

cmd/main.go

これから作成するカスタムコントローラーのエントリーポイントとなるソースコードです。

ソースコード中に//+kubebuilder:scaffold:imports, //+kubebuilder:scaffold:scheme, //+kubebuilder:scaffold:builderなどのコメントが記述されています。 Kubebuilderはこれらのコメントを目印にソースコードの自動生成をおこなうので、決して削除しないように注意してください。

config

configディレクトリ配下には、カスタムコントローラーをKubernetesクラスターにデプロイするためのマニフェストが生成されます。

実装する機能によっては必要のないマニフェストも含まれているので、適切に取捨選択してください。

default

マニフェストをまとめて利用するための設定が記述されています。

manager_metrics_patch.yamlは、カスタムコントローラーのメトリクスを有効にするためのパッチです。

metrics_service.yamlは、カスタムコントローラーのメトリクスにアクセスするためのサービス定義です。

利用するマニフェストに応じて、kustomization.yamlを編集してください。

manager

カスタムコントローラーのDeploymentリソースのマニフェストです。 カスタムコントローラーのコマンドラインオプションの変更をおこなった場合など、必要に応じて書き換えてください。

prometheus

カスタムリソースのメトリクスを収集するための設定を記述したマニフェストです。 Prometheus Operatorを利用している場合、このマニフェストを適用するとPrometheusが自動的にカスタムコントローラーのメトリクスを収集してくれるようになります。

rbac

各種権限を設定するためのマニフェストです。

leader_election_role.yamlleader_election_role_binding.yamlは、リーダーエレクション機能を利用するために必要な権限です。

metrics_auth_から始まるファイルは、メトリクスエンドポイントへのアクセスを制限するためのマニフェストです。

role.yamlrole_binding.yamlは、コントローラーが各種リソースにアクセスするための権限を設定するマニフェストです。 この2つのファイルは自動生成されるものなので、手動で編集しないように注意してください。 service_accountは、カスタムコントローラーのサービスアカウントを定義するマニフェストで、role.yamlで定義した権限が割り当てられます。

test

E2Eテストをおこなうためのファイルが格納されています。

results matching ""

    No results matching ""