about summary refs log tree commit diff
path: root/scripts/make-cluster
diff options
context:
space:
mode:
authormakefunstuff <[email protected]>2024-07-18 21:04:29 +0200
committermakefunstuff <[email protected]>2024-07-18 21:04:29 +0200
commita52d9c49b7f4166b18a49b4907a2b0afba3aac05 (patch)
tree358448ac7d63644b596a290f9a69d3b302312306 /scripts/make-cluster
parent7937cffbc5e00b697ab4531bb6773b12874c4ab6 (diff)
downloadk3s-lab-a52d9c49b7f4166b18a49b4907a2b0afba3aac05.tar.gz
kvm cluster
Diffstat (limited to '')
-rw-r--r--scripts/make-cluster64
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/make-cluster b/scripts/make-cluster
new file mode 100644
index 0000000..90ba009
--- /dev/null
+++ b/scripts/make-cluster
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Number of nodes to create
+NUM_NODES=3
+BASE_IMAGE="ubuntu-18.04-minimal-cloudimg-amd64.img"
+NETWORK="default"
+MEMORY=2048
+VCPUS=2
+
+# Generate cloud-init ISO for each node
+for i in $(seq 1 $NUM_NODES); do
+  VM_NAME="k3s-node-$i"
+  CLOUD_INIT_DIR="cloud-init-$VM_NAME"
+  mkdir -p $CLOUD_INIT_DIR
+
+  cat <<EOF > $CLOUD_INIT_DIR/meta-data
+instance-id: $VM_NAME
+local-hostname: $VM_NAME
+EOF
+
+  cp user-data $CLOUD_INIT_DIR/
+
+  # Create cloud-init ISO
+  genisoimage -output $CLOUD_INIT_DIR/cloud-init.iso -volid cidata -joliet -rock $CLOUD_INIT_DIR/user-data $CLOUD_INIT_DIR/meta-data
+
+  # Create VM
+  virt-install \
+    --name $VM_NAME \
+    --memory $MEMORY \
+    --vcpus $VCPUS \
+    --disk size=10,backing_store=$BASE_IMAGE \
+    --disk path=$CLOUD_INIT_DIR/cloud-init.iso,device=cdrom \
+    --os-type linux \
+    --os-variant ubuntu18.04 \
+    --network network=$NETWORK \
+    --graphics none \
+    --console pty,target_type=serial \
+    --import \
+    --noautoconsole
+
+  echo "Created VM $VM_NAME"
+done
+
+# Wait for VMs to boot up and install K3s
+sleep 60
+
+# Get the IP address of the master node
+MASTER_IP=$(virsh domifaddr k3s-node-1 | grep -oP '(\d+\.\d+\.\d+\.\d+)' | head -1)
+
+# Set up the master node
+ssh ubuntu@$MASTER_IP "curl -sfL https://get.k3s.io | sh -"
+
+# Get the K3s token from the master node
+K3S_TOKEN=$(ssh ubuntu@$MASTER_IP "sudo cat /var/lib/rancher/k3s/server/node-token")
+
+# Set up the worker nodes
+for i in $(seq 2 $NUM_NODES); do
+  NODE_IP=$(virsh domifaddr k3s-node-$i | grep -oP '(\d+\.\d+\.\d+\.\d+)' | head -1)
+  ssh ubuntu@$NODE_IP "curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 K3S_TOKEN=$K3S_TOKEN sh -"
+  echo "Joined k3s-node-$i to the cluster"
+done
+
+echo "K3s cluster setup completed. Master node IP: $MASTER_IP"
+