101 lines
2.7 KiB
HCL
101 lines
2.7 KiB
HCL
locals {
|
|
pool_name = "kubernetes-workers"
|
|
worker_id_start = 80
|
|
worker_count = 1
|
|
}
|
|
|
|
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 = 8
|
|
|
|
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
|
|
} |