initial set up for k3s service
This commit is contained in:
parent
f26d7d4e69
commit
dc7afdf791
9 changed files with 491 additions and 0 deletions
0
clanServices/k3s/README.md
Normal file
0
clanServices/k3s/README.md
Normal file
28
clanServices/k3s/agent.nix
Normal file
28
clanServices/k3s/agent.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
controller = head (lib.attrNames roles.controller.machines or {});
|
||||
in
|
||||
{
|
||||
config = {
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [
|
||||
6443 # k3s: required so that pods can reach the API server (running on port 6443 by default)
|
||||
2379 # k3s, etcd clients: required if using a "High Availability Embedded etcd" configuration
|
||||
2380 # k3s, etcd peers: required if using a "High Availability Embedded etcd" configuration
|
||||
];
|
||||
|
||||
allowedUDPPorts = [
|
||||
8472 # k3s, flannel: required if using multi-node for inter-node networking
|
||||
];
|
||||
};
|
||||
|
||||
services = {
|
||||
k3s = {
|
||||
enable = true;
|
||||
role = "agent";
|
||||
token = "somehow get the token that is generated for the controller"; # config.clan.core.vars.generators.k3s-token.token.value;
|
||||
serverAddr = "https://<the ip address of the controller>";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
45
clanServices/k3s/default.nix
Normal file
45
clanServices/k3s/default.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{ ... }:
|
||||
let
|
||||
inherit (builtins) readFile head;
|
||||
in
|
||||
{
|
||||
_class = "clan.service";
|
||||
|
||||
manifest = {
|
||||
name = "amarth/k3s";
|
||||
description = "amarth/k3s";
|
||||
categories = [ "System" "Network" ];
|
||||
readme = readFile ./README.md;
|
||||
};
|
||||
|
||||
#==============================================================================================================
|
||||
# Server configuration
|
||||
#==============================================================================================================
|
||||
roles.server = {
|
||||
interface = { lib, ... }: {
|
||||
options.name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
example = "some-name";
|
||||
description = ''
|
||||
Temporary option till I figure out something useful
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
perInstance = { settings, ... }: {
|
||||
nixosModule = ./server.nix;
|
||||
};
|
||||
};
|
||||
|
||||
#==============================================================================================================
|
||||
# Agent configuration
|
||||
#==============================================================================================================
|
||||
roles.agent = {
|
||||
interface = { lib, ... }: { };
|
||||
|
||||
perInstance = { settings, instanceName, roles, ... }: {
|
||||
nixosModule = ./agent.nix;
|
||||
};
|
||||
};
|
||||
}
|
||||
15
clanServices/k3s/flake-module.nix
Normal file
15
clanServices/k3s/flake-module.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
module = lib.modules.importApply ./default.nix {};
|
||||
in
|
||||
{
|
||||
clan.modules.k3s = module;
|
||||
|
||||
perSystem = { ... }: {
|
||||
# clan.nixosTests.k3s = {
|
||||
# imports = [ ./tests/vm/default.nix ];
|
||||
|
||||
# clan.modules."@amarth/k3s" = module;
|
||||
# };
|
||||
};
|
||||
}
|
||||
55
clanServices/k3s/server.nix
Normal file
55
clanServices/k3s/server.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config = {
|
||||
clan.core.vars.generators = {
|
||||
k3s-ip = {
|
||||
share = true;
|
||||
files.ip_v6 = {
|
||||
deploy = false;
|
||||
secret = false;
|
||||
};
|
||||
files.ip_v4 = {
|
||||
deploy = false;
|
||||
secret = false;
|
||||
};
|
||||
script = ''
|
||||
echo "::1" > "$out/ip_v6"
|
||||
echo "127.0.0.1" > "$out/ip_v4"
|
||||
'';
|
||||
};
|
||||
|
||||
k3s-token = {
|
||||
share = true;
|
||||
files.token = {
|
||||
deploy = false;
|
||||
secret = true;
|
||||
};
|
||||
runtimeInputs = with pkgs; [ pwgen ];
|
||||
script = ''
|
||||
pwgen 50 1 > "$out/token"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [
|
||||
6443 # k3s: required so that pods can reach the API server (running on port 6443 by default)
|
||||
2379 # k3s, etcd clients: required if using a "High Availability Embedded etcd" configuration
|
||||
2380 # k3s, etcd peers: required if using a "High Availability Embedded etcd" configuration
|
||||
];
|
||||
|
||||
allowedUDPPorts = [
|
||||
8472 # k3s, flannel: required if using multi-node for inter-node networking
|
||||
];
|
||||
};
|
||||
|
||||
services = {
|
||||
k3s = {
|
||||
enable = true;
|
||||
role = "server";
|
||||
token = config.clan.core.vars.generators.k3s-token.token.value;
|
||||
clusterInit = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
40
clanServices/k3s/tests/vm/default.nix
Normal file
40
clanServices/k3s/tests/vm/default.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
name = "service-k3s";
|
||||
|
||||
clan = {
|
||||
directory = ./.;
|
||||
|
||||
inventory = {
|
||||
machines = {
|
||||
node1 = {};
|
||||
node2 = {};
|
||||
node3 = {};
|
||||
};
|
||||
|
||||
instances = {
|
||||
k3s = {
|
||||
module = {
|
||||
name = "@amarth/k3s";
|
||||
input = "self";
|
||||
};
|
||||
|
||||
roles.server.machines."node1" = {};
|
||||
|
||||
roles.agent.machines."node2" = {};
|
||||
roles.agent.machines."node3" = {};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nodes = {
|
||||
node1 = {};
|
||||
node2 = {};
|
||||
node3 = {};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
'';
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue