--- title: "Cómo instalar Talos Linux y crear un clúster Kubernetes" description: "Despliega Kubernetes con Talos Linux: arranca la ISO, genera la configuración con talosctl, inicializa etcd, obtén el kubeconfig y actualiza los nodos." category: "Ecosistema Kubernetes" language: es source: https://cubepath.com/es/docs/ecosistema-kubernetes/instalacion-de-talos-linux-para-kubernetes updated: 2026-09-25 --- # Cómo instalar Talos Linux y crear un clúster Kubernetes Talos Linux es un sistema operativo inmutable y mínimo diseñado solo para ejecutar Kubernetes: no tiene shell, ni SSH, ni gestor de paquetes, y toda su administración se hace por una API autenticada con mTLS mediante `talosctl`. En este tutorial crearás un clúster con un nodo de control plane y un worker a partir de la ISO de Talos, obtendrás el `kubeconfig` para `kubectl` y verás cómo inspeccionar y actualizar los nodos. Los comandos de `talosctl` se ejecutan desde tu equipo, no en los nodos. ## Requisitos previos Para seguir esta guía necesitas: - Dos máquinas (servidores bare metal o máquinas virtuales) en las que puedas arrancar una ISO, por ejemplo mediante la consola remota o el medio virtual del BMC, o desde tu hipervisor. Cada una con al menos 2 vCPU, 2 GB de RAM (4 GB para el control plane) y un disco de 10 GB o más que se borrará por completo. - IPs fijas o reservas DHCP para cada nodo. En la guía se usan `192.168.1.100` para el control plane y `192.168.1.110` para el worker. - Un equipo Linux o macOS con acceso de red a los nodos en los puertos 50000/TCP (API de Talos) y 6443/TCP (API de Kubernetes), y con `kubectl` instalado. > Advertencia: al aplicar la configuración, Talos se instala en el disco elegido y borra su contenido. ## Paso 1: Instalar talosctl Descarga el binario de la última versión publicada en GitHub e instálalo en `/usr/local/bin`. En un equipo arm64 cambia `amd64` por `arm64`, y en macOS usa `talosctl-darwin-amd64` o `talosctl-darwin-arm64`: ```bash curl -LO https://github.com/siderolabs/talos/releases/latest/download/talosctl-linux-amd64 sudo install -m 0755 talosctl-linux-amd64 /usr/local/bin/talosctl rm talosctl-linux-amd64 ``` En macOS también puedes usar Homebrew con `brew install siderolabs/tap/talosctl`. Comprueba la versión del cliente: ```bash talosctl version --client ``` ```output Client: Tag: v1.x.x ... ``` Anota esa versión: la ISO que descargues en el siguiente paso debe ser de la misma. ## Paso 2: Arrancar los nodos con la ISO de Talos Genera la imagen en [Image Factory](https://factory.talos.dev): elige **Bare-metal Machine**, la versión de Talos que coincide con tu `talosctl`, la arquitectura y, si los necesitas, extensiones de sistema (por ejemplo firmware o drivers). Al final la página te da dos cosas: - El enlace a la ISO, que usarás ahora para arrancar los nodos. - La imagen del instalador, del tipo `factory.talos.dev/installer/:v1.x.x`, que usarás para las actualizaciones. Arranca las dos máquinas desde la ISO. Talos se inicia en **modo de mantenimiento**, sin instalar nada todavía, y muestra en la consola la IP que ha obtenido. Desde tu equipo, consulta los discos del nodo de control plane para saber en cuál instalar. En modo de mantenimiento no hay credenciales, por eso se usa `--insecure`: ```bash talosctl get disks --insecure --nodes 192.168.1.100 ``` ```output NODE NAMESPACE TYPE ID VERSION SIZE READ ONLY TRANSPORT ROTATIONAL WWID MODEL runtime Disk sda 1 107 GB false virtio true QEMU HARDDISK runtime Disk sr0 1 106 MB true ata QEMU DVD-ROM ``` En este ejemplo el disco de instalación es `/dev/sda`. En servidores con NVMe será algo como `/dev/nvme0n1`. ## Paso 3: Generar la configuración del clúster Crea un directorio para el clúster y genera primero los secretos (CA de Kubernetes, CA de Talos, claves de etcd). Guardarlos aparte te permite regenerar las configuraciones más adelante sin crear un clúster nuevo: ```bash mkdir -p ~/talos-cluster && cd ~/talos-cluster talosctl gen secrets -o secrets.yaml ``` Genera las configuraciones de máquina. El endpoint es la URL de la API de Kubernetes, que en un clúster con un único control plane es su IP: ```bash talosctl gen config my-cluster https://192.168.1.100:6443 \ --with-secrets secrets.yaml \ --install-disk /dev/sda ``` ```output generating PKI and tokens Created controlplane.yaml Created worker.yaml Created talosconfig ``` - `controlplane.yaml`: configuración de los nodos de control plane. - `worker.yaml`: configuración de los workers. - `talosconfig`: credenciales de cliente para `talosctl`. > Importante: `secrets.yaml`, `controlplane.yaml` y `talosconfig` dan control total sobre el clúster. Guárdalos en un gestor de secretos o cifrados, nunca en un repositorio en claro. Si quieres un clúster de un solo nodo donde el control plane también ejecute cargas de trabajo, crea un parche: ```bash nano allow-scheduling.yaml ``` ```yaml cluster: allowSchedulingOnControlPlanes: true ``` Y añade `--config-patch-control-plane @allow-scheduling.yaml` al comando `talosctl gen config` anterior (con `--force` para sobrescribir los archivos). ## Paso 4: Instalar Talos en el control plane e inicializar el clúster Aplica la configuración al nodo de control plane. Talos se instala en el disco, reinicia y arranca ya configurado: ```bash talosctl apply-config --insecure --nodes 192.168.1.100 --file controlplane.yaml ``` A partir de aquí la comunicación usa mTLS, así que indica a `talosctl` qué archivo de credenciales, endpoint y nodo usar por defecto: ```bash export TALOSCONFIG=~/talos-cluster/talosconfig talosctl config endpoint 192.168.1.100 talosctl config node 192.168.1.100 ``` Espera uno o dos minutos a que el nodo termine de instalarse y reiniciar. Cuando `talosctl version` devuelva también la sección `Server`, inicializa etcd. Este comando se ejecuta **una sola vez** y **solo en un nodo** de control plane: ```bash talosctl bootstrap ``` Talos arranca etcd y los componentes de Kubernetes. Sigue el progreso con el panel de estado, que se cierra con `Ctrl+C`: ```bash talosctl dashboard ``` ## Paso 5: Añadir el worker Aplica `worker.yaml` al segundo nodo, que sigue en modo de mantenimiento: ```bash talosctl apply-config --insecure --nodes 192.168.1.110 --file worker.yaml ``` El worker se instala, reinicia y se une al clúster por sí solo usando el token incluido en su configuración. Cuando termine, comprueba la salud del clúster completo: ```bash talosctl health ``` ```output discovered nodes: ["192.168.1.100" "192.168.1.110"] waiting for etcd to be healthy: OK waiting for etcd members to be consistent across nodes: OK waiting for etcd members to be control plane nodes: OK waiting for apid to be ready: OK waiting for all nodes memory sizes: OK waiting for all nodes disk sizes: OK waiting for kubelet to be healthy: OK waiting for all nodes to finish boot sequence: OK waiting for all k8s nodes to report: OK waiting for all k8s nodes to report ready: OK ... ``` ## Paso 6: Acceder al clúster con kubectl Descarga el `kubeconfig` del clúster a un archivo propio: ```bash talosctl kubeconfig ./kubeconfig export KUBECONFIG=~/talos-cluster/kubeconfig ``` Si ejecutas `talosctl kubeconfig` sin argumento, lo fusiona con tu `~/.kube/config`. Comprueba los nodos: ```bash kubectl get nodes -o wide ``` ```output NAME STATUS ROLES AGE VERSION INTERNAL-IP OS-IMAGE talos-cp-1 Ready control-plane 6m v1.3x.x 192.168.1.100 Talos (v1.x.x) talos-worker-1 Ready 2m v1.3x.x 192.168.1.110 Talos (v1.x.x) ``` Talos instala por defecto Flannel como CNI y kube-proxy, así que los nodos quedan en `Ready` sin más pasos. Si prefieres otro CNI, como Cilium, hay que desactivar el de serie en la configuración antes de crear el clúster. ## Paso 7: Operar los nodos sin SSH Como no hay shell, las tareas habituales de diagnóstico se hacen con `talosctl`. Añade `--nodes ` para dirigirte a un nodo distinto del predeterminado: ```bash talosctl services talosctl logs kubelet talosctl dmesg talosctl get members talosctl etcd members ``` - `services` lista los servicios del sistema y su estado. - `logs` muestra el log de un servicio (`kubelet`, `etcd`, `containerd`...). - `get members` muestra los nodos que Talos ha descubierto en el clúster. Para cambiar la configuración de un nodo ya instalado, edita el archivo YAML correspondiente y vuelve a aplicarlo, esta vez sin `--insecure`: ```bash talosctl apply-config --nodes 192.168.1.110 --file worker.yaml ``` Talos aplica en caliente los cambios que lo permiten y reinicia el nodo solo cuando es necesario. ## Paso 8: Actualizar Talos y Kubernetes Talos se actualiza sustituyendo la imagen completa del sistema, con vuelta atrás automática si el nodo no arranca bien. Usa la imagen de instalador de Image Factory del paso 2 con la nueva versión y actualiza los nodos de uno en uno, empezando por el control plane: ```bash talosctl upgrade --nodes 192.168.1.100 --image factory.talos.dev/installer/:v1.x.y ``` Espera a que `talosctl health` vuelva a pasar y repite con cada worker. Actualiza también tu `talosctl` a la misma versión. La versión de Kubernetes se actualiza aparte. `upgrade-k8s` actualiza los componentes del control plane y los kubelets de todos los nodos de forma ordenada: ```bash talosctl upgrade-k8s --to 1.3x.y ``` Consulta antes la matriz de compatibilidad de Talos para confirmar qué versiones de Kubernetes admite tu versión de Talos. ## Solución de problemas **`talosctl` devuelve errores de certificado o `connection refused` tras aplicar la configuración.** El nodo está reiniciando o aún se está instalando. Espera y comprueba que usas el `talosconfig` correcto con `echo $TALOSCONFIG`. Recuerda que `--insecure` solo sirve en modo de mantenimiento. **`talosctl bootstrap` falla con `AlreadyExists`.** etcd ya se inicializó. No lo repitas: ejecutar `bootstrap` en un segundo nodo crearía un clúster etcd independiente. **El nodo se instaló en el disco equivocado o no encuentra disco.** Revisa `talosctl get disks` y el valor de `machine.install.disk` en `controlplane.yaml` o `worker.yaml`. ## Conclusión Has instalado Talos Linux en dos nodos, inicializado el clúster con `talosctl bootstrap` y accedido a Kubernetes con `kubectl`, además de ver cómo inspeccionar y actualizar los nodos sin SSH. Como siguientes pasos puedes pasar a tres nodos de control plane con una IP virtual o un balanceador delante de la API, sustituir Flannel por Cilium e instalar un proveedor de almacenamiento persistente.