Show HN: Glasskube – Open Source Kubernetes Package Manager, alternative to Helm
The GitHub repository for Glasskube, a Kubernetes package manager, offers a user-friendly CLI/UI, package management, secure updates, GitOps integration, reactions/comments, and support for private packages. It includes installation guides, architecture, support channels, and contribution guidelines.
Read original articleThe GitHub repository at the provided URL pertains to Glasskube, an open-source package manager designed for Kubernetes. It boasts features like a user-friendly CLI and UI, package configurations, dependency management, secure package updates, reactions and comments, GitOps integration, support for multiple repositories, and private packages. The repository contains details on various aspects including features, a beta version installation guide, supported packages, architecture diagram, support channels, related projects, contribution guidelines, acknowledgments to contributors, project activity, and licensing information. For additional information or support regarding Glasskube, users are encouraged to inquire within the repository.
Related
React Lua
The GitHub repository focuses on translating ReactJS 17.x into Lua for Roblox and Lua community. It aims for performance and accuracy, welcoming contributions from notable developers like Paul Doyle and Matt Hargett.
Bomb Jack display hardware
The GitHub URL provides an automated tool for updating package and stock codes in Proteus Design Tool. It offers guidance on tool usage. For more details or support, request additional information.
Show HN: Feedback on Sketch Colourisation
The GitHub repository contains SketchDeco, a project for colorizing black and white sketches without training. It includes setup instructions, usage guidelines, acknowledgments, and future plans. Users can seek support if needed.
Komorebi: Tiling Window Management for Windows
The "komorebi" project is a tiling window manager for Windows, extending Microsoft's Desktop Window Manager. It offers CLI control, installation guides, configuration details, and a supportive community for contributions and discussions.
Show HN: Triplit – Open-source syncing database that runs on server and client
The GitHub URL provides details on `@changesets/cli`, a tool for versioning and publishing code in multi-package and single-package repositories. Full documentation and common questions are accessible in their repository.
Think of an ArgoCD ApplicationSet that generates a bunch of Applications. Those Applications render a bunch of Helm charts, and inside those charts there are CRDs used by some random operator like Strimzi, Grafana or Vector.
Given YAML's lack of syntax and the absense of any sort of standard for rendering templates, it's practically impossible to know what are the actual YAML being injected in the Kubernetes API when you make a top-level change. It's trial and error, expensive blue-green deployments and hundreds of debugging minutes all the way, every month.
However things like helmfile with renovate paired with a pipeline is my personal preference even if just for ensuring things remain consistent in a repo.
The `update all` button for instance seems terrifying on a cluster that means anything at all. None the less it's still cool for personal projects and the like!
The package controller reminds me a lot of Helm tiller with older versions of helm, and it became a big security issue for a lot of companies, so much so that helm3 removed it and did everything clientside via configmaps. Curious how this project plans on overcoming that.
Even with all that said, operating system packages require a vast amount of testing, development, and patching, constantly, even within those small parameters. Packages feel easy because potentially hundreds of hours of development and testing have gone into that package you're installing now, on that platform you're on now, with the components and versions you have now.
Kubernetes "packages" aren't really packages. They are a set of instructions of components to install and configure, which often involves multiple distinct sets of applications. This is different in a couple ways: 1) K8s "packages" are often extremely "loose" in their definition, leading to a lot of variability, and 2) they are built by all kinds of people, in all kinds of ways, making all kinds of assumptions about the state of the system they're being installed into.
There's actually multiple layers of dependencies and configuration that have to come together correctly for a Kubernetes "package" to work. The K8s API version has to be right, the way the K8s components are installed and running have to be right, the ACLs have to be right, there has to be no other installed component which could conflict, the version of the components and containers being installed by the package need to be pinned (and compatible with everything else in the cluster), and the user has to configure everything properly. Upgrades are similarly chaotic, as there's no sense of a stable release tree, or rolling releases. It's like installing random .deb or .rpm or .dmg files into your OS and hoping for the best.
Nothing exists that does all of this today. To make Kubernetes packaging as seamless as binary platform-specific packaging, you need an entire community of maintainers, and either a rolling-release style (ala Homebrew) or stable versioned release branches. You basically need a project like ArtifactHub or Homebrew to manage all of the packages in one way. That's a big undertaking, and in no way profitable.
The main pains remain unaddressed
- authoring helm charts sucks
- managing different values per environment
- connecting values across charts so I don't have to
One immediate question: Your docs say "Upgrading CRDs will be taken care of by Glasskube to ensure CRs and its operators don't get out-of-sync." but searching for "CRD" in your docs doesn't lead to any concrete results.
This is one of our biggest pain ponts with Helm right now. Can you share your plans?
By analogy, this is the same issue as frontend programming faces with the DOM. Introducing a VDOM / reducer paradigm (like react) would go a long way towards solving these problems.
Kubernetes is not intended to be something you use with no background. It’s hard, and without making a full blown PaaS there’s no getting away from that complexity.
This has very little to do with helm. For me helm is primarily not a package manager, its a templating language and a way of configuring and installing it to a k8s cluster happens through kubeapps, helm cli or argocd.
This approach also kills for me the really awesome IaC paradigma: I bootstrap ArgoCD and after that, reference only git repos.
Your demo doesn't talk about HOW someone would use your templating features (like your 'form' support) but shows everything besides that.
I honestly like this as i'm still having the feeling that something is wrong with helm, but the way you are approaching it, i think it will fail. It will not gain enough traktion as bigger companies do not need your tooling. Kubeapps works really well and helm too (you want to replace helm, you probably will keep the helm support in there for a long time).
The problems helm have is: its getting convoluted when helm charts become big. The templating folder is a shit place for basically having everything in there, yaml is not that good for templating and values.yamls become way to big.
Feel free to disregard, but it would help me understand if you briefly explain how this fits in with / compares to existing tools like argocd.
I watched your video and I saw that argo was one of the tools you were installing, so clearly this is occupying a different niche - But I'm not sure what that is yet :)
It sounds like your pitch is focused on users, but I think you might want to think about how to attract a package ecosystem. Some things that would make my life easier as a packager:
* Statically typed config language. It's insane that we're generating YAML files with Go templates. I'm a big fan of jsonnet, but whatever it is it should not be possible to have errors at runtime.
* A better way to document to users the various options and how they play together. For any moderately complex package it become very challenging to communicate how to configure the chart for your environment
* Better testing infrastructure; am I creating valid k8s resources given all of the possible configuration options?
What was really annoying was the constant moving and changing the yaml that kubernetes wanted. After you update your cluster and things stop working, it's really not about the layers on top, but it's about kubernetes and having to keep up with the new beta versions and also sunsetting other things.
One can throw Flux and Git* actions or what not in the mix. The outcome is a boring CI/CD implementation. Boring is good. Boring and powerful because of how Jsonnet works.
It's pretty neat in the right hands.
That being said, I'm confused as to where Glasskube is positioned in solving this problem. In the title of this post, you are claiming Glasskube is an "alternative to Helm"; although in your documentation you have a "Glasskube vs Helm" guide that explicitly states that "Glasskube is not a full replacement of Helm". I'm trying to understand how these two statements can be true. To make things more confusing, under the hood Glasskube repositories appear to be a repackaging of a Helm repository, albiet with a nicer UI.
From what I've gathered after reading the docs, Glasskube is being positioned as an easier way to interact with Helm charts - offering some easy-to-use tooling for upgrades and dependency management. To me, that doesn't exactly feel like it replaces Helm, but simply supplements my use of it, because it doesn't actually combat the real problems of using Helm.
My biggest pain points, some of which I don't think Glasskube is addressing, that I think are at the crux of switching off Helm:
- The arbitrary nature of how value files are laid out - every chart appears to have its own standards for which fields should be exposed and the nomenclature for exposing them
- Helm releases frequently get stuck when updating or rolling back, from which they can't be fixed without needing to be uninstalled and reinstalled
- I need to reference the Helm chart values file to know what is exposed and what values and types are accepted (Glasskube schema'd values files does address this! Yay!)
Apart from the Helm chart values schema, I don't think Glasskube solves these fundamental problems. So I'm not sure why I would spend the large amount of effort to migrate to this new paradigm if the same problems could still cause headaches.
Lastly, I would also concur with @llama052's comment, that an "update all" button will always be forbidden in my, and probably most other, companies. Considering the serious lack of standardisation that comes with Helm chart versioning (whether the app version changes between charts, whether roles or role bindings need to be updated, whether values have been deprecated or their defaults have changed, etc.), it's incredibly risky to update a Helm chart without understanding the implications that come with it. Typically our engineers have to review the release notes for the application between the two Helm chart versions, at least test in dev and staging for a few days, and only then can we feel comfortable releasing the changes - one chart at a time. Not to mention that if you are in charge of running a system with multiple applications, you probably want to use GitOps, and in that case a version upgrade would require a commit to the Git repository and not just a push of a button on the infra IDP.
If I need a better GUI anywhere, it’s probably in EKS, or something that makes working with EKS a bit less painful.
Related
React Lua
The GitHub repository focuses on translating ReactJS 17.x into Lua for Roblox and Lua community. It aims for performance and accuracy, welcoming contributions from notable developers like Paul Doyle and Matt Hargett.
Bomb Jack display hardware
The GitHub URL provides an automated tool for updating package and stock codes in Proteus Design Tool. It offers guidance on tool usage. For more details or support, request additional information.
Show HN: Feedback on Sketch Colourisation
The GitHub repository contains SketchDeco, a project for colorizing black and white sketches without training. It includes setup instructions, usage guidelines, acknowledgments, and future plans. Users can seek support if needed.
Komorebi: Tiling Window Management for Windows
The "komorebi" project is a tiling window manager for Windows, extending Microsoft's Desktop Window Manager. It offers CLI control, installation guides, configuration details, and a supportive community for contributions and discussions.
Show HN: Triplit – Open-source syncing database that runs on server and client
The GitHub URL provides details on `@changesets/cli`, a tool for versioning and publishing code in multi-package and single-package repositories. Full documentation and common questions are accessible in their repository.