DEV Community

Cover image for 2024: A new frontier for Kubernetes package management
Jake Page for Glasskube

Posted on

2024: A new frontier for Kubernetes package management

2024 has been an action-packed year for Glasskube. In February, we launched a Kubernetes manager that was initially developed internally by our team following an unsuccessful product launch that failed to take off in part due to limitations in currently used package management tooling. After this lukewarm Kubernetes operator debut, Glasskube founders Philip and Louis shared their launch post-mortem on Hacker News. They discovered that many others were experiencing similar frustrations with the existing package management solutions for Kubernetes. Recognizing this shared pain, a product pivot became inevitable, and the Glasskube package manager began to take shape.

the-start

Now, it’s only mid-August of the same year, and we are already closing in on 1.5 million downloads, 2.6k GitHub stars, and 50+ contributors. We've witnessed significant growth in adoption, features, and use cases. As we continue to evolve, we wanted to take a moment to reflect on the work we've accomplished so far. This blog post serves as a comprehensive update, a flag in the road, to share everything you need to know about the current state of Glasskube, what’s on the horizon, and how you can help shape the future of Kubernetes package management.

Welcome to the new frontier of Kubernetes Package Management.

Introduction

Why Kubernetes needs better package management

Since its inception Kubernetes as a container orchestration system has never stopped growing in popularity and its adoption keeps increasing. In recent years, the number of available packages has grown from about 100 to over 800. This growth by all means is very impressive and shows the maturity of the Kubernetes ecosystem, but it has also shined a light on the problems with current package management tools. Developers often struggle with:

  • Complex and highly bespoke workflows

  • Time-consuming and many times manual processes

  • An over-reliance on current package manager tooling that leave a lot to be desired.

These issues can lead to:

  • More work for operations teams

  • Non-scalable workflows

  • Possible security risks

It's clear that Kubernetes needs a way to manage packages that evolve in the way that modern-day Kubernetes clusters are used, that is in a more automated and overall declarative way.

What is Glasskube?

Glasskube is an open-source package manager made for Kubernetes. It aims to make installing, updating, and setting up packages easier and faster. In fact, it can be up to 20 times quicker than tools like Helm or Kustomize.

Glasskube took ideas from easy-to-use package managers like Homebrew and npm. It offers two ways to manage packages:

A graphical user interface (GUI)

Glasskube-UI

A command-line interface (CLI)

glasskube serve # to access the Glasskube UI
Enter fullscreen mode Exit fullscreen mode

Current tools: Helm and Kustomize

Helm and Kustomize are two main tools for managing Kubernetes packages. They help set up and run applications in Kubernetes, but work differently.

Helm uses templates to create Kubernetes yaml files. It packages apps into "charts," which are sets of YAML files. Some of it’s benefits are:

  • Configuring complex apps

  • It shines at app installation

  • Rolling back changes is straightforward

  • It’s highly adopted

Kustomize takes a different approach and many times works in conjunction with Helm. It lets users:

  • Set up basic app configurations

  • Add changes for different environments

  • Avoid complex templating

Problems with existing tools

While Helm and Kustomize are useful, they can cause issues for developers.

Helm can be tricky:

  • Hard to learn due to complex templates

  • Customizing apps for different setups can be confusing

  • CRD updates are not possible

  • Updates are clunky

  • Helm is inherently one-sided, after installation its job is done.

Kustomize has its own problems:

  • No built-in way to manage packages

  • Users need other tools to share their setups

  • Handling complex dependencies can be hard

  • Less automated than Helm for managing app lifecycles

These issues show why a simpler package manager for Kubernetes is needed. This is where Glasskube comes in, aiming to make the whole process easier.

Care to support us?

If this is the first time you've heard of Glasskube, we are working to build the next-generation Package Manager for Kubernetes.

If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.

star-gif

⭐️ Star us on GitHub 🙏

Glasskube explained

How Glasskube works

Glasskube makes managing Kubernetes packages easier. It offers two ways to use it:

  1. A graphical interface (GUI)

  2. A command-line interface (CLI)

Glasskube uses a central package repository called the Glasskub Hub that:

  • Aware of package dependencies

  • Works well with GitOps

  • Updates packages automatically

  • Allows for multiple public and private package repositories to be referenced

glasskube-archetecture

Probably most importantly, Glasskube has client and server-side components. The server-side components constantly track the health status and desired state of the installed packages. The server-side components are the:

  • PackageController: communicates with the Kubernetes API to deploy and reconcile packages.

  • PackageInfoController: reads package manifests from the configured backend package repositories to determine the state of truth of the cluster packages.

Main features

Glasskube has several key features:

main-features

Solving common issues

Glasskube directly addressed gaps that other Kubernetes package managers have:

  • It's easier to use than Helm, which can be hard for new users

  • It handles dependencies better than Kustomize, which doesn't have built-in package management

  • It works well with GitOps, making it easier to:

    • Roll back changes
    • Upgrade apps
    • Work together as a team
  • Package scopes help to be more efficient with package installation and package sharing. Ex. if multiple packages depend on cert-manager, one instance will be enough to serve more than one package.

  • Have easy access to packages with frontends without having to manually portforward

How to set up Glasskube

What you need to install

Before you start, make sure you have:

  • A working Kubernetes cluster, minikube is an easy alternative for a quick local setup.

  • kubectl installed on your computer

Step-by-step installation guide

Here's how to set up Glasskube:

Install Glasskube CLI: Open your terminal and run on MacOs:

brew install glasskube/tap/glasskube
Enter fullscreen mode Exit fullscreen mode

For other installation methods click here.

Bootstrap Glasskube to install the server-side components by running:

glasskube bootstrap
Enter fullscreen mode Exit fullscreen mode

Check the installation Run:

glasskube version
Enter fullscreen mode Exit fullscreen mode

Make sure both Glasskube and the package-operator are installed and running the same version:

glasskube: v0.17.0
package-operator: v0.17.0
Enter fullscreen mode Exit fullscreen mode

Using Glasskube: Key functions

Access the GUI

Glasskube makes it easy to add and remove packages in your Kubernetes cluster:

To add a package:

glasskube serve
Enter fullscreen mode Exit fullscreen mode

Install packages

Any package available in the Glasskube hub is ready to be installed

glasskube install <package-name>

Enter fullscreen mode Exit fullscreen mode

This command will then request confirmation on the package version before installing.

To remove a package:

glasskube uninstall <package-name>
Enter fullscreen mode Exit fullscreen mode

Managing package dependencies

Glasskube takes care of package dependencies for you:

  • When you install a package, it automatically installs any required dependencies

  • This saves time and prevents errors from missing components

In the example below upon installing the keptn package, an instance of cert-manager will also be installed if not already present in the cluster.

keptn-dependency

Handling package configurations

You can easily change or view package settings with Glasskube, note that not all packages have custom value configurations:

In the example below, the caddy-ingress-controller has the automaticHTTPS value exposed, where you can add an email address to enable HTTPS functionality.

dependency-management

Working with GitOps

Glasskube works well in GitOps workflows, letting users control their Kubernetes packages desired state in Git means:

  • Your Kubernetes package setup stays in sync with your files stored in Git

  • You can use tools like ArgoCD or Flux to apply the desired package state stored in Git

  • Changes are easy to track and undo if needed

  • Cluster setup can be achieved in minutes instead of hours.

We have a fully operational Glasskube GitOps template here. Follow the steps in the README.md file to get started.

Automatic updates with Renovate

Glasskube keeps packages in Glasskube hub always updated to the latest stable versions:

  • Enable auto-updates or get notified when new versions are available

  • Shows package information including the current version and available versions for packages using glasskube list

  • Running glasskube update <packageName> will install the newest available version of the package

  • Also updating manually through the GUI is also an option.

open-button

Adding custom package repositories

You can now add multiple package repositories for Glasskube to read from, this is be useful for:

  • Companies that have their own private package lists

  • Teams who want to manage internal packages more easily

  • It allows following compliance rules for private packages that can’t be exposed publicly

Add a public repository by running:

glasskube repo add <name> <url>
Enter fullscreen mode Exit fullscreen mode

Add private repositories

glasskube repo add <name> <url> --auth (none|basic|bearer)
Enter fullscreen mode Exit fullscreen mode

multi-repo-diagram

Glasskube vs. other package managers

How it differs from Helm and Kustomize

Glasskube offers a new way to manage Kubernetes packages, addressing limitations found in older tools like Helm and Kustomize. It offers features such as two-way communication between the package and package manager, enhanced automation, and a more declarative approach to package management. Here's how Glasskube stands out:

  • Automatic Notifications: Glasskube keeps track of installed versions and can automatically notify users of new installations, if desired.

  • Seamless CRD Updates: It updates Custom Resource Definitions (CRDs) smoothly, ensuring everything remains in sync.

  • Full GitOps Integration: Glasskube enables a complete GitOps workflow, which wasn't possible before.

  • Efficient Control: The additional layer of abstraction through package scopes allows for more efficient and granular control over package configuration and usage.

Business service offerings

Companies that offer commercial tools with self-hosting options often leave money on the table. Custom self-hosting installations and management might not be within your company’s expertise or bandwidth. A Glasskube Native package can be the solution you need. We can collaborate with you to create standardized, customizable, and highly scalable packages tailored for a variety of self-hosted environments, all using Glasskube packaging. This approach ensures a seamless experience for your customers while maximizing your revenue potential.

Business-service-offerings

If you think that Glasskube Native packages could benefit your business, book a free demo call with us. Our team would be delighted to assist you.

What's next for Glasskube

New features coming soon

Glasskube is adding new tools to make package management easier:

new-features

These new features will help users manage their Kubernetes packages better.

Wrap-up

Kubernetes package management has been stagnant and unable to keep up with the fast growth and evolution of the general Kubernetes ecosystem. Glasskube aims to make Kubernetes package management easier, more declarative, flexible and far less reliant on rigid templating processes that require multiple tools to get the job done.

As Glasskube grows, we will need help from users and developers to build in the right direction. What frustrates you the most about current Kubernetes package managers? How can we improve?

For teams using Kubernetes, we hope tools like Glasskube will be increasingly adopted and applied in complex environments.

2024 has been an incredible breakout year so far, but we have only just begun.


If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.

giff

⭐️ Star us on GitHub 🙏

Top comments (4)

Collapse
 
nevodavid profile image
Nevo David

Glasskube > Helm

Collapse
 
the_greatbonnie profile image
Bonnie

Great article, Jake.

Collapse
 
jakepage91 profile image
Jake Page

Thanks Bonnie!

Collapse
 
fernandezbaptiste profile image
Bap

Enjoyable read!