【カスタムリソースとシーアールディー】

カスタムリソースとCRD とは?

最終更新:
💡 Kubernetesに「自分ルール」を追加できる、拡張の切り札

Kubernetes APIを拡張して扱う独自のリソース。CRD(CustomResourceDefinition)はその種別やスキーマを定義するオブジェクトで、登録した型のカスタムリソースをkubectlなどで管理できる。

📌 このページのポイント
定義・独自データ・処理を区別する CRD 種別・スキーマ Databaseを定義 API 新しい型を扱う 登録 その型のデータ my-db kind = Database 望む状態を記録 コントローラー 状態を読み 実処理を担う 参照 実際の DBなど CRDだけでは DBは起動しない
Database/my-dbは説明用の名前。上はCRDで型を登録する関係、下はその型の状態をコントローラーが読み実処理を行う例。CRDとデータは別のオブジェクトで、kubectlなどから操作できる。
ひよこ ひよこ
カスタムリソースって何?KubernetesにDeploymentやServiceとは別のものを作れるの?
ペンギン先生 ペンギン先生
そうだよ。たとえばDatabaseという独自の種類をCRDで登録し、my-dbという名前のデータを作る場合を考えよう。CRDは種類の定義、my-dbはその型のカスタムリソースなんだ。この名前は仕組みを説明する例だよ。
ひよこ ひよこ
どうやって追加するの?
ペンギン先生 ペンギン先生
kindがCustomResourceDefinitionのマニフェストをkubectl applyして、APIグループ・種別・スキーマなどを登録するよ。その後、登録した型のオブジェクトを作成・取得できる。名前には規則があり、登録や操作の権限も必要なので、何でも好きな名前で使えるわけではないんだ。
ひよこ ひよこ
独自リソースを作っただけで何かが動くの?
ペンギン先生 ペンギン先生
CRDだけでもAPIでデータを保存・取得できるよ。ただしDatabaseを書けば実際のDBが起動する、という処理までは自動で用意されないんだ。コントローラーなどが宣言した状態と実際の状態を合わせる処理を担う。アプリの運用知識を組み込むOperatorも、その使い方の一つだね。
ひよこ ひよこ
カスタムリソースはCRDでしか作れないの?
ペンギン先生 ペンギン先生
CRDはよく使う方法だけど、API Aggregationで独自のAPIサーバーを組み込む方法もあるよ。CRDならKubernetesのAPIサーバーが保存などを扱い、独自サーバーを作らずに拡張できる。必要なAPIの動作や柔軟性によって選ぶんだ。
ひよこ ひよこ
Helmとの関係はどうなってるの?
ペンギン先生 ペンギン先生
HelmチャートにCRDを含めて導入することもできるよ。ただしすべてのチャートが含むわけではないし、通常のリソースと同じ感覚で更新・削除できるとは限らない。CRDのライフサイクルと、その型を利用するデータへの影響はチャートやHelmの手順で確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カスタムリソース」って出てきたら「Kubernetesで扱う独自の種類のデータ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Custom Resource / CustomResourceDefinition」 = 独自のリソース / 独自リソースの定義
💬 Customは独自の、Resourceは扱う対象という意味。CRDのDefinitionは定義で、独自の種別を定める側と、その型で作るデータを区別するんだよ

参考資料

← 用語集にもどる