k3s 存储 pods 在哪里?

Where is k3s storing pods?

我找不到关于节点上 运行 的 pods 存储位置的信息……我知道它的临时文件,但是如果我希望它们在特定存储或挂载点上创建怎么办?

从一个节点上的 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 作为已部署的集群 pods 的主根目录在节点上…

我是 运行ning rpi 集群,想使用 usb3 磁盘而不是 sd 卡进行存储,以减轻 read/writes 到卡的负担……

我相信 k3s 带有自己的 containerd 二进制文件和相关配置。通过显式安装 k3s,即调用 "k3s server" 命令,并使用选项

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

您可以指定一个根据您的需要配置的备用容器运行时,例如存储在不同的卷或分区中。

更多信息在 k3s documentation

不过根据你的具体想法,如果U盘不见了怎么办?

/run 应该是 tmpfs,因此在 ram 中而不是在物理介质上。那里报告的目录不是实际存储。

鉴于您的目标是将大部分内容存储在 USB 存储设备上,最简单的解决方案是将整个 k3s 数据目录移动到它,使用 --data-dir/-d 命令行选项作为根据 Documentation。这将强制 k3s 和嵌入式 containerd 将它们所有的工作文件和目录放在 USB 存储上。

k3s站在巨人的肩膀上。作为容器运行时,它使用 containerdcontainerd 使用自己的配置 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参数是您最感兴趣的。 Here 你可以找到它的描述:

root 将用于为 containerd 存储任何类型的持久数据。快照、内容、容器和图像的元数据以及任何插件数据都将保存在此位置。根也为 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