> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 0. Preparar los nodos

> Instala Docker Engine, containerd y kubeadm en los nodos, y descarga las imágenes de TeX Live.

Ayakaleaf Pro compila LaTeX en contenedores de TeX Live [aislados](https://ayakaleaf-pro.mintlify.site/es/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md). Los inicia por sí mismo, a través del socket de Docker de la máquina en la que se ejecuta. En Kubernetes esto significa que:

* cada nodo que pueda ejecutar el pod de Ayakaleaf Pro tiene **Docker Engine** instalado y en ejecución;
* cada imagen de TeX Live que configures se descarga **en Docker** en cada uno de esos nodos.

El kubelet puede seguir usando containerd: Docker Engine incluye `containerd.io`, y ambos usan el mismo daemon en namespaces distintos.

> [!WARNING]
>
> Los grupos de nodos gestionados sin Docker (la mayoría de las opciones por defecto de EKS, GKE y AKS) no pueden ejecutar compilaciones aisladas. Usa grupos de nodos en los que puedas instalar Docker Engine, o etiqueta esos nodos y mantén Ayakaleaf Pro en ellos con un `nodeSelector`.

Los pasos siguientes son para Ubuntu 24.04 y un clúster creado con kubeadm. Si tu clúster ya existe, realiza los pasos 1, 2 y 5 en los nodos que ejecutarán Ayakaleaf Pro.

**1. Módulos del kernel y sysctls**

```bash theme={null}
printf 'overlay\nbr_netfilter\n' | sudo tee /etc/modules-load.d/k8s.conf
sudo modprobe overlay && sudo modprobe br_netfilter
printf 'net.bridge.bridge-nf-call-iptables=1\nnet.bridge.bridge-nf-call-ip6tables=1\nnet.ipv4.ip_forward=1\n' \
  | sudo tee /etc/sysctl.d/99-k8s.conf
sudo sysctl --system
sudo swapoff -a   # and comment out swap in /etc/fstab
```

**2. Docker Engine**

Instala Docker Engine desde el repositorio de Docker como en [0. Configurar Docker](https://ayakaleaf-pro.mintlify.site/es/on-premises/installation/using-the-toolkit/0.-setup-docker.md). El plugin de Compose no es necesario. Esto también instala `containerd.io`.

**3. containerd para el kubelet**

El paquete `containerd.io` del repositorio de Docker tiene el plugin CRI desactivado. Escribe la configuración por defecto completa, que lo activa, y cámbiala a cgroups de systemd:

```bash wrap theme={null}
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# containerd 2.x writes config_path = '' and ignores /etc/containerd/certs.d without this
sudo sed -i "s|config_path = ''|config_path = '/etc/containerd/certs.d'|" /etc/containerd/config.toml
sudo systemctl restart containerd docker
```

**4. kubeadm, kubelet y kubectl**

Sigue [Installing kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) y, después, crea el clúster con `kubeadm init` y `kubeadm join` e instala un plugin de red. Por ejemplo, con flannel:

```yaml title="kubeadm-config.yaml" theme={null}
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16   # flannel's default
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
# Compile containers are started by Docker, outside the kubelet's accounting: keep memory for them
systemReserved:
  memory: 300Mi
kubeReserved:
  memory: 200Mi
```

```bash theme={null}
sudo kubeadm init --config kubeadm-config.yaml
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
```

El clúster también necesita una StorageClass por defecto. Para un clúster de prueba sirve [local-path-provisioner](https://github.com/rancher/local-path-provisioner); en producción, usa el almacenamiento en bloque de tu plataforma (Longhorn, Ceph, un driver CSI de la nube).

**5. Imágenes de TeX Live**

En **cada** nodo que pueda ejecutar Ayakaleaf Pro, descarga con Docker las imágenes de TeX Live que vayas a incluir en `ALL_TEX_LIVE_DOCKER_IMAGES`, por ejemplo:

```bash theme={null}
sudo docker pull ghcr.io/ayaka-notes/texlive-full:2026.1
```

`crictl pull` o `ctr` no sirven aquí: Ayakaleaf Pro pide la imagen a Docker. Las imágenes completas son grandes (unos 28 GB cada una); consulta [Compilaciones aisladas](https://ayakaleaf-pro.mintlify.site/es/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md) para ver la lista. Para una primera prueba basta con `ghcr.io/ayaka-notes/texlive-basic:2026.1` (unos 630 MB, un TeX Live mínimo).

### Preguntas y respuestas

> [accordion] ¿Puedo ejecutar Ayakaleaf Pro en nodos sin Docker?
>
> **Respuesta:** Solo con `SANDBOXED_COMPILES=false`. En ese caso, las compilaciones se ejecutan dentro del contenedor de Ayakaleaf Pro con su pequeño TeX Live integrado, y los documentos LaTeX pueden leer y escribir todo lo que ese contenedor puede. No lo recomendamos; consulta [Compilaciones aisladas](https://ayakaleaf-pro.mintlify.site/es/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md).

> [accordion] ¿Cuentan las compilaciones para el límite de memoria del pod?
>
> **Respuesta:** No. Los contenedores de TeX Live los inicia el Docker del nodo, fuera del pod y fuera de la vista del kubelet. Deja memoria libre en el nodo para ellos, por ejemplo con `systemReserved` como se indica arriba, y no llenes el nodo con otros pods.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.