【しーあーるでぃー】

CRD(カスタムリソース定義) とは?

最終更新:
💡 Kubernetesに自分だけの部品を追加できる設計図

KubernetesのAPIを拡張して独自のリソースタイプを定義できる仕組み。標準のPodやServiceに加えて、アプリ固有のリソースを追加できる。

📌 このページのポイント
CRD:独自リソースの型を定義 標準の型PodService+CRDMyAppの型名前・構造個別の資源app-aapp-bAPIサーバーが保存・取得を扱う操作には権限が必要アプリを動かす処理はControllerなどが担当CRDの登録だけではアプリは起動しない
標準リソースに独自の型を加え、その型から個別リソースを作る例。矢印は型と個別リソースの関係、下への線はAPIでの管理関係。MyAppやapp-aは架空の名前で、実際の運用処理は別のControllerなどが担う。
ひよこ ひよこ
CRDって、Kubernetesの機能を増やせるの?
ペンギン先生 ペンギン先生
Kubernetes APIに独自のリソース型を追加できるよ。CRDはその型の名前や構造を定義するもの。たとえばMyAppという型を定義し、その型でapp-aやapp-bという個別のカスタムリソースを作れるんだ。
ひよこ ひよこ
YAMLを登録すればアプリも動く?
ペンギン先生 ペンギン先生
CRDを登録すると、APIサーバーが独自リソースの保存や取得を扱えるようになるよ。でも、それだけではアプリは起動しない。独自リソースを見てPodを作るなどの動作は、対応するControllerが担当するんだ。
ひよこ ひよこ
Operatorとはどういう関係?
ペンギン先生 ペンギン先生
カスタムリソースに望む状態を書き、Controllerが実際の状態をそれに近づける構成があるよ。Operatorパターンは、そこへアプリ固有の運用知識を組み込む考え方。CRDとOperatorそのものは同じものではないんだ。
ひよこ ひよこ
実際の例はある?
ペンギン先生 ペンギン先生
cert-managerのCertificateが一例だよ。欲しい証明書や発行者を指定すると、cert-managerが発行者へ要求し、取得した証明書や秘密鍵をSecretに保存する。必要な発行者やControllerの設定もあり、CRDの定義だけで完結しないんだ。
ひよこ ひよこ
誰でも使えて、何でも保存していい?
ペンギン先生 ペンギン先生
操作には権限が必要だよ。CRDを追加しても、多くの既存RBACロールへ権限が自動で付くわけではない。また、Kubernetes APIを画像や大量の業務データの保管庫にするのは避け、設定や望む状態の管理に合うかを考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CRD」って出てきたら「Kubernetesに自分専用のリソースを追加する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Custom Resource Definition」 = カスタムリソース定義
💬 Custom(独自の)Resource(リソース)Definition(定義)で、Kubernetesの語彙を自分で増やせる仕組みだよ

参考資料

← 用語集にもどる