🐈
kubanetesで簡単なCRDを作成してみる
Kubernetes(K8s)とは
Kubernetes(K8s)のCustomResourceDefinition(CRD)は、Kubernetes APIに新しいカスタムリソースを追加するための仕組みです。Kubernetesには、Pod、Service、Deployment、ConfigMap、Secretなど、さまざまなリソースが用意されていますが、特定のユースケースに合わせて、独自のリソースを定義することができます。
Kubernetesのオブジェクトの操作には、Kubernetes APIを介してRESTfulなHTTPリクエストを使用するため、CRDを定義することで、独自のオブジェクトを作成、更新、削除することができます。例えば、特定のアプリケーションに必要な特別な設定やリソースを定義し、Kubernetesで管理できます。
CRDを使用すると、Kubernetesのプラットフォーム機能を拡張することができます。例えば、KubernetesでCI/CDパイプラインを実行する場合、KubernetesのDeploymentやServiceリソースを使用して、アプリケーションをデプロイすることができます。しかし、特定のアプリケーションに必要なリソースがある場合は、CRDを使用してカスタムリソースを作成することができます。
CRDを作成するには、CRDの仕様をYAMLファイルに定義し、kubectl applyコマンドを使用してKubernetesクラスターに適用する必要があります。そして、カスタムリソースを使用するために、クライアントアプリケーションはKubernetes APIにアクセスする必要があります。
簡単なCRD作成してみる
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: foos.example.com # <names.plural>.<group>
spec:
group: example.com
names:
kind: Foo
plural: foos
scope: Namespaced # `Cluster` and `Namespaced`
versions:
- name: v1alpha1
served: true # trueにするとkubectlでの操作が可能になる
storage: true # ここをtrueにするとetcdに情報が保存される。基本は一つのバージョンでtrueにする
additionalPrinterColumns: # kubectl get fooをした時にデフォルトだと表示されるものがNameのみだが追加で表示したいものがある時などはここで定義していく
- name: Test String
jsonPath: .testString
type: string
- name: Test Num
jsonPath: .testNum
type: integer
schema:
openAPIV3Schema:
type: object
properties: # マニュフェストファイルに指定しないといけないものをかく
testString:
type: string
testNum:
type: integer
上記のCRDを実行するためのマニフェストファイル
apiVersion: example.com/v1alpha1
kind: Foo
metadata:
name: test
testString: "first foo"
testNum: 1
Discussion