From d4a9ea2461433f5458491977a401b57650c77a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Tue, 16 May 2023 19:16:19 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=AA=86=20Fix=20vcluster=20deployment=20an?= =?UTF-8?q?d=20add=20konk.sh=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prepare-labs/konk.sh | 19 +++++++++++++ .../terraform/one-kubernetes/vcluster/main.tf | 23 ++++++++++------ .../one-kubernetes/vcluster/outputs.tf | 27 ++++++++++++------- 3 files changed, 52 insertions(+), 17 deletions(-) create mode 100755 prepare-labs/konk.sh diff --git a/prepare-labs/konk.sh b/prepare-labs/konk.sh new file mode 100755 index 00000000..ffb9af0a --- /dev/null +++ b/prepare-labs/konk.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# deploy big cluster +TF_VAR_node_size=g6-standard-6 \ +TF_VAR_nodes_per_cluster=5 \ +TF_VAR_location=eu-west \ +./labctl create --mode mk8s --settings settings/mk8s.env --provider linode --tag konk + +# set kubeconfig file +cp tags/konk/stage2/kubeconfig.101 ~/kubeconfig + +# set external_ip labels +kubectl get nodes -o=jsonpath='{range .items[*]}{.metadata.name} {.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}{end}' | +while read node address; do + kubectl label node $node external_ip=$address +done + +# vcluster all the things +./labctl create --settings settings/mk8s.env --provider vcluster --mode mk8s --students 27 diff --git a/prepare-labs/terraform/one-kubernetes/vcluster/main.tf b/prepare-labs/terraform/one-kubernetes/vcluster/main.tf index 2a05693f..09a9ca3f 100644 --- a/prepare-labs/terraform/one-kubernetes/vcluster/main.tf +++ b/prepare-labs/terraform/one-kubernetes/vcluster/main.tf @@ -2,19 +2,26 @@ resource "helm_release" "_" { name = "vcluster" namespace = var.cluster_name create_namespace = true - #tags = var.common_tags - repository = "https://charts.loft.sh" - chart = "vcluster" - set { - name = "storage.persistence" - value = "false" - } + repository = "https://charts.loft.sh" + chart = "vcluster" set { name = "service.type" value = "NodePort" } + set { + name = "storage.persistence" + value = "false" + } + set { + name = "sync.nodes.enabled" + value = "true" + } + set { + name = "sync.nodes.syncAllNodes" + value = "true" + } set { name = "syncer.extraArgs" - value = "{--tls-san=${local.outer_api_server_host}}" + value = "{--tls-san=${local.guest_api_server_host}}" } } diff --git a/prepare-labs/terraform/one-kubernetes/vcluster/outputs.tf b/prepare-labs/terraform/one-kubernetes/vcluster/outputs.tf index f8c88e25..bdc1b03a 100644 --- a/prepare-labs/terraform/one-kubernetes/vcluster/outputs.tf +++ b/prepare-labs/terraform/one-kubernetes/vcluster/outputs.tf @@ -27,13 +27,22 @@ data "kubernetes_service_v1" "vcluster" { } } +data "kubernetes_nodes" "_" { +} + +# In the variables below, we use "traditional" virtualization terms, i.e.: +# host = "real" Kubernetes cluster +# guest = virtual Kubernetes cluster + locals { - kubeconfig_raw = data.kubernetes_secret_v1.kubeconfig.data.config - node_port = data.kubernetes_service_v1.vcluster.spec[0].port[0].node_port - outer_api_server_url = yamldecode(file("~/kubeconfig")).clusters[0].cluster.server - outer_api_server_host = regex("https://([^:]+):", local.outer_api_server_url)[0] - inner_api_server_host = local.outer_api_server_host - inner_old_server_url = yamldecode(local.kubeconfig_raw).clusters[0].cluster.server - inner_new_server_url = "https://${local.inner_api_server_host}:${local.node_port}" - kubeconfig = replace(local.kubeconfig_raw, local.inner_old_server_url, local.inner_new_server_url) -} \ No newline at end of file + kubeconfig_raw = data.kubernetes_secret_v1.kubeconfig.data.config + node_external_ip = data.kubernetes_nodes._.nodes[0].metadata[0].labels.external_ip + node_port = data.kubernetes_service_v1.vcluster.spec[0].port[0].node_port + host_api_server_url = yamldecode(file("~/kubeconfig")).clusters[0].cluster.server + host_api_server_host = regex("https://([^:]+):", local.host_api_server_url)[0] + guest_api_server_host = local.node_external_ip + guest_api_server_port = local.node_port + guest_api_server_url_new = "https://${local.guest_api_server_host}:${local.guest_api_server_port}" + guest_api_server_url_old = yamldecode(local.kubeconfig_raw).clusters[0].cluster.server + kubeconfig = replace(local.kubeconfig_raw, local.guest_api_server_url_old, local.guest_api_server_url_new) +}