【问题标题】:Where is k3s storing pods?k3s 在哪里存储 pod?
【发布时间】:2020-03-31 08:17:50
【问题描述】:

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

从一个节点上的 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 作为部署在节点上的集群 pod 的主根...

我正在运行 rpi 集群,想使用 usb3 磁盘而不是 sd 卡进行存储,以减轻对卡的读/写...

【问题讨论】:

    标签: kubernetes k3s


    【解决方案1】:

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

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

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

    更多信息在k3s documentation

    不过,关于你的具体想法,如果 U 盘消失了会怎样?

    【讨论】:

      【解决方案2】:

      /run 应该是 tmpfs,因此在内存中而不是在物理媒体上。报告的目录不是实际的存储。

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

      【讨论】:

        【解决方案3】:

        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 本身实际上并没有任何需要存储的持久数据,它的功能来自加载的插件。

        /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
        

        【讨论】:

        • 也许这是最近的变化(目前正在运行 v1.20.2),但 K3S 似乎有自己的嵌入式容器实例(默认情况下)存储在 /var/lib/rancher/k3s/agent/containerd/。在我的机器上,/var/lib/containerd 似乎没有任何与 K3S 部署相关的工件。
        • 它不再像@JamesMchugh所说的那样有效,图像存储在/var/lib/rancher/k3s/agent/containerd/中。我尝试将/var/lib/rancher/k3s/agent/containerd/config.toml 更改为指向另一个位置(如记录的here),但它没有用。
        猜你喜欢
        • 2011-08-14
        • 2023-04-03
        • 2018-04-29
        • 2010-11-02
        • 2016-10-22
        • 2021-07-30
        • 2012-05-23
        • 2011-06-26
        • 2013-02-06
        相关资源
        最近更新 更多