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! 💙
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.0a1
is available for testing but docs and screenshots are still under development. ETA is about 1-2 weeks for those tests 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. To begin testing that release (or other pre-releases) you can do:
pip install smol_k8s_lab==2.0.0a1
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 |
Loadbalancer and IP Address pool manager for metal | Yes |
ingress-nginx |
The ingress controller allows access to the cluster remotely, needed for web traffic | No |
cert-manager |
For SSL/TLS certificates | Yes |
Argo CD |
Gitops - Continuous Deployment | Yes |
Argo CD Appset Secret Plugin |
Gitops - Continuous Deployment | Yes |
ESO |
external-secrets-operator integrates external secret management systems like Bitwarden or GitLab | No |
Bitwarden ESO Provider |
Bitwarden external-secrets-operator provider | Yes |
Zitadel |
An identity provider and OIDC provider to provide SSO | Yes |
Vouch |
Vouch proxy allows you to secure web pages that lack authentication e.g. prometheus | Yes |
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 |
---|---|---|
Ciliumalpha |
Kubernetes netflow visualizer and policy editor | Yes |
Kyvernoalpha |
Kubernetes native policy management to enforce policies on k8s resources | No |
KeyCloakalpha |
Self hosted IAM/Oauth2 solution | Yes |
kepler |
Kepler (Kubernetes Efficient Power Level Exporter) uses eBPF to probe energy-related system stats and exports them as Prometheus metrics. | Yes |
k8up |
Backups operator using restic to backup to s3 endpoints | Yes |
k8tz |
Timezone environment variable injector for pods and cronjobs | Yes |
Nextcloud |
Nextcloud is a self hosted file server | Yes |
Mastodon |
Mastodon is a self hosted federated social media network | Yes |
matrix |
Matrix is a self hosted chat platform | Yes |
minio |
Self hosted S3 Object Store operator | Yes |
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
Built Distribution
Hashes for smol_k8s_lab-2.0.0a2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26a03a0a57b89ebbfee4fb4681ccdb8cd77cc0398d6a6dec465d691c8ff3e3ab |
|
MD5 | 7bf49c1fde59dc8dd585a07cc67a2660 |
|
BLAKE2b-256 | 6ca97a77693361df617ac2e73d83e1a64a6565ca7bd455f0be69b11e14e80146 |