Где k3s хранит капсулы?

Я не могу найти информацию о том, где хранятся модули, работающие на узлах… Я знаю его временный файл, но что, если я хочу, чтобы они создавались в определенном хранилище или точке монтирования?

Из df -h на одном узле я вижу, что он монтируется:

shm 64M 0 64M 0% /run/k3s/containerd/io.containerd.grpc.v1.cri/sandboxes/a9d11117b319432fff833cda48e5dc16f88bcc28b8e8148077d607ddaf41dfab/shm
overlay 15G 1.9G 12G 14% /run/k3s/containerd/io.containerd.runtime.v1.linux/k8s.io/a9d11117b319432fff833cda48e5dc16f88bcc28b8e8148077d607ddaf41dfab/rootfs
overlay 15G 1.9G 12G 14% /run/k3s/containerd/io.containerd.runtime.v1.linux/k8s.io/ab8b17764bed69e2702565fa171fcc84defcab1de7093bd68f53581732ef39fb/rootfs
overlay 15G 1.9G 12G 14% /run/k3s/containerd/io.containerd.runtime.v1.linux/k8s.io/dc246f55de330a4a0d23da56bf7212008e49fe974302c664b930869544a58051/rootfs
tmpfs 396M 0 396M 0% /run/user/1000

Но где же настройка того, какую корневую папку он использует для этого монтирования? Я хочу указать, например, / cluster_tmp как главный корень для модулей кластера, развернутых на узле...

Я использую кластер rpi и хотел бы использовать для хранения данных диск USB3, а не SD-карту, чтобы облегчить чтение / запись на карту…

4 ответа

Решение

k3s стоит на плечах гигантов. В качестве среды выполнения контейнеров он использует containerd. И containerd настраивается с собственной конфигурацией toml. Увидеть man 5 containerd-config:

root : The root directory for containerd metadata. (Default: "/var/lib/containerd")

И вот как /etc/containerd/config.toml похоже:

root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = 0
imports = ["/etc/containerd/runtime_*.toml", "./debug.toml"]
[grpc]
...

В rootпараметр - самый интересный для вас. Здесь вы можете найти его описание:

rootбудет использоваться для хранения любых типов постоянных данных для containerd. Снимки, контент, метаданные для контейнеров и изображений, а также любые данные плагинов будут храниться в этом месте. Корневой каталог также имеет пространство имен для подключаемых модулей, загружаемых с помощью контейнера. У каждого плагина будет свой каталог, в котором он хранит данные. Сам containerd на самом деле не имеет никаких постоянных данных, которые ему нужно хранить, его функциональность обеспечивается загруженными плагинами.

/var/lib/containerd/
├── io.containerd.content.v1.content
│   ├── blobs
│   └── ingest
├── io.containerd.metadata.v1.bolt
│   └── meta.db
├── io.containerd.runtime.v1.linux
│   ├── default
│   └── example
├── io.containerd.snapshotter.v1.btrfs
└── io.containerd.snapshotter.v1.overlayfs
    ├── metadata.db
    └── snapshots

/runдолжен быть tmpfs, т.е. находиться в оперативной памяти, а не на физическом носителе. Каталоги сообщили, что не являются фактическим хранилищем.

Учитывая вашу цель хранить большинство вещей на USB-накопителе, самым простым решением было бы переместить в него весь каталог данных k3s, используя --data-dir/-dпараметр командной строки согласно документации. Это заставит k3s и встроенный containerd разместить все свои рабочие файлы и каталог на USB-накопителе.

Я считаю, что k3s имеет собственный двоичный файл containerd и связанную с ним конфигурацию. Установив k3s явно, то есть вызвав команду "k3s server" с параметром

--container-runtime-endpoint value         (agent/runtime) Disable embedded containerd and use alternative CRI implementation

вы можете указать альтернативную среду выполнения контейнера, настроенную в соответствии с вашими потребностями, например, с хранилищем в другом томе или разделе.

Больше информации в документации k3s

Что касается вашей конкретной идеи, что произойдет, если USB-накопитель исчезнет?

Не похоже, что K3s будет создавать поды в определенном каталоге на узле. Я рекомендовал бы вам прочитать о Kubernetes архитектуры и компонентов Kubernetes.

Если вы хотите использовать конкретный каталог на node или какой-то сетевой диск, который вам нужно прочитать Persistent Volume а также Persistent Volume Claim.

Здесь вы можете найти информацию, как указать, какой путь в контейнере будет указывать путь на вашей виртуальной машине / сетевом диске.

Пожалуйста, уточните свой вопрос, если это не то, что вы ищете.

Другие вопросы по тегам