Since the initial release of version 2.0 that was about 4 weeks ago, we have rolled out a total of 19 releases, addressing more than 50 issues. That's quite amazing!
Most of the issues were related to kubeconfig. We realized
kubeconfig file may contain configuration that is beyond the wildest imagination, full of conflicting information, but somehow the version of
kubectl (or some other tool) used by our users are able to interpret it correctly. We have also identified and fixed several issues in the official Kubernetes client library. Thanks to the maintainers for the quick response!
In this version, the most important enhancement is the massively improved performance. As result, we feel Lens is now the best performing Kubernetes dashboard out there. In addition, we have added a highly anticipated feature for using custom cluster icons!
Prologue - We Need You
We are on a mission to create the most amazing tool for managing Kubernetes that is designed primarily for people who need to work with Kubernetes on a daily basis. We believe the only way to succeed in this kind of project is to listen for feedback from users. All users. Not just the loudest voices on the public forums.
Like most of our users have noticed, we have been really pushing hard to get feedback. I have been personally trying to reach out to everybody using Lens software. I've had great discussions with many of our users and learned a lot about different environments, use cases, what is great and what is not so great. This information and the constant feedback is a backbone for us on our mission to make the most amazing tool for managing Kubernetes clusters.
Massively Improved Performance
In 2.3 release one of the major themes we worked on was optimizing the user experience with large clusters.
Since day 1 as we've been developing the dashboard we wanted to make it reflect the cluster state in real-time and to be fully reactive. By that we mean that the dashboard should reflect the cluster state as changes happen with no need for the user to refresh the UI state at all. What we've now seen in a few cases is the UI lagging a bit and using excessive amount of resources when there are a lot of nodes, pods and other resources. This is basically caused by the fact that on the UI we use heavily the watch API of Kubernetes. So when there's lots of things happening in your cluster, there's lots of events emitted on the watch API. Then on the UI side as we "correlate" these events as reactive UI components, we ended up burning lots of resources.
To allow the UI to efficiently show the cluster and resource statuses for user we tuned the watch API buffering on the application. This allows the UI to compute and re-draw certain "chunks" of information at a time and not really re-compute the whole state every time. While doing these fixes we also found a couple of bugs related how the app handled Kubernetes API request retrying. In some cases that resulted in obsolete watch API queries to be "forcibly" re-connected forever and thus also caused excessive resource usage.
One of the most brutal test cases we've been testing this with is by having massive amounts of
Pending pods. Massive as in ~20k pods. Pending pods are pods that cannot be scheduled due to resource limits or other such reasons. As the Kubernetes scheduler re-tries the scheduling in pretty tight loop this creates a massive amount of events that the UI "correlates" to what is shown for the user. Even with several hundreds of real-time watch events the UI now works very smoothly and does not use much resources.
We feel Lens is now the best performing Kubernetes dashboard available. Not just that, but we are happy to be proven wrong so we can crank up the performance even more! :)
Custom Cluster Icons
One highly requested feature has been the possibility to customize cluster icons for better cluster distinguishing. We have listened and added this feature to Kontena Lens. On cluster settings, user is now able to set a custom image for the cluster. The best result will be if the image is as close to square as possible.
Support for Pod Security Policies Visualization
One of the new features in this release is support for visualizing the basic PodSecurityPolicy rules active in the system. It helps the cluster administrators to see the rules in bit more user-friendly format instead of reading through the full yamls through
This is the first step towards getting better control for the cluster administrators on one of the most daunting concepts of Kubernetes. In the future we plan to enhance this part quite much.
Changes Since 2.0.0
Many of the issues we have fixed or improved over the past few weeks would have deserved their own dedicated blog post or story. Unfortunately we didn't have the time to make those stories. We were too busy making the software better. Let's hijack this blog post to celebrate all those features, fixes and enhancements made since version 2.0.0!
- Make it possible to change cluster icons
- Massive boost to UI performance when working with clusters with thousands of pods hundreds of events per second
- Improvement to network timeout issues
- Allow the configuration of Internet proxy via preferences
- Do not send authorization headers if kubeconfig has a client certificate
- OIDC authentication fixes
- Improved error messages when adding a cluster fails
- Respect the namespace defined in kubeconfig on Lens terminal
- Highlight new kube contexts when adding clusters from local kubeconfig
- Minor kubeconfig auth-provider fixes
- Don't auto-import local kubeconfig to improve overall usability.
- Allow importing of contexts from the default kubeconfig
- Show the "Whats New" page when running a new version of the app
- Improved the error messages when a cluster cannot be accessed
- Improved kubeconfig validation
- Sync environment variables from login shell
- Use node affinity selectors to match OS for metrics pods
- Terminal: zsh fixes
- Handle network issues better
- Menu: show "About Lens" also on Linux & Windows
- Notify if a port can't be opened on app boot
- Improve free port finding
- Sort clusters by name
- Wait until shell init files are written into the disk before starting the terminal
- Always use temp file(s) when applying resources
- Bundle server binaries
- Show errorbox on fatal boot errors
- Let app start, if already logged in, when no networking available
- Remove clusters with malformed kubeconfig when initializing clusters
- Show & accept EULA before login
- Download the correct kubectl for 32bit windows and validate kubectl md5sums
- 32bit windows support
- Remove shell outputs before shell process is started
- Catch kubeconfig load errors better
- Fix app initialization & login timeout cases
- Add Report an Issue to Window menu
- Target linux nodes only in metrics pods
- Enable user invitations in menu
- Better handling for possible errors in kubeconfig authentication
- Kill backend processes on application exit
- Introduce "User Mode" feature for clusters
- Run login shells in embedded terminals
- Fix cluster settings page scroll issue
- Enable persistence for metrics collection only if cluster has default storage class available
- Fix cluster online checking
- AppImage Linux application packaging
- Ensure correct version of kubectl on terminal shell
- Better error handling for manually added cluster configurations
Getting Started with Lens
Kontena Lens desktop application is available for download from Kontena website. It is 100% free of charge.