✅ 1. CRDとは?
CRD(Custom Resource Definition)とは、Kubernetesに独自のリソース(カスタムリソース)を追加するための定義ファイルのことです。
たとえば Kubernetes は標準で Pod
や Service
などのリソースを持っていますが、「MyApp」「Backup」「DatabaseCluster」など、自分たちにとって意味のある新しい種類のリソースを定義して扱いたい場面もあります。
そのときに必要になるのが、この CRD です。
🧩 2. CRDの役割と仕組み
CRD を Kubernetes クラスタに登録すると、その瞬間から Kubernetes に新しい API オブジェクトが追加されます。
たとえば、以下のような CRD を定義すると…
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: backups.mycompany.com
spec:
group: mycompany.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
scope: Namespaced
names:
plural: backups
singular: backup
kind: Backup
すると、次のようなコマンドで独自リソースを作成・管理できるようになります:
kubectl get backups
kubectl describe backup sample-backup
kubectl apply -f my-backup.yaml
📚 3. CRDとカスタムリソースの関係
用語 | 説明 |
---|---|
CRD | 新しい種類のリソースを定義する「設計図」 |
Custom Resource | CRDに基づいて実際に作成されたインスタンス(YAMLで管理) |
たとえば、「バックアップ」という概念を Kubernetes に導入したい場合:
- CRD =
Backup
という種類のリソースをKubernetesに追加 - Custom Resource =
backup.yaml
で作成した「sample-backup」などの個別のオブジェクト
⚙️ 4. 実用例:CRDを使うとどうなる?
CRDを使うと、自分たちにとって意味のある抽象的な操作を Kubernetes 上で扱えるようになります。
例:
apiVersion: mycompany.com/v1
kind: Backup
metadata:
name: daily-backup
spec:
schedule: "0 2 * * *"
target: "mysql"
このような定義を Kubernetes に apply することで、「毎日2時にMySQLをバックアップする」という設定をKubernetesのネイティブな方法で管理できるようになります。
🧠 5. CRDは単独では動かない(+Controllerが必要)
CRDを使って新しいリソースを定義しただけでは、Kubernetesはその意味を理解しません。
そこで必要になるのが「Controller(制御プログラム)」です。
Controllerは、CRDで定義されたリソースの状態を監視し、現実世界の操作(Podの作成やS3へのバックアップなど)を実行してくれます。
➡ この Controller と CRD を組み合わせて作るのが「Operator(前章)」です。
🔍 6. まとめ
- CRDは「Kubernetesに新しいリソースの型を追加する定義」
kubectl
でカスタムリソースを扱えるようになる- 単体では動作せず、Controllerとセットで使う
- Operatorは CRD + Controller を合わせた高度な自動化ツール