Skip to main content

Bootstrap simple projects on Kubernetes with kind, k3d, and k3s. this is an alpha release

Project description

smol k8s lab 🧸 Now with more :squid:

A tool to run slimmer k8s distros on metal, with batteries included. Deploys Argo CD by default, so you can mange your entire local testing lab from the very beginning using files in open source git repos, and with the help of a very handy dashboard.

Also helpful for benchmarking various k8s distros! 💙

Output of smol-k8s-lab --help after cloning the directory and installing the prerequisites.

Installation

smol-k8s-lab requires Python 3.11. If you've already got it and brew installed, you should be able to:

# install the CLI
pip3.11 install smol-k8s-lab

# Check the help menu before proceeding
smol-k8s-lab --help

Usage

Initialization

After you've followed the installation instructions, if you're new to smol-k8s-lab, initialize a new config file. To do that, just run:

# we'll walk you through any configuration needed before saving the config and deploying it for you
smol-k8s-lab

Upgrading to v1.x

If you've installed smol-k8s-lab prior to v1.0.0, please backup your old configuration, and then remove the ~/.config/smol-k8s-lab/config.yaml (or $XDG_CONFIG_HOME/smol-k8s-lab/config.yaml) file entirely, then run the following:

# this upgrades smol-k8s-lab
pip3.11 install --upgrade smol-k8s-lab

# this initializes a new configuration
smol-k8s-lab

v2.0.0a is available for testing but docs and screenshots are still under development. ETA is about 2 weeks for those to be complete and the official 2.0.0 to be launched, which will support a full TUI and a range of new options in the config file.

Creating a new config without running smol-k8s-lab

This is helpful if you just want to take a look at the default configuration before installing any Kubernetes distros. This will also allow you to disable any default applications you'd like ahead of time.

# create the needed directory if you haven't already, NOTE: this can also be in $XDG_CONFIG_HOME/smol-k8s-lab/config.yaml
mkdir -p ~/.config/smol-k8s-lab

# download the default config file
curl -o config.yaml https://raw.githubusercontent.com/small-hack/smol-k8s-lab/main/smol_k8s_lab/config/default_config.yaml

# move the config file to the config directory (can also be $XDG_CONFIG_HOME/smol-k8s-lab/config.yaml)
mv config.yaml ~/.config/smol-k8s-lab/config.yaml

You can now use your text editor of choice to view and edit the default config before running smol-k8s-lab :)

Configuration

You can checkout the default config file here. We've also got a Quickstart guide for you to jump right in :)

Adding custom Applications

You can create any application you already have an Argo CD application repo for, by following a simple application YAML schema in ~/.config/smol-k8s-lab/config.yaml like this:

apps:
  # name of application to create in Argo CD
  cert_manager:
    # if set to false, we ignore this app
    enabled: true
    argo:
      # secret keys to pass to Argo CD Application Set Generator
      secret_keys:
        # Used for letsencrypt-staging, to generate certs. If set to "" and cert-manager.enabled is true
        # smol-k8s-lab will prompt for this value and save it back to this file for you.
        email: ""
      # If set to "", we'll instead use the repo, path, ref, namespace, and project_source_repos
      # else we'll skip installing this app b/c its part of another app of apps with this name.
      part_of_app_of_apps: ""
      # git repo to install the Argo CD app from
      repo: "https://github.com/small-hack/argocd-apps"
      # path in the argo repo to point to. Trailing slash very important!
      path: "ingress/cert-manager/"
      # either the branch or tag to point at in the argo repo above
      ref: "main"
      # namespace to install the k8s app in
      namespace: "ingress"
      # source repos for cert-manager CD App Project (in addition to cert-manager.argo.repo)
      project_source_repos:
        - https://charts.jetstack.io

Note: the above application, cert-manager, is already included as a default application in smol-k8s-lab :)

Under the hood

Note: this project is not officially affiliated with any of the below tooling or applications.

Supported k8s distributions

We always install the latest version of Kubernetes that is available from the distro's startup script.

Distro Description

k3s
The certified Kubernetes distribution built for IoT & Edge computing

k3d
ALPHA - TESTING PHASE k3s in docker 🐳

KinD
kind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.

We tend to test first on k3s first, then the other distros. k3d support coming soon.

Default Installed Applications

Version is the helm chart version, or manifest version.

Application Description Initialization Supported
metallb logo, blue arrow pointing up, with small line on one leg of arrow to show balance
metallb
Loadbalancer and IP Address pool manager for metal Yes
nginx logo, white letter N with green background
ingress-nginx
The ingress controller allows access to the cluster remotely, needed for web traffic No
cert manager logo
cert-manager
For SSL/TLS certificates Yes
argo CD logo, an organer squid wearing a fishbowl helmet
Argo CD
Gitops - Continuous Deployment Yes
argo CD logo, an organer squid wearing a fishbowl helmet
Argo CD Appset Secret Plugin
Gitops - Continuous Deployment Yes
ESO logo, outline of robot with astricks in a screen in it's belly
ESO
external-secrets-operator integrates external secret management systems like Bitwarden or GitLab No
ESO logo, again
Bitwarden ESO Provider
Bitwarden external-secrets-operator provider Yes
Zitadel logo, an orange arrow pointing left
Zitadel
An identity provider and OIDC provider to provide SSO Yes
Vouch logo, the letter V in rainbow
Vouch
Vouch proxy allows you to secure web pages that lack authentication e.g. prometheus Yes
Prometheus logo, a torch
Prometheus Stack
Prometheus monitoring and logging stack using loki/promtail, alert manager, and grafana Yes

Minor Notes

All Default Applications can be disabled through your ~/.config/smol-k8s-lab/config.yaml file, except:

1. ingress-nginx is the currently the only supported ingress-controller. traefik support is being worked on.

2. Argo CD is optional, but if not installed, smol-k8s-lab will only install: MetalLB, nginx-ingress, and cert-manager

Optionally Installed Applications

Application/Tool Description Initialization Supported
cilium logo
Ciliumalpha
Kubernetes netflow visualizer and policy editor Yes
kyvero logo
Kyvernoalpha
Kubernetes native policy management to enforce policies on k8s resources No
keycloak logo
KeyCloakalpha
Self hosted IAM/Oauth2 solution Yes
kepler logo
kepler
Kepler (Kubernetes Efficient Power Level Exporter) uses eBPF to probe energy-related system stats and exports them as Prometheus metrics. Yes
k8up logo, a minimalist logo of a small blue hill with line starting the right going into the hill
k8up
Backups operator using restic to backup to s3 endpoints Yes
k8tz logo, the k8s logo but with a watch in the center instead of the ship wheel
k8tz
Timezone environment variable injector for pods and cronjobs Yes
nextcloud logo, 3 white circles touching eachother on a blue background
Nextcloud
Nextcloud is a self hosted file server Yes
Mastodon logo, a white M in a purple chat bubble
Mastodon
Mastodon is a self hosted federated social media network Yes
Matrix logo
matrix
Matrix is a self hosted chat platform Yes
minio logo, a minimalist drawing in red of a crane
minio
Self hosted S3 Object Store operator Yes
k9s logo, outline of dog with ship wheels for eyes
k9s
Terminal based dashboard for Kubernetes Yes

Troubleshooting

If you're stuck, checkout the Notes to see if we also got stuck on the same thing at some point :) Under each Kubernetes distro or application, we'll have notes on how to learn more about it, as well as any errors we've already battled.

Status

This is still in later alpha, as we figure out all the apps and distros we want to support, and pin all the versions, but if you'd like to contribute or just found a :bug:, feel free to open an issue (or pull request), and we'll take a look! We'll try to get back to you asap!

Development

smol-k8s-lab is written in Python and built and published using Poetry. You can check out the pyproject.toml for the versions of each library we install below:

  • rich (this is what makes all the pretty formatted text)
  • PyYAML (to handle the k8s yamls and configs)
  • bcrypt (to pass a password to argocd and automatically update your Bitwarden)
  • click (handles arguments for the CLI)

We also utilize the Bitwarden cli, for a password manager so you never have to see/know your argocd password.

And more!

Want to get started with argocd? If you've installed it via smol-k8s-lab, then you can jump here. Otherwise, if you want to start from scratch, start here

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smol_k8s_lab-2.0.0a0.tar.gz (138.6 kB view hashes)

Uploaded Source

Built Distribution

smol_k8s_lab-2.0.0a0-py3-none-any.whl (185.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page