Chapter 9. Advanced Custom Resources

In this chapter we walk you through advanced topics about CRs: versioning, conversion, and admission controllers.

With multiple versions, CRDs become much more serious and are much less distinguishable from Golang-based API resources. Of course, at the same time the complexity considerably grows, both in development and maintenance but also operationally. We call these features “advanced” because they move CRDs from being a manifest (i.e., purely declarative) into the Golang world (i.e., into a real software development project).

Even if you do not plan to build a custom API server and instead intend to directly switch to CRDs, we highly recommend not skipping Chapter 8. Many of the concepts around advanced CRDs have direct counterparts in the world of custom API servers and are motivated by them. Reading Chapter 8 will make it much easier to understand this chapter as well.

The code for all the examples shown and discussed here is available via the GitHub repository.

Custom Resource Versioning

In Chapter 8 we saw how resources are available through different API versions. In the example of the custom API server, the pizza resources exist in version v1alpha1 and v1beta1 at the same time (see “Example: A Pizza Restaurant”). Inside of the custom API server, each object in a request is first converted from the API endpoint version to an internal version (see “Internal Types and Conversion” and Figure 8-5) and then converted back to an external ...

Get Programming Kubernetes now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.