Skip to content

installers.virt.k3s_installer #

K3s Installer

Installs and manages K3s (lightweight Kubernetes) clusters with Mycelium IPv6 networking support.

Features

  • First master node initialization with --cluster-init
  • Additional master nodes for HA clusters
  • Worker node joining
  • Mycelium IPv6 auto-detection
  • Automatic token generation
  • Join script generation for other nodes

Usage

import incubaid.herolib.installers.virt.k3s_installer

// Get the installer
mut installer := k3s_installer.get()!

// Install as first master
installer.install_master()!

// Start K3s
installer.start()!

Example heroscript

First Master Node

!!k3s_installer.configure
    name: 'k3s_master'
    k3s_version: 'v1.33.1'
    data_dir: '~/hero/var/k3s'
    node_name: 'master-1'

!!k3s_installer.install_master name:'k3s_master'
!!k3s_installer.start name:'k3s_master'

Join as Worker Node

!!k3s_installer.configure
    name: 'k3s_worker'
    k3s_version: 'v1.33.1'
    node_name: 'worker-1'
    token: '<token-from-master>'
    master_url: 'https://[<master-ipv6>]:6443'

!!k3s_installer.install_worker name:'k3s_worker'
!!k3s_installer.start name:'k3s_worker'

Destroy Installation

!!k3s_installer.destroy

Constants #

const version = 'v1.33.1'

fn delete #

fn delete(args ArgsGet) !

fn exists #

fn exists(args ArgsGet) !bool

does the config exists?

fn get #

fn get(args ArgsGet) !&K3SInstaller

fn heroscript_dumps #

fn heroscript_dumps(obj K3SInstaller) !string

///////////NORMALLY NO NEED TO TOUCH

fn heroscript_loads #

fn heroscript_loads(heroscript string) !K3SInstaller

fn list #

fn list(args ArgsList) ![]&K3SInstaller

if fromdb set: load from filesystem, and not from mem, will also reset what is in mem

fn new #

fn new(args ArgsGet) !&K3SInstaller

fn play #

fn play(mut plbook PlayBook) !

fn set #

fn set(o K3SInstaller) !

register the config for the future

fn switch #

fn switch(name string)

switch instance to be used for k3s_installer

struct ArgsGet #

@[params]
struct ArgsGet {
pub mut:
	name   string = 'default'
	fromdb bool // will load from filesystem
	create bool // default will not create if not exist
}

///////FACTORY

struct ArgsList #

@[params]
struct ArgsList {
pub mut:
	fromdb bool // will load from filesystem
}

struct InstallArgs #

@[params]
struct InstallArgs {
pub mut:
	reset bool
}

struct K3SInstaller #

@[heap]
struct K3SInstaller {
pub mut:
	name string = 'default'
	// K3s version to install
	k3s_version string = version
	// Data directory for K3s (default: ~/hero/var/k3s)
	data_dir string
	// Unique node name/identifier
	node_name string
	// Mycelium interface name (auto-detected if not specified)
	mycelium_interface string
	// Cluster token for authentication (auto-generated if empty)
	token string
	// Master URL for joining cluster (e.g., 'https://[ipv6]:6443')
	master_url string
	// Node IPv6 address (auto-detected from Mycelium if empty)
	node_ip string
	// Is this a master/control-plane node?
	is_master bool
	// Is this the first master (uses --cluster-init)?
	is_first_master bool
	// TFGW CRD config (only deployed on first master)
	tfgw_mnemonic string // Wallet mnemonic for TFGW controller
	tfgw_network  string // Network: main, dev, test, qa
}

K3s installer - handles K3s cluster installation with Mycelium IPv6 networking

fn (K3SInstaller) destroy #

fn (mut self K3SInstaller) destroy() !

fn (K3SInstaller) generate_join_script #

fn (self &K3SInstaller) generate_join_script() !string

Generate join script for other nodes

fn (K3SInstaller) get_kubeconfig #

fn (self &K3SInstaller) get_kubeconfig() !string

Get kubeconfig content

fn (K3SInstaller) get_mycelium_ipv6 #

fn (self &K3SInstaller) get_mycelium_ipv6() !string

Get Mycelium IPv6 address from interface

fn (K3SInstaller) install #

fn (mut self K3SInstaller) install(args InstallArgs) !

fn (K3SInstaller) install_master #

fn (mut self K3SInstaller) install_master() !

Install first master node

fn (K3SInstaller) install_start #

fn (mut self K3SInstaller) install_start(args InstallArgs) !

fn (K3SInstaller) install_worker #

fn (mut self K3SInstaller) install_worker() !

Install worker node

fn (K3SInstaller) installed #

fn (self &K3SInstaller) installed() !bool

fn (K3SInstaller) join_master #

fn (mut self K3SInstaller) join_master() !

Join as additional master

fn (K3SInstaller) kubeconfig_path #

fn (self &K3SInstaller) kubeconfig_path() string

Get path to kubeconfig file

fn (K3SInstaller) reload #

fn (mut self K3SInstaller) reload() !

load from disk and make sure is properly intialized

fn (K3SInstaller) restart #

fn (mut self K3SInstaller) restart(args StartArgs) !

fn (K3SInstaller) running #

fn (mut self K3SInstaller) running() !bool

fn (K3SInstaller) start #

fn (mut self K3SInstaller) start(args StartArgs) !

fn (K3SInstaller) stop #

fn (mut self K3SInstaller) stop() !

struct StartArgs #

@[params]
struct StartArgs {
pub mut:
	reset bool
}

////////////////// STARTUP COMMAND ////////////////////