Skip to content

Repository files navigation

proxmox-k0s-cluster

semantic-release-badge

Usage

Basic usage of this module:


Requirements

Name Version
proxmox ~> 0.74

Resources

Name Type
local_file.haproxy resource
local_file.k0sctl resource
null_resource.configure_lxc_controller resource
null_resource.configure_lxc_worker resource
proxmox_virtual_environment_container.controller resource
proxmox_virtual_environment_container.worker resource
proxmox_virtual_environment_download_file.lxc resource
proxmox_virtual_environment_download_file.vm resource
proxmox_virtual_environment_file.controller_cloudconfig resource
proxmox_virtual_environment_file.worker_cloudconfig resource
proxmox_virtual_environment_vm.controller resource
proxmox_virtual_environment_vm.worker resource

Inputs

Name Description Type Default Required
config Cluster Configuration
object({
# (Optional) Provide cluster name
name = optional(string, "k0s")

# (Optional) SSH Username
username = optional(string, "root")

# (Required) SSH Public Key
public_key = string

# (Required) SSH Private Key
private_key = string
private_key_path = optional(string, "~/.ssh/id_rsa")

# (Optional) Timezone
timezone = optional(string, "Europe/Berlin")

# Network Configuration
ip_subnet = optional(string, "192.168.1.0/24")
gateway = optional(string, "192.168.1.1")
ip_offset = optional(number, 10)
})
n/a yes
controllers Configuration for controller nodes
object({
# (Required) Number of controller nodes
count = optional(number, 3)

# "(Optional) Deployment type for controller nodes: 'lxc' (default) or 'vm'"
deployment_type = optional(string, "lxc")

# (Optional) If enabled, Controller nodes also act as workers
worker = optional(bool, false)

# (Optional) Hostname prefix
hostname = optional(string, "")

# Compute
cpu_arch = optional(string, "amd64")
cpu_sockets = optional(number, 1)
cpu_cores = optional(number, 4)
cpu_units = optional(number, 100)
memory = optional(number, 4096)
hugepages = optional(number, null)

# Disk
datastore_id = optional(string, "local")
disk_size = optional(number, 10)

# Optional MountPoints
mounts = optional(list(object({
src_path = string
dst_path = string
size = optional(string, null)
acl = optional(bool, null)
backup = optional(bool, false)
replicate = optional(bool, false)
shared = optional(bool, false)
quota = optional(bool, false)
mount_options = optional(list(string), [])
})), [])

# (Optional) Network Configuration
bridge = optional(string, "vmbr0")
network = optional(string, "eth0")

# (Optional) Define packages
packages = optional(list(string), [])
commands = optional(list(string), [])
files = optional(list(object({
path = string
content = string
})), [])
})
n/a yes
cplb (Optional) Control Plane Load Balancing. More info: https://docs.k0sproject.io/stable/cplb/
object({
enabled = optional(bool, false)
virtual_ip = optional(string, null)
auth_pass = optional(string, null)
})
{
"enabled": false
}
no
ha (Optional) Control plane HA. More info: https://docs.k0sproject.io/stable/high-availability/
object({
enabled = optional(bool, false)
load_balancer_ip_address = optional(string, "")
})
{
"enabled": false
}
no
installFlags (optional) Control Plane install flags list(string) [] no
k0s k0s Configuration
object({
config = optional(object({
apiVersion = optional(string)
kind = optional(string)
metadata = optional(object({
name = optional(string)
}))
spec = optional(object({
konnectivity = optional(object({
adminPort = optional(number, 8133)
agentPort = optional(number, 8132)
}))
}))
}))
})
{} no
nllb (Optional) Node Local Load Balancing. More info: https://docs.k0sproject.io/stable/nllb/
object({
enabled = optional(bool, false)
})
{
"enabled": false
}
no
os OS Configuration
object({
distro = optional(string)
version = optional(string)
})
{} no
proxmox Cluster Configuration
object({
nodes = list(string)
datastore_id = optional(string, "local")
domain = optional(string, "localdomain")
})
n/a yes
workers Configuration for worker nodes
object({
# (Required) Number of worker nodes
count = optional(number, 3)

# "(Optional) Deployment type for worker nodes: 'vm' (default) or 'lxc'"
deployment_type = optional(string, "vm")

# (Optional) Hostname prefix
hostname = optional(string, "")

# Compute
cpu_arch = optional(string, "amd64")
cpu_sockets = optional(number, 1)
cpu_cores = optional(number, 4)
cpu_units = optional(number, 100)
memory = optional(number, 10240)
hugepages = optional(number, null)

# Disk
datastore_id = optional(string, "local")
disk_size = optional(number, 100)

# Optional MountPoints
mounts = optional(list(object({
src_path = string
dst_path = string
size = optional(string, null)
acl = optional(bool, null)
backup = optional(bool, false)
replicate = optional(bool, false)
shared = optional(bool, false)
quota = optional(bool, false)
mount_options = optional(list(string), [])
})), [])

# (Optional) Network Configuration
bridge = optional(string, "vmbr0")
network = optional(string, "eth0")

# (Optional) Define packages
packages = optional(list(string), ["qemu-guest-agent"])
commands = optional(list(string), ["systemctl enable qemu-guest-agent", "systemctl start qemu-guest-agent"])
files = optional(list(object({
path = string
content = string
})), [])
})
n/a yes

Outputs

Name Description
controllers n/a
iso_url n/a
k0sctl_config n/a
lxc_url n/a
workers n/a

About

Deploy a K0s cluster in Proxmox

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages