From d74efd032fc8ef6dbe2b9bd673845c0a23b5857b Mon Sep 17 00:00:00 2001 From: Saurav Sahu Date: Sat, 25 Nov 2023 11:48:06 +0530 Subject: [PATCH] wip: multinode k3s cluster --- molecules/k3s/inputs.tf | 10 ++++++++ molecules/k3s/inputs.tfvars | 14 +++++++---- molecules/k3s/{server.tf => k3s-agents.tf} | 6 ++--- molecules/k3s/k3s-servers.tf | 29 ++++++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) rename molecules/k3s/{server.tf => k3s-agents.tf} (81%) create mode 100644 molecules/k3s/k3s-servers.tf diff --git a/molecules/k3s/inputs.tf b/molecules/k3s/inputs.tf index e03ee9b..a2c6c67 100644 --- a/molecules/k3s/inputs.tf +++ b/molecules/k3s/inputs.tf @@ -8,6 +8,16 @@ variable "servers" { default = [] } +variable "agents" { + description = "machines which will run the workloads" + type = list(object({ + host = string + user = string + private_key = string + })) + default = [] +} + variable "k3s" { type = object({ download_url = optional(string), diff --git a/molecules/k3s/inputs.tfvars b/molecules/k3s/inputs.tfvars index 700397b..ffafd4a 100644 --- a/molecules/k3s/inputs.tfvars +++ b/molecules/k3s/inputs.tfvars @@ -1,5 +1,9 @@ -servers = [ { - host = "127.0.0.1" - private_key = "~/.ssh/id_rsa" - user = "root" -} ] +servers = [ + { + host = "192.168.0.100" + private_key = "~/.ssh/id_rsa" + user = "root" + } +] + +agents = [] diff --git a/molecules/k3s/server.tf b/molecules/k3s/k3s-agents.tf similarity index 81% rename from molecules/k3s/server.tf rename to molecules/k3s/k3s-agents.tf index f90a553..f0a7292 100644 --- a/molecules/k3s/server.tf +++ b/molecules/k3s/k3s-agents.tf @@ -1,9 +1,9 @@ -resource "ssh_resource" "install_k3s" { +resource "ssh_resource" "install_k3s_agent" { for_each = local.servers host = each.value.host user = each.value.user commands = [ - "curl -sfL ${local.k3s.download_url} | INSTALL_K3S_VERSION='${local.k3s.version}' sh -s - server --docker --write-kubeconfig-mode 644 --disable=traefik" + "curl -sfL ${local.k3s.download_url} | INSTALL_K3S_VERSION='${local.k3s.version}' sh -s - agent" # TODO: For HA k3s cluster setup # "curl -sfL ${local.k3s.download_url} | INSTALL_K3S_VERSION='${local.k3s.version}' sh -s - server --cluster-init --docker --write-kubeconfig-mode 644 --disable=traefik" ] @@ -13,7 +13,7 @@ resource "ssh_resource" "install_k3s" { # Note: Removed waiting for k3s server to be ready -resource "ssh_resource" "uninstall_k3s" { +resource "ssh_resource" "uninstall_k3s_agent" { for_each = { for server in var.servers : server.host => server } host = each.value.host when = "destroy" diff --git a/molecules/k3s/k3s-servers.tf b/molecules/k3s/k3s-servers.tf new file mode 100644 index 0000000..2281185 --- /dev/null +++ b/molecules/k3s/k3s-servers.tf @@ -0,0 +1,29 @@ +resource "random_password" "agent_token" { + length = 16 + special = true + override_special = "!#$%&*()-_=+[]{}<>:?" +} + +resource "ssh_resource" "install_k3s_server" { + for_each = local.servers + host = each.value.host + user = each.value.user + commands = [ + "curl -sfL ${local.k3s.download_url} | INSTALL_K3S_VERSION='${local.k3s.version}' K3S_AGENT_TOKEN=${random_password.agent_token.result} sh -s - server --docker --write-kubeconfig-mode 644 --disable=traefik" + # TODO: For HA k3s cluster setup + # "curl -sfL ${local.k3s.download_url} | INSTALL_K3S_VERSION='${local.k3s.version}' sh -s - server --cluster-init --docker --write-kubeconfig-mode 644 --disable=traefik" + ] + private_key = file(each.value.private_key) + timeout = "10m" +} + +# Note: Removed waiting for k3s server to be ready + +resource "ssh_resource" "uninstall_k3s_server" { + for_each = { for server in var.servers : server.host => server } + host = each.value.host + when = "destroy" + user = each.value.user + commands = ["bash -c 'k3s-killall.sh; k3s-uninstall.sh;'"] + private_key = file(each.value.private_key) +}