As we discussed in the previous section API versioning isn’t as simple as having running different services to handle the different versions, whereby each service processes each version independently of the other. With Kubernetes, your controller watches the state of an object in etcd, that stored object is versioned to a single value (i.e. only 1 version is ever stored at a time), and when you set-up a watch on the resource whichever version you ask for is the version you will get.
Therefore, when writing a k8s operator, there are a set of requirements and conventions we need to be aware of to ensure that we’re able to progress the software development lifecycle of the API specification and the controller versions in a robust manner.