From 9edad42dd7bfaef9378c92896551dcf55902b9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ing=2E=20Kl=C3=A1ra=20Moravcov=C3=A1?= <klara.moravcova@cesnet.cz> Date: Thu, 13 Mar 2025 13:42:39 +0100 Subject: [PATCH] Modify to be complient to the root module. --- terraform/control-cloudinit.txt | 6 ++ terraform/docs/additional_worker_volumes.md | 82 +++++++++++++++++++ terraform/main.tf | 9 +- ...des-cloudinit.txt => worker-cloudinit.txt} | 0 4 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 terraform/control-cloudinit.txt create mode 100644 terraform/docs/additional_worker_volumes.md rename terraform/{nodes-cloudinit.txt => worker-cloudinit.txt} (100%) diff --git a/terraform/control-cloudinit.txt b/terraform/control-cloudinit.txt new file mode 100644 index 0000000..566878b --- /dev/null +++ b/terraform/control-cloudinit.txt @@ -0,0 +1,6 @@ +users: + - default + - name: ubuntu + shell: /bin/bash + package_update: true +package_upgrade: true diff --git a/terraform/docs/additional_worker_volumes.md b/terraform/docs/additional_worker_volumes.md new file mode 100644 index 0000000..48ece9f --- /dev/null +++ b/terraform/docs/additional_worker_volumes.md @@ -0,0 +1,82 @@ +# Additional worker groups + +Every worker node comes with a root disk, with the maximum size defined by its flavor. If you need a larger volume or an additional volume for any reason, you can define an additional volume and attach it to the worker. + +``` + worker_nodes = [ + { + name = "wg-blue" + flavor = "c2.4core-16ram" + volume_size = 30 + count = 2 + additional_volumes = [ + { size = 20 } # Create 20 GB disk per wroker and attach to the worker. + ] + } + ] +} +``` +After attaching the volume, you need to format and mount it. You can add a script to worker-cloudinit.txt to search for an unmounted device, format it, and mount it. For example, the following script mounts the unmounted device to `/var/lib/containerd`: + +``` +write_files: + - path: /usr/local/bin/mount-unmounted-disks.sh + permissions: '0755' + content: | + #!/bin/bash + set -e + + # Log output for debugging + LOG_FILE="/var/log/cloud-init-unmounted-disks.log" + exec > >(tee -a "${LOG_FILE}") 2>&1 + + echo "Starting disk discovery and mounting process..." + + # Find unmounted disks + UNMOUNTED_DISKS=$(lsblk -ndp -o NAME | while read -r DISK; do + if lsblk -np "$DISK" | grep -q 'part' && mount | grep -q "$(lsblk -np -o NAME "$DISK" | grep part)"; then + continue + else + echo "$DISK" + fi + done) + + # Process each unmounted disk + for DISK in $UNMOUNTED_DISKS; do + echo "Processing disk: $DISK" + + # Create a single partition (if not already partitioned) + if ! lsblk -np "$DISK" | grep -q 'part'; then + echo "Creating partition on $DISK" + parted --script "$DISK" mklabel gpt + parted --script "$DISK" mkpart primary ext4 0% 100% + PARTITION="${DISK}1" + echo "Created partition: $PARTITION" + else + PARTITION=$(lsblk -np -o NAME "$DISK" | grep 'part' | head -n 1) + echo "Found existing partition: $PARTITION" + fi + + # Format the partition if not already formatted + if ! blkid "$PARTITION" >/dev/null 2>&1; then + echo "Formatting partition: $PARTITION" + mkfs.ext4 "$PARTITION" + fi + + # Mount the partition + MOUNT_POINT="/var/lib/containerd/" + mkdir -p "$MOUNT_POINT" + echo "Mounting $PARTITION at $MOUNT_POINT" + mount "$PARTITION" "$MOUNT_POINT" + + # Add to /etc/fstab for persistence + UUID=$(blkid -s UUID -o value "$PARTITION") + echo "UUID=$UUID $MOUNT_POINT ext4 defaults,nofail 0 2" >> /etc/fstab + done + + echo "Disk mounting process completed." + echo "Check ${LOG_FILE} for details." + +runcmd: + - /usr/local/bin/mount-unmounted-disks.sh +``` diff --git a/terraform/main.tf b/terraform/main.tf index 021dfc3..2eb7efb 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -1,7 +1,7 @@ module "kubernetes_infra" { # source = "./../../kubernetes-infra" - source = "git::https://gitlab.ics.muni.cz/cloud/terraform/modules/kubernetes-infra.git?ref=v4.0.1" + source = "git::https://gitlab.ics.muni.cz/cloud/terraform/modules/kubernetes-infra.git?ref=v5.0.1" # Example of variable override ssh_public_key = "~/.ssh/id_rsa.pub" @@ -10,14 +10,17 @@ module "kubernetes_infra" { control_nodes_count = 3 control_nodes_volume_size = 30 - control_nodes_flavor = "hpc.8core-16ram" + control_nodes_flavor = "r3.4core-8ram-30edisk" worker_nodes = [ { name = "worker" - flavor = "standard.small" + flavor = "c2.4core-16ram" volume_size = 30 count = 2 + additional_volumes = [ +# { size = 20 } + ] } ] } diff --git a/terraform/nodes-cloudinit.txt b/terraform/worker-cloudinit.txt similarity index 100% rename from terraform/nodes-cloudinit.txt rename to terraform/worker-cloudinit.txt -- GitLab