AnibalOSanibal@core disponible
← cd ~/bitacoras
11 de agosto de 2026

Monté un clúster K3s completo en una mañana

De cero a producción: Terraform en Proxmox crea las VMs, Ansible instala K3s. Lo que antes me tomaba meses, ahora en una sesión. Todos los archivos, copiables y descargables.

TerraformAnsibleK3sProxmoxDebian

La idea

Terraform crea las máquinas virtuales en Proxmox y Ansible instala K3s encima. Todo como código: reproducible, versionado y tuyo. Aquí tienes los archivos reales — cópialos o descárgalos abajo y móntalo tú mismo.

1. Terraform define el clúster

En main.tf declaras el provider de Proxmox y todos los nodos en un solo sitio. Cambiar el tamaño del clúster es editar este mapa:

provider "proxmox" {
  endpoint  = var.proxmox_endpoint
  api_token = var.proxmox_api_token
  insecure  = true

  ssh {
    agent       = false
    username    = "root"
    private_key = file("~/.ssh/id_ed25519")
  }
}

locals {
  nodes = {
    "201" = { name = "k3s-master-1", ip = "192.168.1.201" }
    "202" = { name = "k3s-worker-1", ip = "192.168.1.202" }
    "203" = { name = "k3s-worker-2", ip = "192.168.1.203" }
    "204" = { name = "k3s-worker-3", ip = "192.168.1.204" }
    "205" = { name = "k3s-worker-4", ip = "192.168.1.205" }
  }
}

El token de Proxmox nunca va en el código: vive en variables.tf (marcado sensitive) y su valor real en tu terraform.tfvars, que no se sube a git.

2. Ansible instala K3s

Una vez creadas las VMs, el playbook.yml prepara los nodos e instala K3s (master + workers). El truco es la idempotencia: se puede correr mil veces y siempre deja el sistema igual. Los workers se unen al clúster así:

- name: Instalar K3s Agent (Workers) y unir al clúster
  ansible.builtin.shell: |
    curl -sfL https://get.k3s.io | \
      K3S_URL="https://{{ hostvars[groups['k3s_master'][0]]['ansible_host'] }}:6443" \
      K3S_TOKEN="{{ hostvars[groups['k3s_master'][0]]['k3s_token'] }}" sh -
  args:
    creates: /usr/local/bin/k3s-agent

Lo que aprendí

Lo que me tomó seis meses la primera vez, ahora lo monto en un día. No es magia — es haber convertido cada paso en código.

Descarga los tres archivos completos abajo (main.tf, variables.tf, playbook.yml) y pruébalo. Cualquier duda, al Discord.

wget ~/archivos