containerd中文翻译系列(二十)快照器

快照器管理容器文件系统的快照。

可通过运行 ctr plugins lsnerdctl info 查看可用的快照器。

核心快照器插件

通用:

  • overlayfs`(默认): OverlayFS. 该驱动程序类似于 Docker/Moby 的 "overlay2 "存储驱动程序,但 containerd 的实现不叫 “overlay2”。
  • native`: 本地文件复制驱动程序。类似于 Docker/Moby 的 "vfs "驱动程序。

基于块:

  • blockfile: 为每个快照使用原始块文件的驱动程序。块文件从父文件或基础空块文件复制。挂载需要虚拟机或环回挂载支持。
  • devmapper: ext4/xfs 设备映射器。请参阅 devmapper.md

特定于文件系统:

  • btrfs: btrfs。需要将插件根目录(/var/lib/containerd/io.containerd.snapshotter.v1.btrfs)挂载为 btrfs。
  • zfs: ZFS。需要将插件根目录(/var/lib/containerd/io.containerd.snapshotter.v1.zfs)挂载为 ZFS。另请参见 https://github.com/containerd/zfs 。

已废弃:

  • aufs: AUFS。自 containerd 1.5 起已弃用。已在 containerd 2.0 中移除。另请参见 https://github.com/containerd/aufs 。

非核心快照器插件

  • fuse-overlayfs`: FUSE-OverlayFS快照器
  • nydus: Nydus 快照程序
  • overlaybd: OverlayBD 快照程序
  • stargz: Stargz 快照程序

挂载目标

挂载可以选择性地指定一个目标,以描述容器的rootfs 中的子挂载。例如,如果快照器希望将挂载绑定到overlayfs子目录的顶部,他们可以返回以下挂载:

[{"type": "overlay","source": "overlay","options": ["workdir=...","upperdir=...","lowerdir=..."]},{"type": "bind","source": "/path/on/host","target": "/path/inside/container","options": ["ro","rbind"]}
]

挂载需要有挂载点 /path/inside/container,因此之前的挂载之一必须负责在 rootfs 中提供该目录。在这种情况下,overlay 的下层目录中必须有一个目录来启用绑定挂载。

Devmapper 快照程序

devmapper 是一个 "containerd "快照器插件,可将快照存储在Device-mapper thin-pool的文件系统镜像中。Devmapper 插件利用了 Device-mapper 的功能,如 设备快照支持。

设置

要使用 devmapper snapshotter 插件,您需要提前准备一个 Device-mapper thin-pool 并更新 containerd 的配置文件。该文件通常位于 /etc/containerd/config.toml

下面是配置文件中的一个最小示例条目:

version = 2[plugins]...[plugins."io.containerd.snapshotter.v1.devmapper"]root_path = "/var/lib/containerd/devmapper"pool_name = "containerd-pool"base_image_size = "8192MB"...

支持以下配置标志:

  • root_path - 元数据所在的目录(如果为空
    将使用 containerd 插件的默认位置)
  • pool_name - Device-mapper 瘦池使用的名称。池名称
    应与 /dev/mapper/目录中的名称相同
  • base_image_size - 定义从基础(池)设备创建瘦设备快照时分配的空间大小
  • async_remove - 使用快照 GC 的清理回调同步删除设备的标志(默认:`false)
  • discard_blocks - 删除设备时是否丢弃块。当使用环回设备时,这对将磁盘空间返回文件系统特别有用。(默认:false)
  • fs_type - 定义快照设备挂载要使用的文件系统。有效值为ext4xfs(默认:`"ext4)
  • fs_options - 可选定义文件系统选项。目前仅适用于 ext4 文件系统。(默认:"")

“root_path”、"pool_name "和 "base_image_size "是必需的快照器参数。

运行

使用以下命令试试看:

ctr images pull --snapshotter devmapper docker.io/library/hello-world:latest
ctr run --snapshotter devmapper docker.io/library/hello-world:latest test

要求

devicemapper snapshotter 要求在计算机上安装并可用 dmsetup (>= 1.02.110) 命令行工具。在 Ubuntu 上,可使用 apt-get install dmsetup 命令安装。

如何设置Device-Mapper thin-pool

根据你的需求、磁盘配置和环境,有很多方法可以配置Device-Mapper thin-pool、
和环境。下面提供两种常见配置,一种适用于开发环境,另一种适用于生产环境。
生产环境。

1. 环回设备

在本地开发环境中,您可以使用环回设备。这种类型的配置很简单,非常适合开发和测试(请注意,这种配置速度较慢,不建议用于生产环境)。
运行以下脚本创建 thin-pool 设备及相关元数据和数据设备文件:

#!/bin/bash
set -exDATA_DIR=/var/lib/containerd/devmapper
POOL_NAME=devpoolsudo mkdir -p ${DATA_DIR}# Create data file
sudo touch "${DATA_DIR}/data"
sudo truncate -s 100G "${DATA_DIR}/data"# Create metadata file
sudo touch "${DATA_DIR}/meta"
sudo truncate -s 10G "${DATA_DIR}/meta"# Allocate loop devices
DATA_DEV=$(sudo losetup --find --show "${DATA_DIR}/data")
META_DEV=$(sudo losetup --find --show "${DATA_DIR}/meta")# Define thin-pool parameters.
# See https://www.kernel.org/doc/Documentation/device-mapper/thin-provisioning.txt for details.
SECTOR_SIZE=512
DATA_SIZE="$(sudo blockdev --getsize64 -q ${DATA_DEV})"
LENGTH_IN_SECTORS=$(bc <<< "${DATA_SIZE}/${SECTOR_SIZE}")
DATA_BLOCK_SIZE=128
LOW_WATER_MARK=32768# Create a thin-pool device
sudo dmsetup create "${POOL_NAME}" \--table "0 ${LENGTH_IN_SECTORS} thin-pool ${META_DEV} ${DATA_DEV} ${DATA_BLOCK_SIZE} ${LOW_WATER_MARK}"cat << EOF
#
# Add this to your config.toml configuration file and restart the containerd daemon
#
[plugins][plugins."io.containerd.snapshotter.v1.devmapper"]pool_name = "${POOL_NAME}"root_path = "${DATA_DIR}"base_image_size = "10GB"discard_blocks = true
EOF

使用 dmsetup 验证瘦池是否创建成功:

sudo dmsetup ls
devpool	(253:0)

配置并重新启动 containerd 后,您将看到以下输出:

INFO[2020-03-17T20:24:45.532604888Z] loading plugin "io.containerd.snapshotter.v1.devmapper"...  type=io.containerd.snapshotter.v1
INFO[2020-03-17T20:24:45.532672738Z] initializing pool device "devpool"
2. direct-lvm thin-pool

另一种设置thin-pool的方法是通过 container-storage-setup工具(以前称为 “docker-storage-setup”)。这是一个用于配置 CoW 文件系统(如 devicemapper)的脚本:

#!/bin/bash
set -ex# Block device to use for devmapper thin-pool
BLOCK_DEV=/dev/sdf
POOL_NAME=devpool
VG_NAME=containerd# Install container-storage-setup tool
git clone https://github.com/projectatomic/container-storage-setup.git
cd container-storage-setup/
sudo make install-core
echo "Using version $(container-storage-setup -v)"# Create configuration file
# Refer to `man container-storage-setup` to see available options
sudo tee /etc/sysconfig/docker-storage-setup <<EOF
DEVS=${BLOCK_DEV}
VG=${VG_NAME}
CONTAINER_THINPOOL=${POOL_NAME}
EOF# Run the script
sudo container-storage-setupcat << EOF
#
# Add this to your config.toml configuration file and restart containerd daemon
#
[plugins][plugins.devmapper]root_path = "/var/lib/containerd/devmapper"pool_name = "${VG_NAME}-${POOL_NAME}"base_image_size = "10GB"
EOF

如果成功,container-storage-setup 将输出:

+ echo VG=containerd
+ sudo container-storage-setup
INFO: Volume group backing root filesystem could not be determined
INFO: Writing zeros to first 4MB of device /dev/xvdf
4+0 records in
4+0 records out
4194304 bytes (4.2 MB) copied, 0.0162906 s, 257 MB/s
INFO: Device node /dev/xvdf1 exists.Physical volume "/dev/xvdf1" successfully created.Volume group "containerd" successfully createdRounding up size to full physical extent 12.00 MiBThin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.Logical volume "devpool" created.Logical volume containerd/devpool changed.
...

dmsetup 将产生以下输出:

sudo dmsetup ls
containerd-devpool          (253:2)
containerd-devpool_tdata    (253:1)
containerd-devpool_tmeta    (253:0)

另请参阅 Configure direct-lvm mode for production,了解有关生产 devmapper 设置的更多信息。

其他资源

有关 Device-mapper、精简配置等更多信息,可参考以下资源:

  • https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/device_mapper
  • https://en.wikipedia.org/wiki/Device_mapper
  • https://docs.docker.com/storage/storagedriver/device-mapper-driver/
  • https://www.kernel.org/doc/Documentation/device-mapper/thin-provisioning.txt
  • https://www.kernel.org/doc/Documentation/device-mapper/snapshot.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:回归决策树(Python)

一、平方误差的计算 square_error_utils.py import numpy as npclass SquareErrorUtils:"""平方误差最小化准则&#xff0c;选择其中最优的一个作为切分点对特征属性进行分箱处理"""staticmethoddef _set_sample_weight(sample_weight, n_samp…

Blender教程(基础)--试图的显示模式-22

一、透视模式&#xff08;AltZ&#xff09; 透视模式下可以实现选中透视的物体信息 发现选中了透视区的所有顶点 二、试图着色模式-显示网格边框 三、试图着色模式-显示实体 三、试图着色模式-材质预览 四、试图着色模式-显示渲染预览

深入解析MySQL 8:事务数据字典的变革

随着数据库技术的不断发展和完善&#xff0c;元数据的管理成为了一个日益重要的议题。在MySQL 8中&#xff0c;一项引人注目的新特性是引入了事务数据字典&#xff08;Transaction Data Dictionary&#xff0c;简称TDD&#xff09;&#xff0c;它改变了元数据的管理方式&#x…

医学图像隐私保护

随着数字医疗技术的快速发展&#xff0c;医学图像例如X光片、CT扫描、MRI及超声波扫描已成为现代医疗診断和治療的基石。然而&#xff0c;同时这些包含敏感个人信息的图像也面临着隐私和安全方面的挑战。随着数据泄露事件的增多&#xff0c;医学图像隐私保护变得尤为重要。 从…

Ps:直接从图层生成文件(图像资源)

通过Ps菜单&#xff1a;文件/导出/将图层导出到文件 Layers to Files命令&#xff0c;我们可以快速地将当前文档中的每个图层导出为同一类型、相同大小和选项的独立文件。 Photoshop 还提供了一个功能&#xff0c;可以基于文档中的图层或图层组的名称&#xff0c;自动生成指定大…

CleanMyMacX4.14.6如何清理mac垃圾内存

一直以来&#xff0c;苹果电脑的运行流畅度都很好&#xff0c;但是垃圾内存多了磁盘空间慢慢变少&#xff0c;还是会造成卡顿的。这篇文章就告诉大家电脑如何清理垃圾内存&#xff0c;电脑如何清理磁盘空间。 一、电脑如何清理垃圾内存 垃圾内存指的是各种缓存文件和系统垃圾…

Java图形化界面编程——事件处理 笔记

2.6 事件处理 前面介绍了如何放置各种组件&#xff0c;从而得到了丰富多彩的图形界面&#xff0c;但这些界面还不能响应用户的任何操作。比如单击前面所有窗口右上角的“X”按钮&#xff0c;但窗口依然不会关闭。因为在 AWT 编程中 &#xff0c;所有用户的操作&#xff0c;都必…

多个总体均值的比较(多元方差分析)

多元方差分析是什么 多元方差分析是一种统计方法&#xff0c;用于比较两个或更多组的均值在一个或多个自变量上的差异是否具有统计学意义。它可以同时考虑多个自变量对因变量的影响&#xff0c;以及自变量之间的交互作用。它是广义线性模型的拓展&#xff0c;适用于因变量为连…

JMeter使用教程

作为一名开发工程师&#xff0c;当我们接到需求的时候&#xff0c;一般就是分析需要&#xff0c;确定思路&#xff0c;编码&#xff0c;自测&#xff0c;然后就可以让测试人员去测试了。在自测这一步&#xff0c;作为开发人员&#xff0c;很多时候就是测一下业务流程是否正确&a…

Python 小白的 Leetcode Daily Challenge 刷题计划 - 20240209(除夕)

368. Largest Divisible Subset 难度&#xff1a;Medium 动态规划 方案还原 Yesterdays Daily Challenge can be reduced to the problem of shortest path in an unweighted graph while todays daily challenge can be reduced to the problem of longest path in an unwe…

用Python来实现2024年春晚刘谦魔术

简介 这是新春的第一篇&#xff0c;今天早上睡到了自然醒&#xff0c;打开手机刷视频就被刘谦的魔术所吸引&#xff0c;忍不住用编程去模拟一下这个过程。 首先&#xff0c;声明的一点&#xff0c;大年初一不学习&#xff0c;所以这其中涉及的数学原理约瑟夫环大家可以找找其…

【新书推荐】7.3 for语句

本节必须掌握的知识点&#xff1a; 示例二十四 代码分析 汇编解析 for循环嵌套语句 示例二十五 7.3.1 示例二十四 ■for语句语法形式&#xff1a; for(表达式1;表达式2;表达式3) { 语句块; } ●语法解析&#xff1a; 第一步&#xff1a;执行表达式1&#xff0c;表达式1…

LabVIEW工业监控系统

LabVIEW工业监控系统 介绍了一个基于LabVIEW软件开发的工业监控系统。系统通过虚拟测控技术和先进的数据处理能力&#xff0c;实现对工业过程的高效监控&#xff0c;提升系统的自动化和智能化水平&#xff0c;从而满足现代工业对高效率、高稳定性和低成本的需求。 随着工业自…

BestEdrOfTheMarket:一个针对AVEDR绕过的训练学习环境

关于BestEdrOfTheMarket BestEdrOfTheMarket是一个针对AV/EDR绕过的训练学习环境&#xff0c;广大研究人员和信息安全爱好者可以使用该项目研究和学习跟AV和EDR绕过相关的技术知识。 支持绕过的防御技术 1、多层API钩子&#xff1b; 2、SSH钩子&#xff1b; 3、IAT钩子&#x…

springboot176基于Spring Boot的装饰工程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

嵌入式开发——linux系统怎么知道接了多少物理内存?

1、前言 linux系统是不知道当前设备接了多少内存&#xff0c;需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式 动态识别&#xff08;X86架构大多是这种&#xff09;&#xff1a;可以插拔的内存条&#xff0c;bootloader能识别出内存条的容量代码…

【Make编译控制 01】程序编译与执行

目录 一、编译原理概述 二、编译过程分析 三、编译动静态库 四、执行过程分析 一、编译原理概述 make&#xff1a; 一个GCC工具程序&#xff0c;它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接&#xff0c;然后发布必要的命令。它读出的脚本&#xff08;叫做 …

react中hook封装一个table组件 与 useColumns组件

目录 1&#xff1a;react中hook封装一个table组件依赖CommonTable / index.tsx使用组件效果 2&#xff1a;useColumns组件useColumns.tsx使用 1&#xff1a;react中hook封装一个table组件 依赖 cnpm i react-resizable --save cnpm i ahooks cnpm i --save-dev types/react-r…

开源微服务平台框架的特点是什么?

借助什么平台的力量&#xff0c;可以让企业实现高效率的流程化办公&#xff1f;低代码技术平台是近些年来较为流行的平台产品&#xff0c;可以帮助很多行业进入流程化办公新时代&#xff0c;做好数据管理工作&#xff0c;从而提升企业市场竞争力。流辰信息专业研发低代码技术平…

软件文档测试

1 文档测试的范围 软件产品由可运行的程序、数据和文档组成。文档是软件的一个重要组成部分。 在软件的整人生命周期中&#xff0c;会用到许多文档&#xff0c;在各个阶段中以文档作为前阶段工作成果的体现和后阶段工作的依据。 软件文档的分类结构图如下图所示&#xff1a; …