PR:この記事にはアフィリエイトリンクが含まれます。
Kubernetes OperatorをGoとKubebuilderで開発し、CRD controllerを実務に乗せるなら、まず考えたいのはクラスタの望ましい状態をどう表すかです。コード生成はその後に活用します。DB用CRDでは利用者がレプリカ数やバージョンを指定し、controllerが必要なKubernetesリソースを整えます。
この記事ではGoでCRD controllerを作る要所と、Kubebuilder学習に役立つ洋書3冊を実務目線で整理します。API設計からReconcile、テストまで、一連の流れを見ていきましょう。
Operatorは一度作れば終わりのCLIとは違い、クラスタ上で動き続ける制御プログラムです。障害や手動変更のあとも処理を繰り返し、状態を整える設計が肝心。
3冊の早見表
3冊の軸を先に並べます。Kubebuilderを含むGo実装、Kubernetes APIの基礎から配布まで、Operator SDK中心と、それぞれに扱う範囲が異なります。
| 書籍 | 刊行・ページ | 主な内容 |
|---|---|---|
Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API | Apress・2022年・316ページ | Go、CRD、controller-runtime、Reconcile、テスト、Kubebuilder |
Programming Kubernetes: Developing Cloud-Native Applications | O’Reilly Media・2019年・270ページ | client-go、Kubernetes API、コード生成、Operator、配布 |
The Kubernetes Operator Framework Book: Overcome complex Kubernetes cluster management challenges with automation toolkits | Packt・2022年・328ページ | Operator SDK、API設計、テスト、OLM、OperatorHub.io |
3冊はいずれも英語です。Apress本とO’Reilly本は中級〜上級者向けです。Packt本はKubernetesの基礎知識を持つDevOpsやクラウドエンジニアをはじめ、SREや開発者も対象にしています。PodやDeploymentの基本を知っていると、例を追いやすいでしょう。
本体価格は販売店や版、為替、在庫で変わります。表示価格に送料を加えた総額を購入時に確認してください。古い版のコード例は、Goや各ツールの現行版に合わせて読み替えます。
Operatorの役割
Kubernetes Operatorは独自の運用知識をAPIとcontrollerへ移し、利用者が宣言した状態にクラスタを近づける仕組みです。手順書を見ながら行う復旧や拡張を自動化できます。
CRDはKubernetes APIに新しいリソース種別を加える定義で、カスタムリソースはその型に沿った設定です。Database CRDが型なら、team-dbというDatabaseオブジェクトは具体的な指示にあたります。
controllerはオブジェクトを監視し、DeploymentやStatefulSet、Serviceなどの状態を整えます。Operatorはcontrollerにアプリ固有の運用知識を持たせたもの。そう考えると理解しやすいですよね。
Operatorを使う場面は、バックアップ設定やバージョン更新など、手作業で繰り返す判断を自動化したいときです。YAMLの適用に加えて、運用の判断もコードに移せるのが特長です。
CRDの設計
CRD設計では利用者が望む状態をspecに置き、controllerが観測した結果をstatusに記録します。specへ実行中Podの名前を入れると、意図と実際の状態が混ざり、更新時に判断しにくくなります。
たとえばspecにはversionとreplicas、storageSizeやSecret参照などを置き、statusにはReady条件や適用したgenerationを返します。status.conditionsに理由と短いメッセージがあれば、kubectlから状態を調べる人にも伝わります。
APIは利用者の設定ファイルと一緒に残ります。必須項目やデフォルト値、許容範囲は早めに整理したいところ。Kubebuilderではマーカーで検証ルールを定義し、make manifestsでCRD定義を更新できます。
一度公開したフィールド名や意味は慎重に扱います。互換性が必要ならAPI versionを分け、誰が設定を更新するかも決めておくと実装がぶれません。旧バージョンの扱いまで考えておきましょう。
Reconcileの実務
Reconcileはnamespaceとnameで対象を特定し、現在の状態を読み込んでspecとの差を埋める処理です。イベント一回で一度だけ正しく動けばよい、と考えると不十分。同じ入力で何度呼ばれても安全にします。
DatabaseリソースならStatefulSetとServiceを作成し、存在するものは差分を更新、削除されているものは再作成します。こうした調整を繰り返すのです。イベントは開始の合図で、判断の根拠は読み直した最新状態。
Reconcile loopは何度動いても安全な冪等処理にし、作成したオブジェクトはownerReferencesで追跡します。一時的なAPI障害ならエラーを返して再試行させます。一定時間後に確認する処理ではRequeueAfterを使います。
準備中や失敗はstatus.conditionsへ反映しましょう。同じ失敗のログが毎秒出る状態は避けたいところです。Secretの中身や認証情報をstatusやログに含めず、利用者が次に取る行動を示す理由を返します。
Go本の内容
『Kubernetes Programming with Go』はApress刊の英語書で、2022年12月25日発行、316ページです。GoでKubernetes APIを扱う基礎からCRD、controller-runtime、Reconcile loop、テストを学び、KubebuilderでOperatorを作る章へ進みます。
本書はReconcile loopとそのテストを扱います。CRD、controller-runtime、Kubebuilderも含み、GoによるOperator開発を学べます。
対象読者は中級〜上級です。Goの文法に加えてPodやDeployment、Kubernetes APIの基本を知っていると読み進めやすくなります。英語の技術書に慣れていない人は、見覚えのあるAPIの章から読むのも手です。
2022年の刊行で、公開目次にはKubebuilderの個別リリース番号が記載されていません。依存関係やコマンドを使う際は現行の公式資料と照らし、考え方と記法を分けて読みましょう。

Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API
Apress
Amazonで見るO’Reilly本の内容
『Programming Kubernetes』はO’Reilly Media刊の英語書で、270ページ、2019年7月発行です。Go、client-go、Kubernetes API、カスタムリソースとコード生成を扱い、コントローラとOperatorの作成にも進みます。
Kubebuilderの章に加えて、APIの仕組みや生成コードの役割まで学べる内容です。コントローラの配布やパッケージング、自動ビルドとテストも扱い、作成後の工程まで見通せます。
3冊のなかでは刊行が最も早い一冊です。API拡張やcontrollerの基本を学ぶ材料になります。出版から時間が経っているため、コマンドや依存ライブラリはそのまま実行できると決めつけず、現行の内容を確認しましょう。
Kubebuilderを扱う章もあります。現行プロジェクトで活用する際は、生成手順やAPIバージョンを確認してください。Kubernetes APIから配布まで知りたい人には、全体像を追うための本として勧められます。
SDK本の内容
『The Kubernetes Operator Framework Book』はPackt刊の英語書で、328ページ、2022年7月15日発行です。CRDとAPIの設計、Reconciliation loop、control loop実装、テスト用クラスタへのデプロイを扱います。
Go Operatorの例で使うツールはOperator SDKです。Kubebuilderの個別手順を追いたい場合、本書ではSDKの構成や開発工程を学ぶと捉えてください。
コンテナイメージの作成や変更のテストを行い、Operator Lifecycle ManagerとOperatorHub.ioでの配布も扱います。controller開発から利用者への提供、ライフサイクル管理まで視野に入ります。
この本のGo例が前提にするのはGo 1.16以上とOperator SDKバイナリです。SDKのCLIや依存関係は版によって変わるため、現行環境で使う手順を公式資料で確認してください。

The Kubernetes Operator Framework Book: Overcome complex Kubernetes cluster management challenges with automation toolkits
Packt
Amazonで見る開発の流れ
まずAPI型を決めて、KubebuilderでプロジェクトとAPIを生成し、spec、status、validationを整えます。続いてmanagerが監視するリソースとRBAC権限を定め、Reconcileの役割を決めて小さく動かしましょう。
controllerが作るDeploymentにownerReferencesを設定すれば、親のCRを削除した後の後始末をKubernetesに任せられます。別namespaceのオブジェクトや共有リソースでは同じ方法を使えないため、所有者と削除方針を先に決めます。
テストでは条件分岐とenvtestでの確認を行います。CRDの登録や作成、更新とstatus反映を確かめます。実クラスタでもRBACやPod readiness、削除時の挙動を試すと、ユニットテストでは見えない違いがわかります。
本番運用にはRBACを最小権限に絞る作業が欠かせません。ログや監視、リーダー選出、イメージ更新方針も整えます。Reconcileを繰り返しても状態へ収束し、失敗から回復できるか確かめてください。
結論
Kubebuilderを使うGo開発を軸に、CRD、Reconcile、テストまで続けて学ぶなら、『Kubernetes Programming with Go』をおすすめします。今回のテーマに直結する構成です。
Kubernetes API、client-go、コード生成から配布まで広く学びたい人にはO’Reilly本がおすすめです。Operator SDKやOLM、OperatorHub.ioの扱いが必要ならPackt本を選んでください。
どの本を読む場合もCRDを一つ題材にし、specからstatus、冪等なReconcile、テストへと小さく実装してください。読んだ内容を自分のcontrollerに移し、状態遷移を再現することが実務につながります。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。


