⬆️ Update CRD content to deprecate v1beta1 manifests

This commit is contained in:
Jerome Petazzoni
2021-07-21 15:50:27 +02:00
parent 92cdb4146b
commit d14f86e683
3 changed files with 63 additions and 9 deletions

View File

@@ -1,3 +1,6 @@
# Note: apiextensions.k8s.io/v1beta1 is deprecated, and won't be served
# in Kubernetes 1.22 and later versions. This YAML manifest is here just
# for reference, but it's not intended to be used in modern trainings.
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:

View File

@@ -8,6 +8,9 @@ spec:
- name: v1alpha1 - name: v1alpha1
served: true served: true
storage: true storage: true
schema:
openAPIV3Schema:
type: object
scope: Namespaced scope: Namespaced
names: names:
plural: coffees plural: coffees

View File

@@ -12,9 +12,21 @@
--- ---
## A very simple CRD ## Creating a CRD
The file @@LINK[k8s/coffee-1.yaml] describes a very simple CRD representing different kinds of coffee: - We will create a CRD to represent the different species of coffee
(arabica, liberica, and robusta)
- We will be able to run `kubectl get coffees` and it will list the species
- Then we can label, edit, etc. the species to attach some information
(e.g. the taste profile of the coffee, or whatever we want)
---
## First shot of coffee
```yaml ```yaml
@@INCLUDE[k8s/coffee-1.yaml] @@INCLUDE[k8s/coffee-1.yaml]
@@ -22,7 +34,43 @@ The file @@LINK[k8s/coffee-1.yaml] describes a very simple CRD representing diff
--- ---
## Creating a CRD ## The joys of API deprecation
- Unfortunately, the CRD manifest on the previous slide is deprecated!
- It is using `apiextensions.k8s.io/v1beta1`, which is dropped in Kubernetes 1.22
- We need to use `apiextensions.k8s.io/v1`, which is a little bit more complex
(a few optional things become mandatory, see [this guide](https://kubernetes.io/docs/reference/using-api/deprecation-guide/#customresourcedefinition-v122) for details)
- `apiextensions.k8s.io/v1beta1` is available since Kubernetes 1.16
---
## Second shot of coffee
- The next slide will show file @@LINK[k8s/coffee-2.yaml]
- Note the `spec.versions` list
- we need exactly one version with `storage: true`
- we can have multiple versions with `served: true`
- `spec.versions[].schema.openAPI3Schema` is required
(and must be a valid OpenAPI schema; here it's a trivial one)
---
```yaml
@@INCLUDE[k8s/coffee-2.yaml]
```
---
## Creating our Coffee CRD
- Let's create the Custom Resource Definition for our Coffee resource - Let's create the Custom Resource Definition for our Coffee resource
@@ -30,7 +78,7 @@ The file @@LINK[k8s/coffee-1.yaml] describes a very simple CRD representing diff
- Load the CRD: - Load the CRD:
```bash ```bash
kubectl apply -f ~/container.training/k8s/coffee-1.yaml kubectl apply -f ~/container.training/k8s/coffee-2.yaml
``` ```
- Confirm that it shows up: - Confirm that it shows up:
@@ -169,13 +217,13 @@ Note: we can update a CRD without having to re-create the corresponding resource
## Data validation ## Data validation
- By default, CRDs are not *validated* - CRDs are validated with the OpenAPI v3 schema that we specify
(we can put anything we want in the `spec`) (with older versions of the API, when the schema was optional,
<br/>
no schema = no validation at all)
- When creating a CRD, we can pass an OpenAPI v3 schema - Otherwise, we can put anything we want in the `spec`
(which will then be used to validate resources)
- More advanced validation can also be done with admission webhooks, e.g.: - More advanced validation can also be done with admission webhooks, e.g.: