aboutsummaryrefslogtreecommitdiff
path: root/opentofu/k8s-cluster.tf
blob: c6392cde533c5c41988e6b5f2ef1c92a9dda5072 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
resource "proxmox_vm_qemu" "k8s_cp" {

  lifecycle {
    ignore_changes = [
      bootdisk,
    ]
  }

  name        = "k8s-cp-01"
  desc        = "k8s control plane"
  agent       = 1 # Qemu Guest Agent
  target_node = var.proxmox_node
  tags        = "debian;k8s"

  clone      = var.debian_server_bookworm_packer_image_name
  full_clone = true

  qemu_os  = "other"
  cores    = 2
  sockets  = 1
  cpu_type = "host"
  memory   = 6144

  scsihw   = "virtio-scsi-pci"
  bootdisk = "scsi0"

  disks {
    ide {
      ide0 {
        cloudinit {
          storage = "local-lvm"
        }
      }
    }
    virtio {
      virtio0 {
        disk {
          storage   = "local-lvm"
          size      = "32G"
          iothread  = true
          replicate = false
        }
      }
    }
  }

  network {
    id     = 0
    model  = "virtio"
    bridge = "vmbr0"
  }

  # Cloud-Init settings
  ipconfig0 = "ip=dhcp"
  ciuser    = "mas"
  sshkeys   = var.ssh_public_key
}

resource "proxmox_vm_qemu" "k8s_worker" {

  lifecycle {
    ignore_changes = [
      bootdisk,
    ]
  }

  count       = var.k8s_worker_vm_count
  name        = "${var.k8s_worker_vm_name_prefix}-${count.index}"
  desc        = "k8s worker"
  agent       = 1 # Qemu Guest Agent
  target_node = var.proxmox_node
  tags        = "debian;k8s"

  clone      = var.debian_server_bookworm_packer_image_name
  full_clone = true

  qemu_os  = "other"
  cores    = 1
  sockets  = 1
  cpu_type = "host"
  memory   = 2048

  scsihw   = "virtio-scsi-pci"
  bootdisk = "scsi0"

  disks {
    ide {
      ide0 {
        cloudinit {
          storage = "local-lvm"
        }
      }
    }
    virtio {
      virtio0 {
        disk {
          storage   = "local-lvm"
          size      = "32G"
          iothread  = true
          replicate = false
        }
      }
    }
  }

  network {
    id     = 0
    model  = "virtio"
    bridge = "vmbr0"
  }

  # Cloud-Init settings
  ipconfig0 = "ip=dhcp"
  ciuser    = "mas"
  sshkeys   = var.ssh_public_key
}

# Provision the control plane node and the workers
module "ansible_provision_k8s" {
  source                = "./modules/ansible_provisioner"
  inventory_file_path   = local_file.ansible_inventory.filename # Pass inventory path here
  vm_username           = var.vm_username
  ssh_private_key_path  = var.ssh_private_key_path
  ansible_playbook_path = var.k8s_ansible_playbook_path
}