You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/en/blog/_posts/2026-01-22-headlamp-in-2025/index.md
+22-21Lines changed: 22 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,7 @@
2
2
layout: blog
3
3
title: "Headlamp in 2025: Project Highlights"
4
4
date: 2026-01-22T10:00:00+08:00
5
+
slug: headlamp-in-2025-project-highlights
5
6
author: >
6
7
Evangelos Skopelitis (Microsoft)
7
8
---
@@ -40,28 +41,27 @@ This year, we were excited to work with several students through the Linux Found
40
41
41
42
Managing multiple clusters is challenging: teams often switch between tools and lose context when trying to see what runs where. Headlamp solves this by giving you a single view to compare clusters side-by-side. This makes it easier to understand workloads across environments and reduces the time spent hunting for resources.
<emstyle="display: block; margin-bottom: 1em;">View of multi-cluster workloads</em>
44
+
{{< figure src="multi-cluster-view.png" alt="Multi-cluster view" caption="View of multi-cluster workloads" >}}
45
45
46
46
### Projects
47
47
48
48
Kubernetes apps often span multiple namespaces and resource types, which makes troubleshooting feel like piecing together a puzzle. We’ve added **Projects** to give you an application-centric view that groups related resources across multiple namespaces – and even clusters. This allows you to reduce sprawl, troubleshoot faster, and collaborate without digging through YAML or cluster-wide lists.
<emstyle="display: block; margin-bottom: 1em;">View of the new Projects feature</em>
50
+
{{< figure src="projects-feature.png" alt="Projects feature" caption="View of the new Projects feature" >}}
52
51
53
52
Changes:
53
+
54
54
- New “Projects” feature for grouping namespaces into app- or team-centric projects
55
55
- Extensible Projects details view that plugins can customize with their own tabs and actions
56
56
57
57
### Navigation and Activities
58
58
59
59
Day-to-day ops in Kubernetes often means juggling logs, terminals, YAML, and dashboards across clusters. We redesigned Headlamp’s navigation to treat these as first-class “activities” you can keep open and come back to, instead of one-off views you lose as soon as you click away.
<emstyle="display: block; margin-bottom: 1em;">View of the new task bar</em>
61
+
{{< figure src="new-task-bar.png" alt="New task bar" caption="View of the new task bar" >}}
63
62
64
63
Changes:
64
+
65
65
- A new task bar/activities model lets you pin logs, exec sessions, and details as ongoing activities
66
66
- An activity overview with a “Close all” action and cluster information
67
67
- Multi-select and global filters in tables
@@ -72,10 +72,10 @@ Thanks to [Jan Jansen](https://github.com/farodin91) and [Aditya Chaudhary](http
72
72
73
73
When something breaks in production, the first two questions are usually “where is it?” and “what is it connected to?” We’ve upgraded both search and the map view so you can get from a high-level symptom to the right set of objects much faster.
<emstyle="display: block; margin-bottom: 1em;">View of user information for OIDC clusters</em>
90
+
{{< figure src="user-info.png" alt="User info" caption="View of user information for OIDC clusters" >}}
92
91
93
92
Changes:
93
+
94
94
- User information displayed in the top bar for OIDC-authenticated users
95
95
- PKCE support for more secure authentication flows, as well as hardened token refresh handling
96
96
- Documentation for using the access token using `-oidc-use-access-token=true`
@@ -104,20 +104,21 @@ Thanks to [David Dobmeier](https://github.com/daviddob) and [Harsh Srivastava](h
104
104
We’ve broadened how you deploy and source apps via Headlamp, specifically supporting vanilla Helm repos.
105
105
106
106
Changes:
107
+
107
108
- A more capable Helm chart with optional backend TLS termination, PodDisruptionBudgets, custom pod labels, and more
108
109
- Improved formatting and added missing access token arg in the Helm chart
109
110
- New in-cluster Helm support with an `--enable-helm` flag and a service proxy
110
111
111
-
Thanks to [Vrushali Shah](https://github.com/shahvrushali22) and [Murali Annamneni](https://github.com/muraliinformal) from Oracle, and also to [Pat Riehecky](https://github.com/jcpunk), [Joshua Akers](https://github.com/jda258), [Rostislav Stříbrný](https://github.com/rstribrn), [Rick L](https://github.com/rickliujh),and [Victor](https://github.com/vnea).
112
+
Thanks to [Vrushali Shah](https://github.com/shahvrushali22) and [Murali Annamneni](https://github.com/muraliinformal) from Oracle, and also to [Pat Riehecky](https://github.com/jcpunk), [Joshua Akers](https://github.com/jda258), [Rostislav Stříbrný](https://github.com/rstribrn), [Rick L](https://github.com/rickliujh),and [Victor](https://github.com/vnea).
112
113
113
114
### Performance, accessibility, and UX
114
115
115
116
Finally, we’ve spent a lot of time on the things you notice every day but don’t always make headlines: startup time, list views, log viewers, accessibility, and small network UX details. A continuous accessibility self-audit has also helped us identify key issues and make Headlamp easier for everyone to use.
<emstyle="display: block; margin-bottom: 1em;">View of the Learn section in docs</em>
118
+
{{< figure src="learn-section.png" alt="Learn section" caption="View of the Learn section in docs" >}}
119
119
120
120
Changes:
121
+
121
122
- Significant desktop improvements, with up to 60% faster app loads and much quicker dev-mode reloads for contributors
122
123
- Numerous table and log viewer refinements: persistent sort order, consistent row actions, copy-name buttons, better tooltips, and more forgiving log inputs
123
124
- Accessibility and localization improvements, including fixes for zoom-related layout issues, better color contrast, improved screen reader support, and expanded language coverage
@@ -126,14 +127,13 @@ Changes:
126
127
- A more complete NetworkPolicy UI and network-related polish
127
128
- Nightly builds available for early testing
128
129
129
-
Thanks to [Jaehan Byun](https://github.com/jaehanbyun) and [Jan Jansen](https://github.com/farodin91).
130
+
Thanks to [Jaehan Byun](https://github.com/jaehanbyun) and [Jan Jansen](https://github.com/farodin91).
130
131
131
132
## Plugins and extensibility
132
133
133
-
Discovering plugins is simpler now – no more hopping between Artifact Hub and assorted GitHub repos. Browse our dedicated [Plugins page](https://headlamp.dev/plugins) for a curated catalog of Headlamp-endorsed plugins, along with a showcase of featured plugins.
134
+
Discovering plugins is simpler now – no more hopping between Artifact Hub and assorted GitHub repos. Browse our dedicated [Plugins page](https://headlamp.dev/plugins) for a curated catalog of Headlamp-endorsed plugins, along with a showcase of featured plugins.
<emstyle="display: block; margin-bottom: 1em;">View of the Plugins showcase</em>
136
+
{{< figure src="plugins-page.png" alt="Plugins page" caption="View of the Plugins showcase" >}}
137
137
138
138
### Headlamp AI Assistant
139
139
@@ -146,6 +146,7 @@ Managing Kubernetes often means memorizing commands and juggling tools. Headlamp
146
146
Alongside the new AI Assistant, we’ve been growing Headlamp’s plugin ecosystem so you can bring more of your workflows into a single UI, with integrations like Minikube, Karpenter, and more.
147
147
148
148
Highlights from the latest plugin releases:
149
+
149
150
- Minikube plugin, providing a locally stored single node Minikube cluster
150
151
- Karpenter plugin, with support for Azure Node Auto-Provisioning (NAP)
151
152
- KEDA plugin, which you can learn more about [here](https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp/)
@@ -157,10 +158,10 @@ Thanks to [Vrushali Shah](https://github.com/shahvrushali22) and [Murali Annamne
157
158
158
159
Alongside new additions, we’ve also spent time refining plugins that many of you already use, focusing on smoother workflows and better integration with the core UI.
<emstyle="display: block; margin-bottom: 1em;">View of the Backstage plugin</em>
161
+
{{< figure src="backstage-plugin.png" alt="Backstage plugin" caption="View of the Backstage plugin" >}}
162
162
163
163
Changes:
164
+
164
165
-**Flux plugin**: Updated for Flux v2.7, with support for newer CRDs, navigation fixes so it works smoothly on recent clusters
165
166
-**App Catalog**: Now supports Helm repos in addition to Artifact Hub, can run in-cluster via /serviceproxy, and shows both current and latest app versions
166
167
-**Plugin Catalog**: Improved card layout and accessibility, plus dependency and Storybook test updates
@@ -170,8 +171,7 @@ Changes:
170
171
171
172
We’ve focused on making it faster and clearer to build, test, and ship Headlamp plugins, backed by improved documentation and lighter tooling.
<emstyle="display: block; margin-bottom: 1em;">View of the Plugin Development guide</em>
174
+
{{< figure src="plugin-development.png" alt="Plugin development" caption="View of the Plugin Development guide" >}}
175
175
176
176
Changes:
177
177
- New and expanded guides for [plugin architecture](https://headlamp.dev/docs/latest/development/architecture#plugins) and [development](https://headlamp.dev/docs/latest/development/plugins/getting-started), including how to publish and ship plugins
@@ -185,6 +185,7 @@ Changes:
185
185
We've also been investing in keeping Headlamp secure – both by tightening how authentication works and by staying on top of upstream vulnerabilities and tooling.
186
186
187
187
Updates:
188
+
188
189
- We've been keeping up with security updates, regularly updating dependencies and addressing upstream security issues.
189
190
- We tightened the Helm chart's default security context and fixed a regression that broke the plugin manager.
190
191
- We've improved OIDC security with PKCE support, helping unblock more secure and standards-compliant OIDC setups when deploying Headlamp in-cluster.
In the standard Kubernetes model, a node’s suitability for workloads hinges on a single binary "Ready" condition. However, in modern Kubernetes environments, nodes require complex infrastructure dependencies—such as network agents, storage drivers, GPU firmware, or custom health checks—to be fully operational before they can reliably host pods.
12
+
13
+
Today, on behalf of the Kubernetes project, I am announcing the [Node Readiness Controller](https://node-readiness-controller.sigs.k8s.io/).
14
+
This project introduces a declarative system for managing node taints, extending the readiness guardrails during node bootstrapping beyond standard conditions.
15
+
By dynamically managing taints based on custom health signals, the controller ensures that workloads are only placed on nodes that met all infrastructure-specific requirements.
16
+
17
+
## Why the Node Readiness Controller?
18
+
19
+
Core Kubernetes Node "Ready" status is often insufficient for clusters with sophisticated bootstrapping requirements. Operators frequently struggle to ensure that specific DaemonSets or local services are healthy before a node enters the scheduling pool.
20
+
21
+
The Node Readiness Controller fills this gap by allowing operators to define custom scheduling gates tailored to specific node groups. This enables you to enforce
22
+
distinct readiness requirements across heterogeneous clusters, ensuring for example, that GPU equipped nodes only accept pods once specialized drivers are verified,
23
+
while general purpose nodes follow a standard path.
24
+
25
+
It provides three primary advantages:
26
+
27
+
-**Custom Readiness Definitions**: Define what _ready_ means for your specific platform.
28
+
-**Automated Taint Management**: The controller automatically applies or removes node taints based on condition status, preventing pods from landing on unready infrastructure.
29
+
-**Declarative Node Bootstrapping**: Manage multi-step node initialization reliably, with a clear observability into the bootstrapping process.
30
+
31
+
## Core concepts and features
32
+
33
+
The controller centers around the NodeReadinessRule (NRR) API, which allows you to define declarative _gates_ for your nodes.
34
+
35
+
### Flexible enforcement modes
36
+
37
+
The controller supports two distinct operational modes:
38
+
39
+
Continuous enforcement
40
+
: Actively maintains the readiness guarantee throughout the node’s entire lifecycle. If a critical dependency (like a device driver) fails later, the node is immediately tainted to prevent new scheduling.
41
+
42
+
Bootstrap-only enforcement
43
+
: Specifically for one-time initialization steps, such as pre-pulling heavy images or hardware provisioning. Once conditions are met, the controller marks the bootstrap as complete and stops monitoring that specific rule for the node.
44
+
45
+
### Condition reporting
46
+
47
+
The controller reacts to Node Conditions rather than performing health checks itself. This decoupled design allows it to integrate seamlessly with other tools existing in the ecosystem as well as custom solutions:
48
+
49
+
-**[Node Problem Detector](https://github.com/kubernetes/node-problem-detector) (NPD)**: Use existing NPD setups and custom scripts to report node health.
50
+
-**Readiness Condition Reporter**: A lightweight agent provided by the project that can be deployed to periodically check local HTTP endpoints and patch node conditions accordingly.
51
+
52
+
### Operational safety with dry run
53
+
54
+
Deploying new readiness rules across a fleet carries inherent risk. To mitigate this, _dry run_ mode allows operators to first simulate impact on the cluster.
55
+
In this mode, the controller logs intended actions and updates the rule's status to show affected nodes without applying actual taints, enabling safe validation before enforcement.
56
+
57
+
## Example: CNI bootstrapping
58
+
59
+
The following NodeReadinessRule ensures a node remains unschedulable until its CNI agent is functional. The controller monitors a custom `cniplugin.example.net/NetworkReady` condition and only removes the `readiness.k8s.io/acme.com/network-unavailable` taint once the status is True.
The Node Readiness Controller is just getting started, with our [initial releases](https://github.com/kubernetes-sigs/node-readiness-controller/releases/tag/v0.1.1) out, and we are seeking community feedback to refine the roadmap. Following our productive Unconference discussions at KubeCon NA 2025, we are excited to continue the conversation in person.
86
+
87
+
Join us at KubeCon + CloudNativeCon Europe 2026 for our maintainer track session: *[Addressing Non-Deterministic Scheduling: Introducing the Node Readiness Controller](https://sched.co/2EF6E)*.
88
+
89
+
In the meantime, you can contribute or track our progress here:
Copy file name to clipboardExpand all lines: content/en/blog/_posts/2026-02-02-introducing-node-readiness-controller/node-readiness-controller-logo.svg
0 commit comments