Latest Kubernetes Release Focuses on Continuous Improvement and Stability
The Kubernetes team launched the 1.15 release on June 19th, 2019, the second release of 2019. According to the release announcement, the goal of the latest version is continuous improvement and extensibility. Kubernetes 1.15 includes new features, such as pruning on custom resource definitions, but relative to previous releases, focuses primarily on stability over enhancements.
The majority of enhancements towards stability and extensibility were on custom resource definitions (CRDs). Custom resources is an extension of the Kubernetes API that enables users to add custom objects to a Kubernetes cluster. The goal for CRD improvements is to minimize the distinctions between the custom resource and the core Kubernetes resource interfaces and ultimately upgrading custom resources to general availability.
Towards this end, structural schemas have been introduced to improve data consistency and behavior. The structured schema is an OpenAPI v3 JSON schema specification that requires a non-empty type for the root, for each declared field of an object node, and for each item in an array node. Logical constraints and validations are available as long as they comply with the structural schema specifications. Starting from Kubernetes 1.15, any new feature for CRDs will require a structural schema.
type: object description: "foo bar object" properties: foo: type: string pattern: "abc" bar: type: integer metadata: type: object properties: name: type: string pattern: "^a" anyOf: - properties: bar: minimum: 42 required: ["bar"]
Example Structural Schema from Kubernetes Documentation
Structural schemas support two new enhancements for CRDs: data pruning and field defaults. Including default field values when defining a custom resource is done via OpenAPI validation schemas. CRD field defaults improve API compatibility when introducing new fields. With CRD pruning, data not aligned with the OpenAPI schema validation will be removed, which can improve data quality and security issues. Further information on working with structural schemas has been added to the Kubernetes documentation.
Stability work was also a goal for the improvements brought to kubeadm. Kubeadm is a tool for bootstrapping a minimum viable cluster and provides a “fast path” for creating Kubernetes clusters. Automating the creation of dynamic highly available clusters with kubeadm has been promoted to beta. Setting up a highly available cluster requires an external load balancer, which is out of scope of kubeadm, and the community will be providing reference implementations for several common load balancers such as HAProxy and Envoy. Certificate management has also been simplified in 1.15 so that kubeadm will automatically handle rotating certificates during upgrades. Significant testing and rework of the kubeadm configuration file was done to help achieve these improvements and bring the feature to beta stage.
Volume cloning has been introduced as alpha. Volume cloning enables users to specify another persistent volume as a “DataSource” when provisioning a new volume. Adding volume cloning to the Kubernetes API enables users to easily copy state from an existing volume, for example copying data from a database to a new instance of the database.