Kubernetes management with Nix https://kubenix.org/
Find a file
2023-06-11 23:01:19 -04:00
.github/workflows actions: build pages on module changes 2023-01-04 13:18:48 -05:00
.vscode create static docs site with module options 2022-08-28 15:22:43 -04:00
docs docs: add helm section on patching resources 2023-06-11 23:01:19 -04:00
jobs flake: format 2023-06-03 03:11:07 -04:00
lib flake: format 2023-06-03 03:11:07 -04:00
modules flake: format 2023-06-03 03:11:07 -04:00
pkgs pass --show-trace to nix with debug flag 2023-01-18 00:26:03 -05:00
tests tests: temp disable import test 2023-01-28 11:47:19 -05:00
.envrc remove flake-compat and devshell inputs 2022-08-13 00:09:36 -04:00
.gitignore cleanup some misc files 2022-08-12 09:44:26 -04:00
.gitmodules create static docs site with module options 2022-08-28 15:22:43 -04:00
CONTRIBUTING.md add examples to docs site 2022-08-29 02:04:47 -04:00
default.nix add missing kube version, move jobs to packages 2022-08-15 00:29:27 -04:00
flake.lock add missing kube version, move jobs to packages 2022-08-15 00:29:27 -04:00
flake.nix flake: format 2023-06-03 03:11:07 -04:00
LICENSE feat: add license 2019-03-07 23:30:20 +01:00
README.md add examples to docs site 2022-08-29 02:04:47 -04:00
treefmt.toml create static docs site with module options 2022-08-28 15:22:43 -04:00
versions.nix bump kubernetes versions 2023-01-04 11:51:43 -05:00

kubenix

Kubernetes management with Nix

nixos logo in kubernetes blue

WARN: this is a work in progress, expect breaking changes

Usage

A minimal example flake (build with nix build):

{
  inputs.kubenix.url = "github:hall/kubenix";
  outputs = {self, kubenix, ... }@inputs: let
    system = "x86_64-linux";
  in {
    packages.${system}.default = (kubenix.evalModules.${system} {
      module = { kubenix, ... }: {
        imports = with kubenix.modules; [k8s];
        kubernetes.resources.pods.example.spec.containers.nginx.image = "nginx";
      };
    }).config.kubernetes.result;
  };
}

Or, if you're not using flakes, a default.nix file (build with nix-build):

{ kubenix ? import (builtins.fetchGit {
  url = "https://github.com/hall/kubenix.git";
  rev = "aa734afc9cf7a5146a7a9d93fd534e81572c8122";
}) }:
(kubenix.evalModules.x86_64-linux {
  module = {kubenix, ... }: {
    imports = with kubenix.modules; [k8s];
    kubernetes.resources.pods.example.spec.containers.nginx.image = "nginx";
  };
}).config.kubernetes.result

Either way the JSON manifests will be written to ./result.

See the examples for more.

CLI

NOTE: this is a WIP CLI which currently reads the k8s package on a local flake

Render all resources with

nix run github:hall/kubenix -- render

HINT: use --help for more commands

Support

The following table gives a general overview of currently supported/planned functionality.

kubectl kustomize helm helmfile
render x x1
diff x x
apply2 x x

Attribution

This project was forked from GTrunSec, which was forked from xtruder, with commits incorporated from blaggacao.

Logo is a mishmash of the Kubernetes wheel and the NixOs snowflake.


  1. piping rendered helm charts to kubectl is a lossy process (e.g., hooks will not work) ↩︎

  2. currently create-only ↩︎