Latest in branch 1.12
1.12.10
Released 30 Jun 2019
(6 years ago)
SoftwareKubernetes
Version1.12
Status
End of life
Initial release1.12.0
25 Sep 2018
(7 years ago)
Latest release1.12.10
30 Jun 2019
(6 years ago)
End of supportUnavailable
End of security fixesUnavailable
Release noteshttps://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.12.md
Source codehttps://github.com/kubernetes/kubernetes/tree/v1.12.10
Documentationhttps://v1-12.docs.kubernetes.io/
Downloadhttps://kubernetes.io/releases/download/
Kubernetes 1.12 ReleasesView full list

What Is New in Kubernetes 1.12

Kubernetes 1.12 delivers key enhancements in three main areas: production-readiness for Kubelet TLS Bootstrapping, significant scheduler improvements, and expanded storage and network capabilities. This release stabilizes features that have been maturing over several previous versions.

Category Key Highlights
Security & Authentication Kubelet TLS Bootstrapping graduates to GA. Vertical Pod Autoscaling moves to beta.
Scheduling Volume scheduling reaches GA. TaintNodesByCondition and ScheduleDaemonSetPods features promoted to beta.
Storage Topology-aware volume scheduling (GA), Azure Virtual Machine Scale Sets (VMSS) and Azure Disk support (GA), and CSI external snapshot support (beta).
Networking IPVS-based kube-proxy moves to GA. CoreDNS is now the default DNS server.
API & Extensibility RuntimeClass resource introduced as alpha for selecting container runtimes. Dry-run and server-side apply mechanisms enter beta.

How did Kubernetes 1.12 improve cluster security and node management?

The headline security improvement is the graduation of Kubelet TLS Bootstrapping to stable. This allows nodes to dynamically request and obtain their TLS certificates from the API server, eliminating the need to manually distribute and manage certificates for each node. It's a foundational feature for securely automating cluster scaling.

Vertical Pod Autoscaling (VPA) entered beta, enabling automatic adjustment of pod CPU and memory requests based on historical usage data. This helps right-size resource allocation, reducing waste and preventing out-of-memory (OOM) kills for memory-hungry applications.

What scheduler enhancements were introduced in version 1.12?

The scheduler saw major stability milestones. Volume scheduling, which allows the scheduler to consider PV topology and pod volume requirements, graduated to General Availability (GA). This ensures pods are scheduled onto nodes where their required volumes are accessible.

Two other critical features hit beta: TaintNodesByCondition and ScheduleDaemonSetPods. The former automatically taints nodes based on conditions like memory pressure, preventing the scheduler from placing new pods on unhealthy nodes. The latter moves DaemonSet pod scheduling from the DaemonSet controller to the default scheduler, unifying the scheduling logic and enabling the use of advanced features like taints and tolerations for DaemonSets.

What new storage and cloud provider capabilities are available?

Topology-aware volume provisioning reached GA, a crucial feature for cloud storage that must be created in the same availability zone as the node using it. This ensures pods can actually use the volumes they claim.

Support for Azure Virtual Machine Scale Sets (VMSS) and Azure Disk also graduated to GA, marking a significant step for production workloads on Azure. The Container Storage Interface (CSI) saw the introduction of external snapshot support as an alpha feature, paving the way for standardised volume backup operations across different storage providers.

How did networking evolve in this release?

IPVS-based load balancing within kube-proxy was promoted to GA. IPVS is designed for high-performance load balancing and offers lower latency with better throughput compared to iptables mode, especially in large-scale clusters.

CoreDNS replaced kube-dns as the default cluster DNS provider. CoreDNS offers a more flexible and extensible architecture, with performance improvements and better reliability, which is why the community made the switch.

What new API features should developers be aware of?

The alpha RuntimeClass resource was introduced to allow selecting a specific container runtime (e.g., runc, kata-containers) on a per-pod basis. This is key for running workloads with different isolation requirements within the same cluster.

Dry-run and server-side apply mechanisms entered beta. Dry-run allows you to submit a request to the API server to see if it would succeed without actually persisting any changes. Server-side apply helps manage field ownership for conflicting updates, a major step toward better declarative object management.

FAQ

Is Kubelet TLS Bootstrapping now safe to use in production?
Yes. Its promotion to GA in 1.12 signifies it is stable and supported for production use. You should implement it to automate and secure node joining.

What is the practical impact of the scheduler changes for DaemonSets?
With ScheduleDaemonSetPods in beta, DaemonSet pods are now scheduled by the default scheduler. This means you can use advanced scheduling features like node affinities, taints, and tolerations to control exactly where your DaemonSet pods run.

Why was CoreDNS made the default over kube-dns?
CoreDNS is more performant and reliable, especially in large clusters. Its plugin-based architecture also makes it more flexible for future extensions. The change is automatic for new clusters.

When should I use the new RuntimeClass feature?
Use RuntimeClass (alpha) if you need to run pods with different runtime requirements. A common use case is using a lightweight runtime like runc for most apps and a more secure, sandboxed runtime like kata-containers for multi-tenant workloads.

What's the benefit of the dry-run API capability?
Dry-run (beta) lets you validate configuration changes without applying them. It's perfect for testing the validity of your YAML/JSON manifests or for seeing what would happen from a mutating webhook before making a real change.

Releases In Branch 1.12

VersionRelease date
1.12.1030 Jun 2019
(6 years ago)
1.12.923 May 2019
(7 years ago)
1.12.822 Apr 2019
(7 years ago)
1.12.722 Mar 2019
(7 years ago)
1.12.626 Feb 2019
(7 years ago)
1.12.515 Jan 2019
(7 years ago)
1.12.413 Dec 2018
(7 years ago)
1.12.326 Nov 2018
(7 years ago)
1.12.224 Oct 2018
(7 years ago)
1.12.105 Oct 2018
(7 years ago)
1.12.025 Sep 2018
(7 years ago)
1.12.0-rc.221 Sep 2018
(7 years ago)
1.12.0-rc.118 Sep 2018
(7 years ago)
1.12.0-beta.212 Sep 2018
(7 years ago)
1.12.0-beta.105 Sep 2018
(7 years ago)
1.12.0-alpha.102 Aug 2018
(7 years ago)