Latest in branch 0.20
0.20.2
Released 30 Jun 2015
(10 years ago)
SoftwareKubernetes
Version0.20
Status
End of life
Initial release0.20.0
27 Jun 2015
(10 years ago)
Latest release0.20.2
30 Jun 2015
(10 years ago)
End of supportUnavailable
End of security fixesUnavailable
Release noteshttps://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-0.20.md
Source codehttps://github.com/kubernetes/kubernetes/tree/v0.20.2
Documentationhttps://v0-20.docs.kubernetes.io/
Kubernetes 0.20 ReleasesView full list

What Is New in Kubernetes 0.20

Kubernetes 0.20 introduces a focused set of enhancements that refine the core platform. This release strengthens internal APIs and lays the groundwork for future features, particularly in scheduling and resource management.

Category Key Changes
API & Core Pod Termination Grace Period, Namespace Finalizer support
Scheduling Extender-based scheduler predicates
Networking Service node port allocation improvement
Bug Fixes Addresses issues in kubelet, service, and node controllers

How did Kubernetes 0.20 change pod lifecycle management?

The update made the Pod termination grace period configurable. This gives you direct control over how long the kubelet waits for a pod to shut down gracefully after receiving a termination signal.

In practice, this is a big deal for stateful applications like databases or message queues that need extra time to flush buffers and complete transactions. You can now set a terminationGracePeriodSeconds value in your pod spec that matches your application's actual cleanup needs, preventing data corruption from forced kills.

What scheduler improvements were introduced in this release?

Version 0.20 added a new way for scheduler extenders to influence pod placement. Extenders can now implement custom predicates, which are functions that decide if a pod can be scheduled onto a specific node.

This moves beyond the previous model that only supported prioritization. It allows for complex, out-of-tree scheduling logic that the default scheduler doesn't handle, like checking for specific hardware capabilities or custom resource availability on nodes.

How did networking behavior change for Services?

The system improved how node ports are allocated for Services. The change ensures more reliable port assignment, reducing potential conflicts during Service creation.

This matters because it makes Service deployment more predictable, especially in automated environments. You're less likely to hit snags when spinning up multiple Services that require node ports simultaneously.

What core API enhancements should developers be aware of?

Namespace finalizers were added, providing a hook to perform cleanup tasks before a namespace is deleted. This mechanism prevents a namespace from being removed until all finalizing actions are complete.

This is a foundational change for operators and controllers that manage resources within a namespace. It allows them to ensure proper cleanup of external resources or dependencies that aren't directly owned by Kubernetes before the namespace vanishes.

FAQ

Does the configurable pod termination grace period help with stateful workloads?
Absolutely. It's specifically useful for databases (e.g., PostgreSQL), message brokers (e.g., RabbitMQ), and other apps that must complete in-flight operations before terminating. Setting a longer grace period prevents hard shutdowns that can lead to data loss or corruption.

Can I write my own custom scheduler predicates with this release?
Yes, but indirectly. You need to implement a scheduler extender service that exposes a predicate endpoint. The main scheduler will then call out to your extender to evaluate if a pod fits on a node based on your custom logic.

Was the NodePort allocation issue a common problem?
It could surface in dynamic environments with high churn of Service resources. The improvement makes the allocation logic more robust, which is crucial for platforms that frequently create and destroy Services, like CI/CD systems.

How do namespace finalizers work in practice?
When a namespace is deleted, if it has finalizers, its status is set to 'Terminating' but it isn't fully removed. A controller must then complete the actions specified by the finalizer and remove the finalizer entry before the API server will complete the deletion.

Is upgrading to 0.20 from a previous version risky?
This is a minor release focused on internal enhancements and bug fixes. The changes are additive and don't break existing workflows. The main consideration is testing your custom scheduler extenders if you use them, as the new predicate capability changes the interaction model.

Releases In Branch 0.20

VersionRelease date
0.20.230 Jun 2015
(10 years ago)
0.20.129 Jun 2015
(10 years ago)
0.20.027 Jun 2015
(10 years ago)