Files
terraform-lawndale-k8s/worker.tf

102 lines
2.7 KiB
HCL

locals {
pool_name = "kubernetes-workers"
worker_id_start = 80
worker_count = 2
}
resource "libvirt_pool" "kubernetes_workers" {
name = "kubernetes-workers"
type = "dir"
path = "/vmstore/kubernetes-workers"
}
data "template_cloudinit_config" "worker" {
count = local.worker_count
gzip = false
base64_encode = false
part {
filename = "init.cfg"
content_type = "text/cloud-config"
content = yamlencode({
ssh_authorized_keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp7+2y7Y8jOUM2TXFbuKWMmwguNsCoFxE6JUg4VPbGTsX0FA3UTi1AB5TzL7tEPt6/j7MolSIvtupXFrH2pNdOuHXZL0LsR8EQ5uLA2oDRJX3xiyHrgBAXtEjAWkVus1DjUz19vRw/81GGnPucr4WIR4vSc+H0DFLgjJKn/MsMf/Z8DnCwEbguO2qlDPH8ToQQZC2k6BLwEHVpWigKE6MisV9i9GhFFJG9nbcHPq/Vf5fJhIHG+LGD3AgMeEZF9QE2pNbMOJ4lRP2lo16KpxYJCx5shdFqE3kiV/hLXVkDhSDK+p4pw1uuGEz7dFz5Fa1CMIa8iARKMzcYejs0AqqD"
]
write_files = [
{
path = "/var/lib/kubernetes/ca.pem"
content = local.kubernetes_ca
},
{
path = "/var/lib/kubelet/bootstrap-kubeconfig"
encoding = "gzip+base64"
content = base64gzip(local.bootstrap_kubeconfig)
},
{
path = "/var/lib/kubelet/kubelet-config.yaml"
content = local.kubelet_config
}
]
mounts = [
["datastore", "/mnt/datastore", "9p", "trans=virtio"]
]
})
}
}
module "worker" {
source = "git@git.thomasklein.me:thomasklein/terraform-modules//lawndale-vm"
count = local.worker_count
name = "k8s-worker-${count.index}"
id = local.worker_id_start + count.index
description = "Kubernetes worker (${count.index})"
vcpu = 6
memory_mb = 12 * 1024
interface = "nat"
create_root_storage_pool = false
root_storage_pool = local.pool_name
root_storage_volume_size_gb = 16
base_image_pool = "base-images"
base_image_volume = "ubuntu-jammy-20220516-k8s-v1.23.5-20220517"
filesystems = [
{
source = "/mnt/datastore/k8s"
target = "datastore"
readonly = false
accessmode = "mapped"
}
]
depends_on = [libvirt_pool.kubernetes_workers]
user_data = data.template_cloudinit_config.worker[count.index].rendered
### Make the workers headless
xslt = <<EOM
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="graphics" />
<xsl:template match="video" />
<xsl:template match="audio" />
<xsl:template match="input[@type='mouse']|input[@type='keyboard']" />
</xsl:stylesheet>
EOM
}