> ## 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. Підготовка вузлів

> Встановіть Docker Engine, containerd і kubeadm на вузли та завантажте образи TeX Live.

Ayakaleaf Pro компілює LaTeX в [ізольованих](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md) контейнерах TeX Live. Він запускає їх сам, через сокет Docker машини, на якій працює. У Kubernetes це означає:

* на кожному вузлі, де може працювати под Ayakaleaf Pro, встановлено й запущено **Docker Engine**;
* кожен налаштований вами образ TeX Live завантажено **в Docker** на кожному з цих вузлів.

kubelet може й надалі використовувати containerd: Docker Engine постачається з `containerd.io`, і обидва використовують той самий демон у різних просторах імен.

> [!WARNING]
>
> Керовані пули вузлів без Docker (більшість стандартних конфігурацій EKS, GKE і AKS) не можуть виконувати ізольовану компіляцію. Використовуйте пули вузлів, де можна встановити Docker Engine, або позначте такі вузли мітками й утримуйте Ayakaleaf Pro на них за допомогою `nodeSelector`.

Наведені нижче кроки призначені для Ubuntu 24.04 і кластера, створеного за допомогою kubeadm. Якщо ваш кластер уже існує, виконайте кроки 1, 2 і 5 на вузлах, де працюватиме Ayakaleaf Pro.

**1. Модулі ядра та sysctl**

```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**

Встановіть Docker Engine з репозиторію Docker, як описано в розділі [0. Налаштування Docker](https://ayakaleaf-pro.mintlify.site/uk/on-premises/installation/using-the-toolkit/0.-setup-docker.md). Плагін Compose не потрібен. Це також встановлює `containerd.io`.

**3. containerd для kubelet**

У пакеті `containerd.io` з репозиторію Docker плагін CRI вимкнено. Запишіть повну конфігурацію за замовчуванням, яка його вмикає, і перемкніть її на cgroups 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 і kubectl**

Дотримуйтеся інструкції [Installing kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/), потім створіть кластер за допомогою `kubeadm init` і `kubeadm join` та встановіть мережевий плагін. Наприклад, із 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
```

Кластеру також потрібен StorageClass за замовчуванням. Для тестового кластера підійде [local-path-provisioner](https://github.com/rancher/local-path-provisioner); у продакшні використовуйте блочне сховище своєї платформи (Longhorn, Ceph, хмарний драйвер CSI).

**5. Образи TeX Live**

На **кожному** вузлі, де може працювати Ayakaleaf Pro, завантажте через Docker образи TeX Live, які ви вкажете в `ALL_TEX_LIVE_DOCKER_IMAGES`, наприклад:

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

`crictl pull` чи `ctr` тут не допоможуть: Ayakaleaf Pro запитує образ у Docker. Повні образи великі (близько 28 ГБ кожен); перелік див. у розділі [Ізольована компіляція](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md). Для першого тесту достатньо `ghcr.io/ayaka-notes/texlive-basic:2026.1` (близько 630 МБ, мінімальний TeX Live).

### Q\&A

> [accordion] Чи можна запускати Ayakaleaf Pro на вузлах без Docker?
>
> **Відповідь:** Лише з `SANDBOXED_COMPILES=false`. Тоді компіляції виконуються всередині контейнера Ayakaleaf Pro з його невеликим вбудованим TeX Live, і документи LaTeX можуть читати й записувати все, до чого має доступ цей контейнер. Ми цього не рекомендуємо; див. [Ізольована компіляція](https://ayakaleaf-pro.mintlify.site/uk/on-premises/configuration/overleaf-toolkit/sandboxed-compiles.md).

> [accordion] Чи враховуються компіляції в обмеженні пам'яті пода?
>
> **Відповідь:** Ні. Контейнери TeX Live запускає Docker вузла, поза подом і поза полем зору kubelet. Залишайте для них вільну пам'ять на вузлі, наприклад за допомогою `systemReserved`, як показано вище, і не заповнюйте вузол іншими подами.


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