Kubernetes Operator本で学ぶGo・Kubebuilder・CRD controller開発の実務

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 APIKubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes APIApress・2022年・316ページGo、CRD、controller-runtime、Reconcile、テスト、Kubebuilder
Programming Kubernetes: Developing Cloud-Native ApplicationsProgramming Kubernetes: Developing Cloud-Native ApplicationsO’Reilly Media・2019年・270ページclient-go、Kubernetes API、コード生成、Operator、配布
The Kubernetes Operator Framework Book: Overcome complex Kubernetes cluster management challenges with automation toolkitsThe Kubernetes Operator Framework Book: Overcome complex Kubernetes cluster management challenges with automation toolkitsPackt・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

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から配布まで知りたい人には、全体像を追うための本として勧められます。

Programming Kubernetes: Developing Cloud-Native Applications

Programming Kubernetes: Developing Cloud-Native Applications

O’Reilly Media

Amazonで見る

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

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に移し、状態遷移を再現することが実務につながります。

【2026年版】Amazonで買えるおすすめノートPCランキング!コスパ最強のモデルはこれだ
DELLのノートパソコンがテーブルの上に置いてある画像

Amazon の PC をスコア化してみた

Specsy Hub

Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。

タイトルとURLをコピーしました