Dočasné prostředí pro vývojáře spravované Terraformem

#development #terraform #cloud

Team se nám ve firmě zvětšuje, najednou si více lidí potřebuje vytvářet dočasné testovací a vývojové prostředí, jako jsou Kubernetes clustery, virtuální stroje, které musíme nějak rozumě spravovat.

Problém

Kolega Jakub po mě chtěl Kubernetes cluster, aby na něm mohl udělat demo ohledně ArgoCD. Já bych to standardně řešil tak, že bych si spustil moje demo Kubernetes na DigitalOceanu pomocí Terraformu, viz repo ondrejsika/terraform-demo-k8s.

Jenže ono to není tak jednoduché. Já už tohle repo naklonované mám, a taky mám připravený i soubor terraform.auto.tfvars se správně vyplněnými tokeny do Cloudflare a DigitalOceanu a v zásadě zapnutí toho clusteru mi nezabere žádný čas.

Ale v případě Jakuba je to něco jiného. On nemá ani repo, ani nastavené values a tokeny k dev infrastruktuře by musel hledat někde ve 1Passwordu. A to už není na chvilku, tenhle setup zabere mnohem víc času a musí se opakovat pro každý nový ukázkový repozitář.

Řešení

Řešení je mít jednoduchou možnost, jak si spustím resource, který aktuálně potřebuji co nejrychleji. A proto vznikly tyto 2 repozitáře sikalabs/terraform-module-sikalabs-do-k8s a sikalabs/sl-infra-live-dev (ten druhý je privátní).

Řešení je v zásadě jednoduché, místo různých stand alone Terraformích repozitářů uděláme moduly co nám jednoduše spustí to co potřebujeme - v našem případě se jedná o Kubernetes cluster včetně load balanceru a DNS záznamu. Ten pak pouze používáme s různou konfigurací v rámci jednoho repozitáře a vše co je v masteru toho sikalabs/sl-infra-live-dev repozitáře máme nasazené. Já mám nasazování masterů udělané automaticky pomocí integrace Terraform Cloudu s Githubem, ale i manuální spouštění nebo spouštění pomocí Gitlab CI je OK.

A jak to vlastně vypadá?

V repozitáři sikalabs/sl-infra-live-dev máme nastavený remote backend a v něm všechny tokeny, vývojáři nemusí mít žádné lokální nastavení. Pouze stačí být přihlášen k Terraform Cloudu (pomoci příkazu terraform login).

// _backend.tf

terraform {
  backend "remote" {
    organization = "sikalabs"
    workspaces {
      name = "sikalabs-live-dev"
    }
  }
}

Protože používáme remote execution, nastavení proměnných pro providery máme v Terraform Cloudu:

// _providers.tf

variable "digitalocean_token" {}
provider "digitalocean" {
  token = var.digitalocean_token
}

variable "cloudflare_api_token" {}
provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

Všechny "globální" soubory mám prefixované podtržítkem, abych je oddělil od těch dočasných, kde si každý vytváří a maže podle potřeby.

Takže to může vypadat takhle:

module "ondrejsika_k8s_foo" {
  source              = "sikalabs/sikalabs-do-k8s/module"
  version             = "0.1.0"
  prefix              = "alp"
  cloudflare_zone_id  = local.sikadev_com_zone_id
  digitalocean_region = "fra1"
  kubernetes_version  = "1.20.2-do.0"
  node_size           = "s-2vcpu-4gb"
  node_count          = 3
}

module "ondrejsika_k8s_bar" {
  source              = "sikalabs/sikalabs-do-k8s/module"
  version             = "0.1.0"
  prefix              = "alp"
  cloudflare_zone_id  = local.sikadev_com_zone_id
  digitalocean_region = "fra1"
  kubernetes_version  = "1.20.2-do.0"
  node_size           = "s-2vcpu-4gb"
  node_count          = 1
}

output "ondrejsika_kubeconfig_foo" {
  value     = module.ondrejsika_k8s_foo.kubeconfig
  sensitive = true
}

output "ondrejsika_kubeconfig_bar" {
  value     = module.ondrejsika_k8s_bar.kubeconfig
  sensitive = true
}

Vidíme, že tady používám Terraform modul (sikalabs/terraform-module-sikalabs-do-k8s), co mi vytvoří Kubernetes cluster se vším co běžně potřebuju (load balancer a DNS záznamy).

A pak si každý kdo potřebuje něco v testovacím prostředí pustit pouze přidá své resources a commitne. Když už je nepotřebuje, zase je smaže a opět commitne.

Školení Terraformu

Zaujal Vás Terraform? Chcete se dozvědět více? Přijďte na mé Školení Terraformu!

Případně si můžete vybrat z nabídky otevřených kurzů.

Ondřej Šika

Jsem freelance DevOps konzultant a lektor. Zlepšuji práci vývojářských týmu zaváděním efektivních procesů ve vývoji. Naučím Vás používat prověřené nástroje a technologie, které povedou k rychlejšímu vývoji a bezpečnějšímu provozu vašeho software.

Ondrej Sika

ondrej@sika.io 📋
skoleni@sika.io 📋
+420 773 452 376 📋

Company ID
88114163 📋

VAT ID
CZ9302252102 📋

Zajímají Vás novinky?

Odebírejte můj newsletter a budete v obraze!

Website by Zuzana Jeschke