Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KEP-5008: Introduce Kubernetes Desktop #5009

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

joaquimrocha
Copy link

  • One-line PR description: Adding new KEP 5008 for introducing a Kubernetes Desktop project
  • Other comments:

@k8s-ci-robot k8s-ci-robot added the kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory label Dec 19, 2024
@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Dec 19, 2024
@k8s-ci-robot
Copy link
Contributor

Welcome @joaquimrocha!

It looks like this is your first PR to kubernetes/enhancements 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes/enhancements has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Dec 19, 2024
@k8s-ci-robot
Copy link
Contributor

Hi @joaquimrocha. Thanks for your PR.

I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Dec 19, 2024
Effectively this entails moving the Headlamp project under the Kubernetes
GitHub organization and under the auspices of Kubernetes SIG UI. To be
specific, we would propose that the Headlamp project be moved to a repo under
the Kubernetes project; something to the effect of kubernetes/ui.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternative: we could still call it Headlamp.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we are proposing to bring the project under the Kubernetes umbrella, our thinking is that having a separate branding (Headlamp) could be confusing for users and developers.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • We could list "Kubernetes Headlamp" as an alternative to "Kubernetes Desktop".
  • We need a name for the bits of Headlamp that are not Kubernetes Desktop
  • We have a precedent for components of Kubernetes that have their own name; for example: etcd.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The build/app we are proposing should be called Kubernetes Desktop. You are right that there are non-desktop bits, but that should be encompassed in having kubernetes/ui as a technical/repo name as proposed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wary of calling it "UI".

Imagine using it in conversation; "Well, I've worked on a few cloud native things; I wrote tests for kube-apiserver, I improve the CRI support in containerd, and I wrote the style guide for UI". Even if you said "Kubernetes UI", people might not realise you mean Headlamp.

By rough analogy: we call it kubectl and not cli-client.

Comment on lines +119 to +159
## Release Signoff Checklist

<!--
**ACTION REQUIRED:** In order to merge code into a release, there must be an
issue in [kubernetes/enhancements] referencing this KEP and targeting a release
milestone **before the [Enhancement Freeze](https://git.k8s.io/sig-release/releases)
of the targeted release**.
For enhancements that make changes to code or processes/procedures in core
Kubernetes—i.e., [kubernetes/kubernetes], we require the following Release
Signoff checklist to be completed.
Check these off as they are completed for the Release Team to track. These
checklist items _must_ be updated for the enhancement to be released.
-->

Items marked with (R) are required *prior to targeting to a milestone / release*.

- [ ] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
- [ ] (R) KEP approvers have approved the KEP status as `implementable`
- [ ] (R) Design details are appropriately documented
- [ ] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
- [ ] e2e Tests for all Beta API Operations (endpoints)
- [ ] (R) Ensure GA e2e tests meet requirements for [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
- [ ] (R) Minimum Two Week Window for GA e2e tests to prove flake free
- [ ] (R) Graduation criteria is in place
- [ ] (R) [all GA Endpoints](https://github.com/kubernetes/community/pull/1806) must be hit by [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
- [ ] (R) Production readiness review completed
- [ ] (R) Production readiness review approved
- [ ] "Implementation History" section is up-to-date for milestone
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
- [ ] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes

<!--
**Note:** This checklist is iterative and should be reviewed and updated every time this enhancement is being considered for a milestone.
-->

[kubernetes.io]: https://kubernetes.io/
[kubernetes/enhancements]: https://git.k8s.io/enhancements
[kubernetes/kubernetes]: https://git.k8s.io/kubernetes
[kubernetes/website]: https://git.k8s.io/website
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a way to handle KEPs not tied to a Kubernetes release; I think this one wouldn't be. Have I got that right?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. I wasn't sure if for the sake of the KEP formatting I had to keep this around. Should I remove it then?

Comment on lines +339 to +338
As a vendor I want to create a new Kubernetes user interface for my system. I
take Headlamp Base and build a set of plugins and take some of the existing
plugins to create my custom UI. I customize the UI with my company/product
branding and provide that to my users with or without them knowing it’s
Headlamp. If I desire, I can even allow my users to extend my customer UI using
the same way I did.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be done right now with the existing Headlamp? If so, maybe we should mention that.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is possible right now (all user stories are possible ATM, except when indicated by notes, like the minikube plugin being a POC still). How can we indicate that we do support these more explicitly?

Comment on lines +299 to +298
<!--
Detail the things that people will be able to do if this KEP is implemented.
Include as much detail as possible so that people can understand the "how" of
the system. The goal here is to make this feel real for users without getting
bogged down.
-->
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few ideas for more stories we could maybe want to support one day:

  • as an add-on vendor / author, I define a custom resource using a Headlamp plugin CRD. Now, when people deploy my add-on, they can automatically benefit from the plug-in for my addon.

  • I have made a specialised control plane based on projects similar to Kubernetes [I'm thinking KCP and Crossplane]. I use Headlamp against the specialised control plane to deploy a Kubernetes cluster, or to update it based on my desired state.

  • as an appliance vendor, I build an edge appliance that bundles Kubernetes as a way to manage components. I make a custom version of Headlamp and have it serve as the administrative console for the appliance. Customers using the appliance can install addons that integrate with the main admin console.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I think the 2nd and 3rd suggestions here are already covered by Story 4, in that a Headlamp plugin can be used for a variety of goals (like using a different control plane, or as an admin console for an appliance), besides the actual user interfaces associated with it. Should we write these suggestions as examples in this story, or do you think they are not covered by our stories we should have it more explicitly?

About the 1st suggestions, can you elaborate a bit? Are you saying a CRD has info on what specific Headlamp plugin that is associated with it? This could be a good idea actually: e.g. Headlamp checks CRDs for a specific spec that indicates what plugin is associated with it (if any) and suggest to the user that they may install it (if not yet installed).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm imagining an addon manager that deploys lots of elements for an addon: the CRD, the operator / controller, the Headlamp plugin, and more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe there is an API kind named HeadlampPlugin, a bit like the Prometheus operators has an API kind named ServiceMonitor.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Being able to deploy a Headlamp plugin via an operator would be a nice (eventual) touch, I think.

Copy link
Member

@floreks floreks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, I think that Headlamp will be a great addition to the SIG-UI. The only requirements in my opinion for introducing new projects should be:

  • Adds value to the community
  • Is actively maintained

I think that both of these are met here.

Comment on lines 230 to 243
### Existing Dashboard project

The Kubernetes project already has a Dashboard project. However, we think that
the Headlamp project has a number of advantages that make it a great solution
to build on going forward. Some of these are:
* Has a robust plugin system for customization and integrations
* Supports both desktop and in-cluster mode
* Is under very active development and has dedicated resources assigned to it
in addition to the active external contributors
* Is built on a very common technology stack (Typescript, React, Material UI,
Vite, Go)
* Has more advanced features (multi-cluster, graph view, powerful plugin
system, 3rd party plugins)
* Addresses many more use cases (see below)
Copy link
Member

@floreks floreks Jan 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you would want to keep this, then I think that this should be a comparison. In its current form, it only describes the advantages over Kubernetes Dashboard and does not mention any differences and/or potential disadvantages/missing features.

It should also mention the difference in features. Some of them would be:

  • Reverse auth proxy support
  • Impersonation options through headers
  • Lazy search with a time window where it can search through stale data
  • Whole logic execution and load is shifted towards the user machine from the hosted backend instance

There is also a side effect of fully exposing a raw Kubernetes API server whenever Headlamp is hosted as a generally available web app via <headlamp_url>/clusters/<cluster_name>/<kubernetes API endpoint>. This is because the backend only acts as a proxy and WS multiplexer to the K8S API. It might be worth mentioning as some users might not be aware of that.

In addition to that I would also love to see a high-level architecture comparison. IMHO it is important for the potential users to know about frontend-as-backend architecture where backend is mostly for handling websocket connections and multiplexing. The advantages and disadvantages of such an architecture too.

Most of the mentioned points are fine. Technology stack is almost identical but it's still nice to have it written down.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. Showing only the advantages of Headlamp without mentioning any drawbacks sounds wrong to me. To make the comparison fair it should also explain trade-offs that come with Headlamp architecture as well.

Comment on lines 282 to 284
The proposal is to ship the Headlamp desktop experience as a new Kubernetes
Desktop and the Headlamp in-cluster UI to eventually become the next generation
of the Kubernetes Dashboard.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This somewhat contradicts the non-goal. I'd suggest changing it to: "The proposal is to ship the Headlamp desktop experience as a new Kubernetes Desktop and the Headlamp in-cluster UI" and focus on the onboarding of the new project only.

Comment on lines 290 to 293
The current repo kubernetes/dashboard would remain but include a note about the
existence of the other repo. This would allow for users to compare the projects
and make an informed decision about which works best for their use case. Over
time, we can measure adoption trends and make decisions based on that data.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we already discussed, this will be a separate project under the same SIG. Neither one needs to mention the other projects directly in the project repo. It should be listed in: https://github.com/kubernetes/community/tree/master/sig-ui and also the official kubernetes docs.

Comment on lines +327 to +322
_**Note:** We have the minikube installer plugin in POC but the tutorial plugin
is not something we currently have._
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd only mention shipped features here and introduce a Roadmap section that will cover future work and planned features.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the goal here is to highlight the possibility of having local clusters provisioned due to the plugin system supporting (desktop only) running local tools, which is something that we already support when enabled. The minikube part is an example of this, and we happen to be working on that, but it's not yet complete, so that's mentioned here too.

Copy link
Member

@maciaszczykm maciaszczykm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think bringing Headlamp to the Kubernetes organization is a great idea. It gives users to more options and hopefully allow Headlamp to grow even more. I think the document requires some updates but I really like the idea.

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: joaquimrocha
Once this PR has been reviewed and has the lgtm label, please assign johnbelamaric for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants