Containerd Snapshot Demo

Containerd 的一个重要的组件服务就是 snapshot ,主要的功能就是为容器准备 rootfs 文件系统,为了更好的理解 snapshot 服务的应用逻辑,通过ctr 工具来做一个 snapshot 实验。

实验目标:

  1. 理解 snapshot 的 prepare、mount 和 commit 功能用途,对看 snapshot 服务源码的理解上将大有裨益;
  2. 理解镜像层和层的父子关系,每一层都是对变更内容的快照,可将 committed 层作为父内容创建新的层;
  3. 理解容器 rootfs 文件系统(扩展学习一下关于本人的 oci image spec )

环境准备

// 本实验 containerd 版本为v1.5.2

// 准备挂载点
$# mkdir /var/lib/containerd/custom_dir  

snapshot 操作

// 第一次提交 (根)
$# ctr snapshot prepare activeLayer0                                                  // prepare 创建一个工作状态的层
$# ctr snapshot mount /var/lib/containerd/custom_dir activeLayer0  | xargs sudo       // snapshot 文件系统挂载(此挂载类型overlayfs)
$# echo “1" > ./custom_dir/add01                                                      // 增加一次变更文件 
$# umount /var/lib/containerd/custom_dir                                              // 卸载点
$# ctr snapshot commit commit_add01 activeLayer0                                      // 提交 committed,变更snapshot状态,保存Layer
                  
// 第二次提交,以第一次 layer 为 parent
$# ctr snapshot prepare activeLayer0 commit_add01
$# ctr snapshot mount /var/lib/containerd/custom_dir activeLayer0 | xargs sudo
$# echo "2" > /var/lib/containerd/custom_dir/add02
$# umount /var/lib/containerd/custom_dir
$# ctr snapshot commit commit_add02 activeLayer0

查看 snapshot 的过程状态记录 ctr snapshot ls

// 第一次 snapshot prepare
$# ctr snapshot ls
KEY                                PARENT                                           KIND
activeLayer0                                                                       Active

// 第一次 snapshot commit
$# ctr snapshot ls
KEY                                PARENT                                           KIND
commit_add01                                                                       Committed

// 第二次 snapshot prepare
$# ctr snapshot ls
KEY                                PARENT                                            KIND
activeLayer0                       commit_add01                                     Active
commit_add01                                                                        Committed

// 第二次 snapshot commit
$# ctr snapshot ls
KEY                                PARENT                                             KIND
commit_add01                                                                        Committed
commit_add02                      commit_add01                                      Committed

查看系统的挂载信息(linux默认snapshotter:overlayfs)

//第二次挂载后
$# mount   
overlay on /var/lib/containerd/custom_dir type overlay (rw,relatime,lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/26/fs,upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/27/fs,workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/27/work)

查看 snapshot layer 父子关系

// 第二次 prepare 后查看 tree
$# ctr snapshot tree
 commit_add01
  \_ activeLayer0

实验后清理工作

删除层需”先子后父"
$# ctr snapshot rm commit_add01
ctr: failed to remove "commit_add01": cannot remove snapshot with child: failed precondition

$# ctr snapshot rm commit_add02
$# ctr snapshot rm commit_add01

扩展学习: overlayfs 特性介绍

创建(文件/目录)
-在Upper层直接进行创建
修改(文件/目录)
-若指定文件存在于Upper,则直接修改访文件
-若指定文件仅存在于Lower, 则会先从Lower拷贝文件到Upper(copy_up操作),然后再修改
删除(文件)
-若指定文件仅存在于Upper,则直接删除该文件
-若指定文件存在于Lower,则在Upper层创建同名的字符设备
删除(目录)
-若指定目录仅存在于Upper,则直接删除该目录。
-若指定目录存在于Lower,则在Upper层创建同名的字符设备。
-若在删除后再次创建同名目录,且同名目录存在于Lower,此时新的目录成为opaque目录,通过将xattr的“trusted.overlay.opaque”设置为“y”实现标记,此时Upper层的该目录就会完全覆盖Lower中的目录,而非原先的合并。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写这篇文章主要是为了今后毕业论文素材上的整理,同时对docker进行巩固温习。大纲: docker简介docker...
    胡图仙人阅读 7,778评论 2 96
  • Storage Driver查询 可以使用docker info命令查看你的Docker使用的storage dr...
    梅_梅阅读 3,636评论 1 5
  • Web框架之Django: (1)简介: Django是一个由Python写成开源的重量级Web应用框架,采用MT...
    老肖阅读 3,168评论 0 18
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 129,807评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 8,038评论 0 4

友情链接更多精彩内容