プロジェクトの雛形作成

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

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

--domainで指定した名前はCRDのグループ名に使われます。 あなたの所属する組織が保持するドメインなどを利用して、ユニークでvalidな名前を指定してください。

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

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

├── Dockerfile
├── Makefile
├── PROJECT
├── README.md
├── cmd
│    └── main.go
├── config
│    ├── default
│    │    ├── kustomization.yaml
│    │    ├── manager_auth_proxy_patch.yaml
│    │    └── manager_config_patch.yaml
│    ├── manager
│    │    ├── kustomization.yaml
│    │    └── manager.yaml
│    ├── prometheus
│    │    ├── kustomization.yaml
│    │    └── monitor.yaml
│    └── rbac
│        ├── auth_proxy_client_clusterrole.yaml
│        ├── auth_proxy_role.yaml
│        ├── auth_proxy_role_binding.yaml
│        ├── auth_proxy_service.yaml
│        ├── kustomization.yaml
│        ├── leader_election_role.yaml
│        ├── leader_election_role_binding.yaml
│        ├── role_binding.yaml
│        └── service_account.yaml
├── go.mod
├── go.sum
└── hack
    └── boilerplate.go.txt

Kubebuilderによって生成されたgo.modおよびMakefileには、少し古いバージョンのcontroller-runtimeとcontroller-genが使われている場合があります。 必要に応じて、最新のバージョンを利用するように以下のように書き換えておきましょう。

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

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.

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

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.

Build Dependencies
  kustomize        Download kustomize locally if necessary. If wrong version is installed, it will be removed before downloading.
  controller-gen   Download controller-gen locally if necessary. If wrong version is installed, it will be overwritten.
  envtest          Download envtest-setup 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_auth_proxy_patch.yamlは、kube-auth-proxyを利用するために必要なパッチです。 kube-auth-proxyを利用しない場合は削除しても問題ありません。

manager_config_patch.yamlは、カスタムコントローラーのオプションを引数ではなくConfigMapで指定するためのパッチファイルです。

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

manager

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

prometheus

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

rbac

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

auth_proxy_から始まる4つのファイルは、kube-auth-proxy用のマニフェストです。 kube-auth-proxyを利用するとメトリクスエンドポイントへのアクセスをRBACで制限できます。

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

role.yamlrole_binding.yamlは、コントローラーが各種リソースにアクセスするための権限を設定するマニフェストです。 この2つのファイルは基本的に自動生成されるものなので、開発者が編集する必要はありません。

必要のないファイルを削除した場合は、kustomization.yamlも編集してください。

results matching ""

    No results matching ""