diff --git a/config/k3s/default.nix b/config/k3s/default.nix index 65e337e36..1e06be319 100644 --- a/config/k3s/default.nix +++ b/config/k3s/default.nix @@ -1,17 +1,22 @@ { - config, lib, pkgs, ... }: { - # k3s config file stored in home directory home.file.".config/k3s/config.yaml" = lib.mkIf pkgs.stdenv.isLinux { source = ./config.yaml; force = true; }; - # Activation script to sync config to /etc/rancher/k3s/ + home.file.".config/k3s/k3s.service" = lib.mkIf pkgs.stdenv.isLinux { + source = pkgs.replaceVars ./k3s.service { + inherit (pkgs) coreutils; + k3s = pkgs.k3s; + }; + force = true; + }; + home.activation.k3s-config = lib.mkIf pkgs.stdenv.isLinux ( lib.hm.dag.entryAfter [ "writeBoundary" ] '' $DRY_RUN_CMD ${pkgs.bash}/bin/bash "${./activate.sh}" diff --git a/config/k3s/k3s.service b/config/k3s/k3s.service new file mode 100644 index 000000000..50badb59e --- /dev/null +++ b/config/k3s/k3s.service @@ -0,0 +1,25 @@ +[Unit] +Description=Lightweight Kubernetes +Documentation=https://k3s.io +Wants=network-online.target +After=network-online.target + +[Service] +Type=notify +EnvironmentFile=-/etc/default/%N +EnvironmentFile=-/etc/sysconfig/%N +KillMode=process +Delegate=yes +LimitNOFILE=1048576 +LimitNPROC=infinity +LimitCORE=infinity +TasksMax=infinity +TimeoutStartSec=0 +Restart=always +RestartSec=5s +ExecStartPre=-@coreutils@/bin/rm -f /run/k3s/containerd/containerd.sock +ExecStart=@k3s@/bin/k3s server +ExecStopPost=-@k3s@/bin/k3s-killall.sh + +[Install] +WantedBy=multi-user.target diff --git a/home-manager/programs/k8s/default.nix b/home-manager/programs/k8s/default.nix index 88f14adc8..613ced221 100644 --- a/home-manager/programs/k8s/default.nix +++ b/home-manager/programs/k8s/default.nix @@ -1,12 +1,17 @@ -{ pkgs, ... }: +{ lib, pkgs, ... }: { - home.packages = with pkgs; [ - k9s - kind - kubeconform - kubectl - kubectx - kubernetes-helm - kustomize - ]; + home.packages = + with pkgs; + [ + k9s + kind + kubeconform + kubectl + kubectx + kubernetes-helm + kustomize + ] + ++ lib.optionals stdenv.isLinux [ + k3s + ]; } diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix index c7febbd75..c150251d2 100644 --- a/home-manager/services/default.nix +++ b/home-manager/services/default.nix @@ -16,6 +16,7 @@ let dockerPostgres = ./docker-postgres; dotfilesUpdater = import ./dotfiles-updater { inherit pkgs; }; gasTown = import ./gas-town { inherit pkgs; }; + k3s = ./k3s; keydApplicationMapper = ./keyd-application-mapper; makeUpdater = import ./make-updater { inherit pkgs; }; neversslKeepalive = import ./neverssl-keepalive { inherit pkgs; }; @@ -38,6 +39,7 @@ in dockerPostgres dotfilesUpdater gasTown + k3s keydApplicationMapper makeUpdater neversslKeepalive diff --git a/home-manager/services/k3s/default.nix b/home-manager/services/k3s/default.nix new file mode 100644 index 000000000..0a4919121 --- /dev/null +++ b/home-manager/services/k3s/default.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: +let + inherit (inputs) host; + serviceFile = "${config.home.homeDirectory}/.config/k3s/k3s.service"; +in +lib.mkIf (pkgs.stdenv.isLinux && host.isKyber) { + home.activation.setupK3s = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + if ! ${pkgs.diffutils}/bin/diff -q "${serviceFile}" /etc/systemd/system/k3s.service >/dev/null 2>&1; then + $DRY_RUN_CMD sudo cp "${serviceFile}" /etc/systemd/system/k3s.service + $DRY_RUN_CMD sudo ${pkgs.systemd}/bin/systemctl daemon-reload + $DRY_RUN_CMD sudo ${pkgs.systemd}/bin/systemctl enable --now k3s + fi + + K3S_KUBECONFIG="/etc/rancher/k3s/k3s.yaml" + KUBE_DIR="${config.home.homeDirectory}/.kube" + if [ -f "$K3S_KUBECONFIG" ]; then + $DRY_RUN_CMD mkdir -p "$KUBE_DIR" + $DRY_RUN_CMD sudo cp "$K3S_KUBECONFIG" "$KUBE_DIR/config" + $DRY_RUN_CMD sudo chown "$(id -u):$(id -g)" "$KUBE_DIR/config" + $DRY_RUN_CMD chmod 600 "$KUBE_DIR/config" + fi + ''; +}