KubernetesのCustomResourceDefinitionsを調べました。
公式ドキュメントのCRDを、そのままデプロイしました。
$ cat resourcedefinition.yaml apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: # name must match the spec fields below, and be in the form: <plural>.<group> name: crontabs.stable.example.com spec: # group name to use for REST API: /apis/<group>/<version> group: stable.example.com # list of versions supported by this CustomResourceDefinition versions: - name: v1 # Each version can be enabled/disabled by Served flag. served: true # One and only one version must be marked as the storage version. storage: true # either Namespaced or Cluster scope: Namespaced names: # plural name to be used in the URL: /apis/<group>/<version>/<plural> plural: crontabs # singular name to be used as an alias on the CLI and for display singular: crontab # kind is normally the CamelCased singular type. Your resource manifests use this. kind: CronTab # shortNames allow shorter string to match your resource on the CLI shortNames: - ct $ kubectl apply -f resourcedefinition.yaml customresourcedefinition.apiextensions.k8s.io/crontabs.stable.example.com created $
kubectl proxy
を起動します。
$ kubectl proxy Starting to serve on 127.0.0.1:8001
下記の通りAPIのエンドポイントが作成されていることがわかります。
$ curl http://localhost:8001/apis/stable.example.com/ { "kind": "APIGroup", "apiVersion": "v1", "name": "stable.example.com", "versions": [ { "groupVersion": "stable.example.com/v1", "version": "v1" } ], "preferredVersion": { "groupVersion": "stable.example.com/v1", "version": "v1" } $
作成したCRDのリソースを作ります。
$ cat my-crontab.yaml apiVersion: "stable.example.com/v1" kind: CronTab metadata: name: my-new-cron-object spec: cronSpec: "* * * * */5" image: my-awesome-cron-image $ kubectl apply -f my-crontab.yaml crontab.stable.example.com/my-new-cron-object created $ kubectl get crontab NAME AGE my-new-cron-object 34s $
CRDを削除すると、リソースも削除されます。
$ kubectl delete -f resourcedefinition.yaml customresourcedefinition.apiextensions.k8s.io "crontabs.stable.example.com" deleted $ kubectl apply -f resourcedefinition.yaml customresourcedefinition.apiextensions.k8s.io/crontabs.stable.example.com created $ kubectl get crontab No resources found. $