🪆 Fix vcluster deployment and add konk.sh script

This commit is contained in:
Jérôme Petazzoni
2023-05-16 19:16:19 +02:00
parent dd0f6d00fa
commit d4a9ea2461
3 changed files with 52 additions and 17 deletions

19
prepare-labs/konk.sh Executable file
View File

@@ -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

View File

@@ -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}}"
}
}

View File

@@ -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)
}
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)
}