https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions
ThirdPartyResource 가 1.8부터 custom resource definition으로 대체되었다.
관련 예시이다.
$ vi crd.yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: crontabs.training.lfs458.com
# This name must match names below.
# <plural>.<group> syntax
spec:
scope: Cluster #Could also be Namespaced
group: training.lfs458.com
version: v1
names:
kind: CronTab #Typically CamelCased for resource manifest
plural: crontabs #Shown in URL
singular: crontab #Short name for CLI alias
shortNames:
- ct #CLI short name
$ kubectl create -f crd.yaml
$ kubectl get crd
NAME AGE
crontabs.training.lfs458.com 4m
$ kubectl describe crd crontab
Name: crontabs.training.lfs458.com
Namespace:
Labels: <none>
Annotations: <none>
API Version: apiextensions.k8s.io/v1beta1
Kind: CustomResourceDefinition
Metadata:
Creation Timestamp: 2018-12-18T05:49:45Z
Generation: 1
Resource Version: 3992526
Self Link: /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/crontabs.training.lfs458.com
UID: b92d0073-0288-11e9-9a46-fa163e964181
Spec:
Group: training.lfs458.com
Names:
Kind: CronTab
List Kind: CronTabList
Plural: crontabs
Short Names:
ct
Singular: crontab
Scope: Cluster
Version: v1
Status:
Accepted Names:
Kind: CronTab
List Kind: CronTabList
Plural: crontabs
Short Names:
ct
Singular: crontab
Conditions:
Last Transition Time: 2018-12-18T10:49:45Z
Message: no conflicts found
Reason: NoConflicts
Status: True
Type: NamesAccepted
Last Transition Time: 2018-12-18T10:49:45Z
Message: the initial names have been accepted
Reason: InitialNamesAccepted
Status: True
Type: Established
Events: <none>
$ vi new-crontab.yaml
apiVersion: "training.lfs458.com/v1"
# This is from the group and version of new CRD
kind: CronTab
# The kind from the new CRD
metadata:
name: new-cron-object
spec:
cronSpec: "*/5 * * * *"
image: some-cron-image
#Does not exist
$ kubectl create -f new-crontab.yaml
$ kubectl get CronTab
NAME AGE
new-cron-object 4m
$ kubectl get ct
NAME AGE
new-cron-object 4m
$ kubectl describe ct
Name: new-cron-object
Namespace:
Labels: <none>
Annotations: <none>
API Version: training.lfs458.com/v1
Kind: CronTab
Metadata:
Cluster Name:
Creation Timestamp: 2018-12-18T10:52:21Z
Resource Version: 3992891
Self Link: /apis/training.lfs458.com/v1/new-cron-object
UID: 16295359-0289-11e9-9a46-fa163e964181
Spec:
Cron Spec: */5 * * * *
Image: some-cron-image
Events: <none>
$ kubectl delete -f crd.yaml
$ kubectl get CronTab
No resources found.
$ kubectl get ct
No resources found.