mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-02-22 00:32:59 +08:00
Change apiversion of CRD from v1beta1 to v1
- Update CRDs (crd.yaml, crd-status-subresource.yaml) to match requirements of current release - Add `versions` field and structures `schema` as made mandatory in apiextensions/v1 - Add annotation for api-approved.kubernetes.io since CRD is under *k8s.io domain - Delete crd-validation.yaml since structured schema is mandatory in v1 - Update README Signed-off-by: Madhav Jivrajani <madhav.jiv@gmail.com> Kubernetes-commit: fd0ac9c8d169169c8072639970565cda9fb9499a
This commit is contained in:
parent
53528ac7e4
commit
cba5d7c8c2
35
README.md
35
README.md
@ -59,7 +59,7 @@ cd sample-controller
|
|||||||
```
|
```
|
||||||
|
|
||||||
Note, however, that if you intend to
|
Note, however, that if you intend to
|
||||||
[generate code](#changes-to-the-types) then you will also need the
|
generate code then you will also need the
|
||||||
code-generator repo to exist in an old-style location. One easy way
|
code-generator repo to exist in an old-style location. One easy way
|
||||||
to do this is to use the command `go mod vendor` to create and
|
to do this is to use the command `go mod vendor` to create and
|
||||||
populate the `vendor` directory.
|
populate the `vendor` directory.
|
||||||
@ -128,36 +128,21 @@ type User struct {
|
|||||||
|
|
||||||
## Validation
|
## Validation
|
||||||
|
|
||||||
To validate custom resources, use the [`CustomResourceValidation`](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#validation) feature.
|
To validate custom resources, use the [`CustomResourceValidation`](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#validation) feature. Validation in the form of a [structured schema](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#specifying-a-structural-schema) is mandatory to be provided for `apiextensions.k8s.io/v1`.
|
||||||
|
|
||||||
This feature is beta and enabled by default in v1.9.
|
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
The schema in [`crd-validation.yaml`](./artifacts/examples/crd-validation.yaml) applies the following validation on the custom resource:
|
The schema in [`crd.yaml`](./artifacts/examples/crd.yaml) applies the following validation on the custom resource:
|
||||||
`spec.replicas` must be an integer and must have a minimum value of 1 and a maximum value of 10.
|
`spec.replicas` must be an integer and must have a minimum value of 1 and a maximum value of 10.
|
||||||
|
|
||||||
In the above steps, use `crd-validation.yaml` to create the CRD:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# create a CustomResourceDefinition supporting validation
|
|
||||||
kubectl create -f artifacts/examples/crd-validation.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Subresources
|
## Subresources
|
||||||
|
|
||||||
Custom Resources support `/status` and `/scale` subresources as a [beta feature](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#subresources) in v1.11 and is enabled by default.
|
Custom Resources support `/status` and `/scale` [subresources](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#subresources). The `CustomResourceSubresources` feature is in GA from v1.16.
|
||||||
This feature is [alpha](https://v1-10.docs.kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#subresources) in v1.10 and to enable it you need to set the `CustomResourceSubresources` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
--feature-gates=CustomResourceSubresources=true
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
The CRD in [`crd-status-subresource.yaml`](./artifacts/examples/crd-status-subresource.yaml) enables the `/status` subresource
|
The CRD in [`crd-status-subresource.yaml`](./artifacts/examples/crd-status-subresource.yaml) enables the `/status` subresource for custom resources.
|
||||||
for custom resources.
|
This means that [`UpdateStatus`](./controller.go) can be used by the controller to update only the status part of the custom resource.
|
||||||
This means that [`UpdateStatus`](./controller.go#L330) can be used by the controller to update only the status part of the custom resource.
|
|
||||||
|
|
||||||
To understand why only the status part of the custom resource should be updated, please refer to the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status).
|
To understand why only the status part of the custom resource should be updated, please refer to the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status).
|
||||||
|
|
||||||
@ -168,11 +153,15 @@ In the above steps, use `crd-status-subresource.yaml` to create the CRD:
|
|||||||
kubectl create -f artifacts/examples/crd-status-subresource.yaml
|
kubectl create -f artifacts/examples/crd-status-subresource.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## A Note on the API version
|
||||||
|
The [group](https://kubernetes.io/docs/reference/using-api/#api-groups) version of the custom resource in `crd.yaml` is `v1alpha`, this can be evolved to a stable API version, `v1`, using [CRD Versioning](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/).
|
||||||
|
|
||||||
## Cleanup
|
## Cleanup
|
||||||
|
|
||||||
You can clean up the created CustomResourceDefinition with:
|
You can clean up the created CustomResourceDefinition with:
|
||||||
|
```sh
|
||||||
kubectl delete crd foos.samplecontroller.k8s.io
|
kubectl delete crd foos.samplecontroller.k8s.io
|
||||||
|
```
|
||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
|
@ -1,13 +1,41 @@
|
|||||||
apiVersion: apiextensions.k8s.io/v1beta1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
name: foos.samplecontroller.k8s.io
|
name: foos.samplecontroller.k8s.io
|
||||||
|
# for more information on the below annotation, please see
|
||||||
|
# https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/2337-k8s.io-group-protection/README.md
|
||||||
|
annotations:
|
||||||
|
"api-approved.kubernetes.io": "unapproved, experimental-only; please get an approval from Kubernetes API reviewers if you're trying to develop a CRD in the *.k8s.io or *.kubernetes.io groups"
|
||||||
spec:
|
spec:
|
||||||
group: samplecontroller.k8s.io
|
group: samplecontroller.k8s.io
|
||||||
version: v1alpha1
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
schema:
|
||||||
|
# schema used for validation
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
deploymentName:
|
||||||
|
type: string
|
||||||
|
replicas:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 10
|
||||||
|
status:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
availableReplicas:
|
||||||
|
type: integer
|
||||||
|
# subresources for the custom resource
|
||||||
|
subresources:
|
||||||
|
# enables the status subresource
|
||||||
|
status: {}
|
||||||
names:
|
names:
|
||||||
kind: Foo
|
kind: Foo
|
||||||
plural: foos
|
plural: foos
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
apiVersion: apiextensions.k8s.io/v1beta1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
name: foos.samplecontroller.k8s.io
|
|
||||||
spec:
|
|
||||||
group: samplecontroller.k8s.io
|
|
||||||
version: v1alpha1
|
|
||||||
names:
|
|
||||||
kind: Foo
|
|
||||||
plural: foos
|
|
||||||
scope: Namespaced
|
|
||||||
validation:
|
|
||||||
openAPIV3Schema:
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
properties:
|
|
||||||
replicas:
|
|
||||||
type: integer
|
|
||||||
minimum: 1
|
|
||||||
maximum: 10
|
|
@ -1,10 +1,36 @@
|
|||||||
apiVersion: apiextensions.k8s.io/v1beta1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
name: foos.samplecontroller.k8s.io
|
name: foos.samplecontroller.k8s.io
|
||||||
|
# for more information on the below annotation, please see
|
||||||
|
# https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/2337-k8s.io-group-protection/README.md
|
||||||
|
annotations:
|
||||||
|
"api-approved.kubernetes.io": "unapproved, experimental-only; please get an approval from Kubernetes API reviewers if you're trying to develop a CRD in the *.k8s.io or *.kubernetes.io groups"
|
||||||
spec:
|
spec:
|
||||||
group: samplecontroller.k8s.io
|
group: samplecontroller.k8s.io
|
||||||
version: v1alpha1
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
schema:
|
||||||
|
# schema used for validation
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
deploymentName:
|
||||||
|
type: string
|
||||||
|
replicas:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 10
|
||||||
|
status:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
availableReplicas:
|
||||||
|
type: integer
|
||||||
names:
|
names:
|
||||||
kind: Foo
|
kind: Foo
|
||||||
plural: foos
|
plural: foos
|
||||||
|
Loading…
Reference in New Issue
Block a user